Hadoop-操作与集群管理秘籍-三-

67 阅读22分钟

Hadoop 操作与集群管理秘籍(三)

原文:Hadoop Operations and Cluster Management Cookbook

协议:CC BY-NC-SA 4.0

五、增强 Hadoop 集群

在本章中,我们将介绍:

  • 配置服务级别身份验证
  • 使用 ACL 配置作业授权
  • 使用 Kerberos 保护 Hadoop 集群
  • 配置 Web 用户界面身份验证
  • 从 NameNode 故障中恢复
  • 配置 NameNode 高可用性
  • 配置 HDFS 联合

简介

Hadoop 集群的安全性对其可用性至关重要。 加强 Hadoop 集群包括配置对资源(如作业、队列和各种管理服务)的访问控制。 我们将引入 NameNodeHigh Availability(HA)来解决单节点故障问题。 最后,我们将介绍 Hadoop 联合,它联合多台机器来扩展集群的容量。

配置服务级别身份验证

服务级身份验证(SLA)的目的是确保 Hadoop 用户拥有访问某些服务的适当权限。 此配置的一个用例是控制可以使用集群的允许用户列表。 这是通过 Hadoop 中的访问控制列表(ACL)强制执行的。 在本食谱中,我们将列出配置 SLA 的步骤。

做好准备

在开始之前,我们假设我们的 Hadoop 集群已经正确配置,并且所有守护进程都在运行,没有任何问题。

使用以下命令从管理员机器登录到主节点:

ssh hduser@master

怎么做……

使用以下步骤配置 Hadoop SLA:

  1. Enable SLA by opening the $HADOOP_HOME/conf/core-site.xml file and add or change the hadoop.property.authorization value to be true, as shown in the following snippet:

    <property>
      <name>hadoop.property.authorization</name>
      <value>true</name>
    </property>
    

    备注

    默认情况下,Hadoop 集群的 SLA 处于禁用状态。

  2. Allow only specific users to submit jobs to the Hadoop cluster by adding or changing the following property in the $HADOOP_HOME/conf/hadoop-policy.xml file:

    <property>
      <name>security.job.submission.protocol.acl</name>
      <value>hduser hadoop</name>
    </property>
    

    备注

    此配置仅允许用户hduser和组hadoop向 Hadoop 集群提交作业。

  3. Allow only specific users and groups to talk to HDFS by opening the $HADOOP_HOME/conf/hadoop-policy.xml file and add the following property:

    <property>
      <name>security.client.protocol.acl</name>
      <value>hduser,hdadmin hadoop</name>
    </property>
    

    备注

    此配置仅允许用户hduserhdadmin以及组hadoop访问 HDFS

  4. Allow only specific DataNodes to communicate with the NameNode by changing the security.datanode.protocol.acl property in the $HADOOP_HOME/conf/hadoop-policy.xml file similar to the following code:

    <property>
      <name>security.datanode.protocol.acl</name>
      <value>datanode</name>
    </property>
    

    备注

    此配置仅允许作为属于组datanode的用户运行的 DataNode 实例与集群中的 NameNode 通信。

  5. Force the NameNode to reload the ACL configurations with the following command:

    hadoop dfsadmin -refreshServiceAcl
    
    

    备注

    此命令将强制从policy文件重新加载与 HDFS 相关的 ACL。

  6. 使用以下命令强制 JobTracker 重新加载服务 ACL 配置:

    hadoop mradmin -refreshServiceAcl
    
    

它是如何工作的.

属性(如security.namenode.protocol.acl)的值是逗号分隔的用户列表和组的逗号分隔列表。 用户列表和组列表由空格分隔。 例如,值的通用格式应类似于以下内容:

<value>user1,user2,user3 group1,group2</value>

还有更多...

除了我们在本食谱中提到的三个属性外,Hadoop 中还提供了许多其他 ACL 属性。 下表显示了这些属性的含义:

|

性质 / 财产 / 所有权

|

服务描述

| | --- | --- | | security.client.protocol.acl | 客户端对 HDFS 的访问 | | security.client.datanode.protocol.acl | 用于数据块恢复的客户端到数据节点 | | security.inter.datanode.protocol.acl | 数据节点到数据节点更新时间戳 | | security.inter.tracker.protocol.acl | TaskTracker 到 JobTracker | | security.job.submission.protocol.acl | 用于作业提交、查询等的 JobTracker 客户端 | | security.task.umbilical.protocol.acl | 有关映射和减少任务的信息,请联系 TaskTracker | | security.refresh.policy.protocol.acl | Dfsadmin 和 mradmin 刷新 ACL 策略 |

这些属性的默认值是*,这意味着所有实体都可以访问该服务,换句话说,SLA 被禁用。

另请参阅

使用 ACL 配置作业授权

Hadoop 提供两个级别的作业授权:作业级别和队列级别。 启用作业授权后,JobTracker 将对向集群提交作业的用户进行身份验证。 用户对作业和队列的操作也将由 JobTracker 进行身份验证。 在本食谱中,我们将展示使用 ACL 配置作业授权的步骤。

做好准备

我们假设我们的 Hadoop 集群已经正确配置,没有任何问题。

使用以下命令从管理员计算机登录到主节点:

ssh hduser@master

怎么做……

使用以下步骤配置具有 ACL 的作业授权:

  1. Enable job ACL authorization by adding the following property to the $HADOOP_HOME/conf/mapred-site.xml file:

    <property>
      <name>mapred.acls.enabled</name>
      <value>true</name>
    </property>
    

    备注

    此属性将启用队列 ACL 和作业 ACL。

  2. Configure job authorization to only allow specific users and groups to submit jobs by adding the following property to the $HADOOP_HOME/conf/mapred-queue-acls.xml file:

    <property>
      <name>mapred.queue.hdqueue.acl-submit-job</name>
      <value>hduser hadoop</name>
    </property>
    

    备注

    此配置将仅允许用户hduser和组hadoop向队列hdqueue提交作业。

  3. Configure job authorization to allow specific users and groups to manage jobs in a named queue by adding the following property to the $HADOOP_HOME/conf/mapred-queue-acls.xml file:

    <property>
      <name>mapred.queue.hdqueue.acl-administer-job</name>
      <value>hduser hadoop</name>
    </property>
    

    备注

    此配置将仅允许用户hduser和组hadoop管理队列hdqueue的作业。

  4. Check the status of queue ACLs with the following command:

    hadoop queue -showacls
    
    

    输出将类似于以下内容:

    Queue acls for user :  hduser
    Queue  Operations
    =====================
    default  submit-job,administer-jobs
    hdqueue  submit-job,administer-jobs
    
    
  5. Configure job authorization to allow only specific users and groups to view the status of a job by adding the following property to the $HADOOP_HOME/conf/mapred-queue-acls.xml file:

    <property>
      <name>mapreduce.job.acl-view-job</name>
      <value>hduser hadoop</name>
    </property>
    

    提示

    与队列级别 ACL 不同,作业级别 ACL 为所有提交的作业指定访问控制,而不考虑作业已提交到的队列。

  6. 通过将以下属性添加到$HADOOP_HOME/conf/mapred-queue-acls.xml文件,将作业授权配置为仅允许特定用户和组修改作业:

    <property>
      <name>mapreduce.job.acl-modify-job</name>
      <value>hduser hadoop</name>
    </property>
    
  7. 使用以下命令强制 NameNode 和 JobTracker 重新加载 ACL 配置:

    hadoop dfsadmin -refreshServiceAcl
    hadoop mradmin -refreshServiceAcl
    
    

它是如何工作的.

与前面配方中的 SLA 属性类似,mapred.queue.hdqueue.acl-submit-job等属性的值是一个逗号分隔的用户列表和一个逗号分隔的组列表。 用户列表和组列表由空格分隔。 例如,值的通用格式应类似于以下内容:

<value>user1,user2,user3 group1,group2</value>

提示

作业所有者、超级用户和向其提交作业的集群管理员将始终有权查看和修改作业。

作业视图 ACL 控制作业状态信息的访问,包括计数器、诊断信息、日志、作业配置等。

作业修改 ACL 可以与队列级 ACL 重叠。 发生这种情况时,如果用户已列在这两个 ACL 中的任何一个中,则将授予该用户的操作。

另请参阅

使用 Kerberos 保护 Hadoop 集群

最新的 Hadoop 版本通过将Kerberos集成到 Hadoop 中添加了安全功能。 Kerberos 是一种网络身份验证协议,它为客户端/服务器应用提供强身份验证。 Hadoop 使用 Kerberos 保护数据免受意外和未经授权的访问。 它通过对底层的远程过程调用(RPC)进行身份验证来实现这一点。 在本食谱中,我们将概述为 Hadoop 集群配置 Kerberos 身份验证的步骤。

做好准备

Kerberos 是由麻省理工学院创建的。 它旨在通过使用密钥加密为客户端/服务器应用提供强身份验证。 Kerberos 协议要求客户端向服务器提供其身份,反之亦然。 当他们的身份被 Kerberos 证实后,他们的所有后续通信都将被加密。

在开始之前,我们假设我们的 Hadoop 已经正确配置,没有任何问题,并且所有 Hadoop 守护进程都在运行,没有任何问题。 在我们的 CentOS 计算机上,使用以下命令安装 Kerberos 软件包:

sudo yum install krb5-libs, krb5-server, krb5-workstation

在此之后,应该可以从命令行访问kadminkinit命令。

如果您还在使用 CentOS 或其他与 Red Hat 兼容的操作系统,我们需要从以下链接下载 Java Cryptoography Extension(JCE)无限强度管辖策略文件:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

在网页底部,您应该会看到类似以下内容的选项:

Getting ready

根据您的 Java 版本,单击屏幕右侧的下载链接,我们可以使用java -version命令获取该链接。

怎么做……

使用以下步骤为 Hadoop 集群配置 Kerberos:

  1. Start the Kerberos admin shell:

    kadmin
    
    

    提示

    如果您的帐户没有 root 访问权限,则需要使用kadmin.local命令!

  2. kadminshell 中使用以下命令创建hduser主体:

    addprinc -randkey hduser/master.hdcluster.com@HDREALM
    
    
  3. kadmin外壳中使用以下命令创建 SPNEGO 的 HTTP 主体:

    addprinc -randkey HTTP/master.hdcluster.com@HDREALM
    
    
  4. 使用以下命令创建包含hduser实例和 HTTP 主体的keytab文件:

    xst -norandkey -k hduser.keytab hduser/master.hdcluster.com HTTP/master.hdcluster.com
    
    
  5. Show available keytab file entries with the following command:

    klist -e -k -t hduser.keytab
    
    

    输出将类似于以下内容:

    Keytab name: WRFILE:hduser.keytab
    slot KVNO Principal
    ---- ---- ---------------------------------------------------------------
    1    7    HTTP/master.hdcluster.com@HDREALM (DES cbc mode with CRC-32)
    2    7    HTTP/master.hdcluster.com@HDREALM (Triple DES cbc mode with HMAC/sha1)
    3    7    hduser/master.hdcluster.com@HDREALM (DES cbc mode with CRC-32)
    4    7    hduser/master.hdcluster.com@HDREALM (Triple DES cbc mode with HMAC/sha1)
    
    
  6. 使用以下命令将keytab文件移动到 Hadoop 配置目录:

    cp *.keytab $HADOOP_HOME/conf
    
    
  7. 使用以下内容更改hduser``keytab文件的所有者:

    sudo chown hduser:hadoop $HADOOP_HOME/conf/hduser.keytab
    
    
  8. Change the permission of the keytab files with:

    sudo chmod 400 $HADOOP_HOME/conf/*.keytab
    
    

    备注

    只有所有者才能读取keytab文件。

  9. 使用

    for node in `cat $HADOOP_HOME/conf/slaves`; do
     echo 'Copying keytab files to ' $host
     scp $HADOOP_HOME/conf/*.keytab $host:$HADOOP_HOME/conf/
    done
    
    

    将所有kaytab文件复制到从节点

  10. 使用以下命令停止集群:

```sh
stop-all.sh

```

11. 使用您喜欢的文本编辑器打开$HADOOP_HOME/conf/core-site.xml文件,并向该文件添加以下行:

```sh
<property>
  <name>hadoop.security.authorization</name>
  <value>true</value>
</property>

<property>
  <name>hadoop.security.authentication</name>
  <value>kerberos</value> 
</property>

<property>
  <name>hadoop.security.use-weak-http-crypto</name>
  <value>false</value>
</property>
```

12. 使用您最喜欢的文本编辑器打开$HADOOP_HOME/conf/hdfs-site.xml文件,并在文件中添加以下行:

```sh
<property>
  <name>dfs.block.access.token.enable</name>
  <value>true</value>
</property>

<property>
  <name>dfs.http.address</name>
  <value>master:50070</value>
</property>

<property>
  <name>dfs.namenode.keytab.file</name>
  <value>$HADOOP_HOME/conf/hduser.keytab</value>
</property>

<property>
  <name>dfs.namenode.kerberos.principal</name>
  <value>hduser/master.hdcluster.com@HDREALM</value>
</property>

<property>
  <name>dfs.namenode.kerberos.internal.spnego.principal</name>
  <value>HTTP/master.hdcluster.com@HDREALM</value>
</property>

<property>
  <name>dfs.secondary.namenode.keytab.file</name>
  <value>$HADOOP_HOME/conf/hduser.keytab</value>
</property>

<property>
  <name>dfs.secondary.namenode.kerberos.principal</name>
  <value>hduser/master.hdcluster.com@HDREALM</value>
</property>
<property>
  <name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
  <value>HTTP/master.hdcluster.com@HDREALM</value>
</property>

<property>
  <name>dfs.secondary.http.address</name>
  <value>master.hdcluster.com:50090</value>
</property>

<property>
  <name>dfs.datanode.data.dir.perm</name>
  <value>700</value>
</property>

<property>
  <name>dfs.datanode.address</name>
  <value>0.0.0.0:1004</value>
</property>

<property>
  <name>dfs.datanode.http.address</name>
  <value>0.0.0.0:1006</value>
</property>

<property>
  <name>dfs.datanode.keytab.file</name>
  <value>$HADOOP_HOME/conf/hduser.keytab</value>
</property>

<property>
  <name>dfs.datanode.kerberos.principal</name>
  <value>hduser/master.hdcluster.com@HDREALM</value>
</property>
```

13. 通过向$HADOOP_HOME/conf/hdfs-site.xml文件添加以下属性来启用 webHDFS:

```sh
<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>
```

14. 通过将以下两个属性添加到$HADOOP_HOME/conf/hdfs-site.xml文件来配置 Kerberos Web 身份验证:

```sh
<property>
  <name>dfs.web.authentication.kerberos.principal</name>
  <value>HTTP/master.hdcluster.com@HDREALM</value>
</property>

<property>
  <name>dfs.web.authentication.kerberos.keytab</name>
  <value>$HADOOP_HOME/conf/HTTP.keytab</value>
</property>
```

15. Start the cluster with the following command:

```sh
start-all.sh

```

我们将收到类似以下内容的日志消息:

```sh
13/02/25 10:19:02 INFO security.UserGroupInformation:
Login successful for user hduser/master.hdcluster.com@HDREALM using keytab file /usr/local/hadoop/hduser.keytab
13/02/25 10:19:07 INFO http.HttpServer: Added global filtersafety (class=org.apache.hadoop.http.HttpServer$QuotingInputFilter)
13/02/25 10:19:12 INFO http.HttpServer: Adding Kerberos (SPNEGO) filter to getDelegationToken
13/02/25 10:19:15 INFO http.HttpServer: Adding Kerberos (SPNEGO) filter to renewDelegationToken
13/02/25 10:19:22 INFO http.HttpServer: Adding Kerberos (SPNEGO) filter to cancelDelegationToken
13/02/25 10:19:32 INFO http.HttpServer: Adding Kerberos (SPNEGO) filter to fsck
13/02/25 10:19:36 INFO http.HttpServer: Adding Kerberos (SPNEGO) filter to getimage

```

16. 使用以下命令将一个简单的文本文件复制到 HDFS 中,以测试 Kerberos 配置:

```sh
hadoop fs -put $HADOOP_HOME/conf/slaves .
```

17. 在 HDFS 目录上设置粘滞位,以防止未经授权的用户使用以下命令删除目录或文件:

```sh
sudo -u hdfs hadoop fs -chmod 1777 /tmp

```

18. Verify the sticky bit setting with the following command:

```sh
hadoop fs -ls /

```

输出应类似于:

```sh
Found 2 items
drwxrwxrwt - hduser supergroup 0 2013-03-10 15:55 /tmp
drwxr-xr-x - hduser supergroup 0 2013-03-10 14:01 /user

```

19. 通过将以下行添加到$HADOOP_HOME/conf/mapred-site.xml文件来配置 MapReduce Kerberos 身份验证:

```sh
<property>
  <name>mapreduce.jobtracker.kerberos.principal</name>
  <value>hduser/master.hdcluster.com@HDREALM</value>
</property>

<property>
  <name>mapreduce.jobtracker.keytab.file</name>
  <value>$HADOOP_HOME/conf/hduser.keytab</value>
</property>

<property>
  <name>mapreduce.tasktracker.kerberos.principal</name>
  <value>$HADOOP_HOME/conf/hduser.keytab</value>
</property>

<property>
  <name>mapreduce.tasktracker.keytab.file</name>
  <value>$HADOOP_HOME/conf/hduser.keytab</value>
</property>

<property>
  <name>mapred.task.tracker.task-controller</name>
  <value>org.apache.hadoop.mapred.LinuxTaskController</value>
</property>

<property>
  <name>mapreduce.tasktracker.group</name>
  <value>hadoop</value>
</property>
```

20. 创建包含以下内容的$HADOOP_HOME/conf/taskcontrol.cfg文件:

```sh
mapred.local.dir=${hadoop.tmp.dir}/mapred/local
hadoop.log.dir=$HADOOP_HOME/logs
mapreduce.tasktracker.group=hduser
banned.users=
min.user.id=2000
```

21. Change the ownership and permission of the $HADOOP_HOME/conf/taskcontroller.cfg file:

```sh
sudo chown root:mapred $HADOOP_HOME/conf/task-controller.cfg
sudo chmod 4754 $HADOOP_HOME/conf/task-controller.cfg

```

### 备注

修改后的权限应如下所示:

```sh
-rwsr-xr-- 1 hduser superuser 91886 2013-03-10 13:44 task-controller.cfg

```

22. Start the MapReduce cluster with the following command:

```sh
start-mapred.sh

```

### 备注

我们应该能够获得类似于以下内容的日志记录消息:

```sh
13/02/26 12:25:02 INFO security.UserGroupInformation:
Login successful for user hduser/master.hdcluster.com@HDREALM using keytab file $HADOOP_HOME/conf/hduser.keytab.

```

23. 通过使用以下命令运行示例 MapReduce 作业来测试 Kerberos 配置:

```sh
hadoop jar $HADOOP_HOME/hadoop-example*.jar pi 20 1000000

```

另请参阅

配置 Web 用户界面身份验证

默认情况下,Hadoop 用户和管理员无需任何身份验证即可访问 Hadoop 守护进程的 Web UI。 可以将 Hadoop 守护程序 Web UI 配置为使用 Kerberos 对用户进行身份验证。 在本菜谱中,我们将概述配置用户身份验证以访问 Web UI 的步骤。

做好准备

我们假设我们的 Hadoop 已经正确配置,并且所有守护进程都在正常运行,没有任何问题。 我们还假设已经正确配置了 Kerberos 身份验证。

在本配方中,我们假设所有属性配置都将在$HADOOP_HOME/conf/core-site.xml文件上进行更改。

怎么做……

使用以下步骤配置 Web 用户界面身份验证:

  1. 使用以下命令停止集群:

    stop-all.sh
    
    
  2. 添加或更改以下属性:

    <property>
      <name>hadoop.http.filter.initializers</name>
    <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
    </property>
    
  3. Change the HTTP authentication type by adding the following code:

    <property>
      <name>hadoop.http.authentication.type</name>
      <value>kerberos</value>
    </property>
    

    提示

    其他 HTTP 身份验证类型包括简单身份验证和用户自定义身份验证,可通过指定AUTHENTICATION_HANDLER_CLASSNAME值选择这两种身份验证类型。 默认身份验证类型为简单。

  4. Configure the authentication token's valid time length by changing the hadoop.http.authentication.token.validity property to the following:

    <property>
      <name>hadoop.http.authentication.token.validity</name>
      <value>10000</value>
    </property>
    

    提示

    该值的单位是秒。 此属性的默认值为36000

  5. Configure the location of the signature.secret file, which will be used to sign the authentication tokens, by changing the hadoop.http.authentication.signature.secret.file property similar to the following:

    <property>
      <name>hadoop.http.authentication.signature.secret.file</name>
      <value>$HADOOP_HOME/conf/http-auth.secret</value>
    </property>
    

    备注

    如果未设置此属性,将在启动时生成随机的secret文件。 用于保密的默认文件将是${user.name}/hadoop-auth-signature-secret

  6. Configure the domain name for HTTP cookies, which stores authentication tokens, by changing the hadoop.http.authentication.cookie.domain property similar to the following:

    <property>
      <name>hadoop.http.authentication.cookie.domain</name>
      <value>hdcluster.com</value>
    </property>
    

    提示

    警告!

    此属性是 HTTP 身份验证正常工作所必需的。

  7. 通过更改类似于以下内容的hadoop.http.authentication.kerberos.principal属性来配置 HTTP 端点的 Kerberos 主体:

    <property>
      <name>hadoop.http.authentication.kerberos.principal</name>
      <value>HTTP/master.hdcluster.com@HDREALM</value>
    </property>
    
  8. 通过更改类似于以下内容的hadoop.http.authentication.kerberos.keytab属性,为 HTTP 终结点的 Kerberos 主体配置keytab文件的位置:

    <property>
      <name>hadoop.http.authentication.kerberos.keytab</name>
      <value>${user.home}/kerberos.hadoop.keytab</value>
    </property>
    
  9. 使用以下命令将配置同步到从节点:

    for host in `cat $HADOOP_HOME/conf/slaves`; do
     echo "Copying Hadoop configration files to host: ' $host
     scp $HADOOP_HOME/conf/core-site.xml $host:$HADOOP_HOME/conf
    done
    
    
  10. 使用以下命令启动 Hadoop 集群:

```sh
start-all.sh

```

11. 通过打开 URLmaster:50030/jobtracker.jsp验证配置。 12. 或者,我们可以使用以下curl命令测试我们的配置:

```sh
curl -v -u hduser --negotiate http://master:50030/jobtracker.jsp

```

它是如何工作的.

Web UI 身份验证是使用 HTTP SPNEGO 协议实现的。 SPNEGO代表简单且受保护的协商机制。 它是一种 GSSAPI 机制,用于协商多种可能的实际机制之一。 当客户端应用想要向远程服务器进行身份验证,但两端都不确定对方支持哪种身份验证协议时,可以使用 SPNEGO。

伪机制使用协议来确定哪些常见的 GSSAPI 机制可用,选择一个,然后将所有进一步的安全操作分派给它。 这可以帮助组织分阶段部署新的安全机制。

有关 SPNEGO 的更多信息,请参考到它的维基页面en.wikipedia.org/wiki/SPNEGO

还有更多...

其他身份验证方法包括简单身份验证。 如果使用此身份验证方法,则必须在第一次浏览器交互中使用 URL 中的user.name参数指定用户名。 例如,我们需要打开 JobTracker URL:http://master:50030/jobtracker.jsp?user.name=hduser

如果使用简单身份验证作为身份验证类型,则可以通过更改以下属性来配置匿名用户 Web 用户界面请求:

<property>
  <name>hadoop.http.authentication.simple.anonymous.allowed</name>
  <value>true</value>
</property>

另请参阅

从 NameNode 故障中恢复

Hadoop 集群中的 NameNode 跟踪整个 HDFS 文件系统的元数据。 不幸的是,在撰写本书时,Hadoop 当前稳定版本中的 NameNode 是单点故障。 如果 NameNode 的元数据损坏(例如,由于硬盘故障),则整个集群将变得不可用。 因此,保护 NameNode 免受这些灾难性故障的影响非常重要。

我们可以通过多种方式提高 HDFS 集群的弹性。 在本食谱中,我们将向您展示如何将 Second NameNode 配置为备份 NameNode,以及如何从 NameNode 故障中恢复。

做好准备

我们假设 Hadoop 集群已经正确配置,我们有一台机器master1作为 NameNode,另一台机器master2运行 Second daryNameNode。

备注

请做好准备,NameNode 故障可能会导致集群暂停。 可能需要一些时间才能从故障中恢复过来。

怎么做……

我们要介绍的第一种方法是将 NameNode 配置为将编辑日志和文件系统映像写入两个位置-一个在 NameNode 机器的本地目录上,另一个在 Second daryNameNode 机器上。 这些目录使用 HDFS 属性dfs.name.dir指定。 我们可以使用以下步骤进行配置:

  1. 使用以下命令登录到master1

    ssh hduser@master1
    
    
  2. Configure the following property in the $HADOOP_HOME/conf/hdfs-site.xml file:

    <property>
        <name>dfs.name.dir</name>
        <value>/hadoop/dfs/name,/mnt/snn/name</value>
    </property>
    

    提示

    在该属性中,我们为 NameNode 配置了两个要向其中写入元数据的目录。 第一目录/hadoop/dfs/namemaster1上的目录,第二目录/mnt/ssn/namemaster2上的一个 NFS 共享目录/hadoop/dfs/name。 换句话说,我们正在配置两台机器master1master2,使其具有相同的 NameNode 目录布局。

    为简单起见,我们不会在本食谱中向您展示 NFS 的配置。 有关此主题的更多信息,请访问www.tldp.org/HOWTO/NFS-H…

  3. $HADOOP_HOME/conf/core-site.xml文件中配置以下属性:

    <property>
        <name>fs.default.name </name>
        <value>master1:54310</value>
    </property>
    
  4. 使用以下命令将配置复制到master2

    scp $HADOOP_HOME/conf/hdfs-site.xml master2:$HADOOP_HOME/conf/
    scp $HADOOP_HOME/conf/slaves master2:$HADOOP_HOME/conf/
    
    
  5. 使用以下命令将配置文件复制到集群中的所有从节点:

    for host in `cat $HADOOP_HOME/conf/slaves`; do
     echo 'Sync configuration files to ' $host
     scp $HADOOP_HOME/conf/core-site.xml $host:$HADOOP_HOME/conf
    done
    
    
  6. Start the Hadoop cluster in master1 with the following command:

    start-all.sh
    
    

    提示

    在此配置中,我们实际上没有在 Second daryNameNode 机器master2上启动任何守护进程。 我们只使用这台机器存储master1上 NameNode 的元数据文件。 一旦 NameNode 出现故障,我们可以很轻松地在master2上快速启动 NameNode。

一旦master1上的 NameNode 出现故障,我们可以使用以下步骤进行恢复:

  1. 使用以下命令登录到master2

    ssh hduser@master2
    
    
  2. 使用以下命令停止集群:

    ssh master1 -C "stop-all.sh"
    
    
  3. 通过向$HADOOP_HOME/conf/core-site.xml文件添加以下属性,将其配置为使用master2作为 NameNode:

    <property>
        <name>fs.default.name </name>
        <value>master2:54310</value>
    </property>
    
  4. 使用以下命令将配置复制到集群中的所有从节点:

    for host in `cat $HADOOP_HOME/conf/slaves`; do
     echo 'Sync configuration files to ' $host
     scp $HADOOP_HOME/conf/core-site.xml $host:$HADOOP_HOME/conf
    done
    
    
  5. 使用命令

    start-all.sh
    
    

    启动 Hadoop 集群

它是如何工作的.

严格地说,HDFS Second daryNameNode 守护进程不是 NameNode。 它仅充当定期将文件系统元数据图像文件和编辑日志文件提取到属性fs.checkpoint.dir指定的目录的角色。 在 NameNode 出现故障的情况下,备份文件可用于恢复 HDFS 文件系统。

还有更多...

如前所述,NameNode 失败的主要原因是元数据文件损坏。 因此,NameNode 弹性的关键是元数据文件的恢复。 在这里,我们将介绍另外两种方法-一种是将元数据写入多个硬盘驱动器,另一种是从 Second daryNameNode 的检查点恢复。

具有多个硬盘的 NameNode 弹性

我们可以使用以下步骤配置具有多个硬盘的 NameNode:

  1. 将硬盘安装、格式化并挂载到机器上;假设挂载点为/hadoop1/

  2. 使用以下命令创建 Hadoop 目录:

    mkdir /hadoop1/dfs/name
    
    
  3. Configure the following property in the $HADOOP_HOME/conf/hdfs-site.xml file:

    <property>
        <name>dfs.name.dir</name>
        <value>/hadoop/dfs/name,/hadoop1/dfs/name</value>
    </property>
    

    备注

    在此配置中,我们添加了两个目录。 第一个是 Hadoop 的主目录。 第二个目录是单独硬盘驱动器上的目录。

我们可以使用以下步骤从 NameNode 故障中恢复:

  1. 使用以下命令停止 Hadoop 集群:

    stop-all.sh
    
    
  2. $HADOOP_HOME/conf/hdfs-site.xml文件中配置以下属性:

    <property>
        <name>dfs.name.dir</name>
        <value>/hadoop1/dfs/name</value>
    </property>
    
  3. 使用以下命令启动集群:

    start-all.sh
    
    

从辅助 NameNode 的检查点恢复 NameNode

我们可以使用以下步骤配置 Second daryNameNode,并从 NameNode 故障中恢复:

  1. 使用以下命令登录到master1

    ssh hduser@master1
    
    
  2. Add the following line into the $HADOOP_HOME/conf/masters file:

    master2
    
    

    备注

    通过这样做,我们将其配置为在master2上运行 Second daryNameNode。

  3. $HADOOP_HOME/conf/hdfs-site.xml文件中配置以下属性:

    <property>
        <name>dfs.name.dir</name>
        <value>/hadoop/dfs/name</value>
    </property>
    
  4. 使用以下命令将配置文件同步到集群中的从节点:

    for host in `cat $HADOOP_HOME/conf/slaves`; do
     echo 'Sync configuration files to ' $host
     scp $HADOOP_HOME/conf/hdfs-site.xml $host:$HADOOP_HOME/conf
    done
    
    
  5. 使用以下命令启动集群:

    start-all.sh
    
    

如果 NameNode 出现故障,我们可以使用以下步骤进行恢复:

  1. 使用以下命令停止集群:

    stop-all.sh
    
    
  2. Prepare a new machine for running the NameNode.

    备注

    准备工作应包括正确配置 Hadoop。 建议新的 NameNode 计算机与出现故障的 NameNode 具有相同的配置。

  3. 使用以下命令格式化 NameNode:

    hadoop fs -format
    
    
  4. 使用以下命令配置 NameNode 版本号:

    scp slave1:/hadoop/dfs/data/current/VERSION* /hadoop/dfs/name/current/VERSION
    
    
  5. 使用以下命令从 Second daryNameNode 复制检查点映像:

    scp master2:/hadoop/dfs/namesecondary/image/fsimage /hadoop/dfs/name/fsimage
    
    
  6. 使用以下命令从 Second daryNameNode 复制当前编辑日志:

    scp master2:/hadoop/dfs/namesecondary/current/* /hadoop/dfs/name/current
    
    
  7. 使用以下命令将检查点转换为新版本格式:

    hadoop namenode -upgrade
    
    
  8. 使用以下命令启动集群:

    start-all.sh
    
    

另请参阅

配置 NameNode 高可用性

在撰写本书时,Hadoop 稳定版本的 NameNode 是一个单点故障。 如果发生意外故障或定期维护,集群将变得不可用。 对于生产 Hadoop 集群来说,这是一个大问题。 在本食谱中,我们列出了配置 NameNode HA 的步骤。

为了使备用 NameNode 能够自动从活动 NameNode 故障中恢复,NameNode HA 实施要求备用 NameNode 的编辑日志始终与活动 NameNode 保持同步。 Hadoop HA 提供了两种方法来实现这一点。 一种基于仲裁,另一种基于使用 NFS 的共享存储。 在本食谱中,我们将只向您展示如何使用 Quorum 配置 HA。

做好准备

目前,Hadoop 版本 1.x.y(MRv1)不支持 NameNode HA,因此我们假设所有集群节点都已经安装了 Hadoop 版本 2.0.x(MRv2)。

提示

请注意,此 Hadoop 版本仍处于 Alpha 状态,因此不建议将其用于生产部署。 更多关于 mrv2 的开发情况,请参考官网:hadoop.apache.org/docs/curren…

我们假设有两个主节点,主机名为master1master2,用于运行 NameNode 守护进程。

怎么做……

使用以下步骤配置 Hadoop NameNode HA:

  1. 使用以下命令登录其中一台 NameNode 计算机:

    ssh hduser@master1
    
    
  2. Configure a logical name service by adding the following property to the $HADOOP_CONF_DIR/hdfs-site.xml file:

    <property>
      <name>dfs.nameservices</name>
      <value>hdcluster</value>
    </property>
    

    备注

    我们假设所有后续配置都在$HADOOP_CONF_DIR/hdfs-site.xml文件上进行更改。

  3. Specify the NameNode IDs for the configured name service by adding the following property to the file:

    <property>
      <name>dfs.ha.namenodes.hdcluster</name>
      <value>namenode1,namenode2</value>
    </property>
    

    备注

    此属性使用属性dfs.ha.namenodes.<nameservices>指定 NameNode ID。 例如,在上一步中,我们已经配置了名称服务hdcluster,因此这里的属性名称将是dfs.ha.namenodes.hdcluster。 在此属性中,我们为logic名称服务指定了namenode1namenode2

    当前 HA 实施最多只支持两个 NameNode。

  4. Configure the RPC address for namenode1 on the master1 host by adding the following property:

    <property>
      <name>dfs.namenode.rpc-address.hdcluster.namenode1</name>
      <value>master1:54310</value>
    </property>
    

    备注

    NameNode 的 MRv1 RPC 地址规范类似于 MRv2 中的规范。 它们都使用host:port格式。

  5. 通过添加以下属性,在master2主机上配置namenode2的 RPC 地址:

    <property>
      <name>dfs.namenode.rpc-address.hdcluster.namenode2</name>
      <value>master2:54310</value>
    </property>
    
  6. 通过向文件中添加以下行来配置两个 NameNode 的 HTTP Web UI 地址:

    <property>
      <name>dfs.namenode.http-address.hdcluster.namenode1</name>
      <value>master1:50070</value>
    </property>
    
    <property>
      <name>dfs.namenode.http-address.hdcluster.namenode2</name>
      <value>master2:50070</value>
    </property>
    
  7. Configure the NameNode shared edits directory by adding the following property to the file:

    <property>
      <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master1:8485;master1:8486;master2:8485/hdcluster</value>
    </property>
    

    备注

    此属性为 Quorum 配置三个日志节点地址,以提供共享编辑存储。 共享编辑日志将由活动 NameNode 写入,并由备用 NameNode 读取。

  8. Configure the Quorum Journal Node directory for storing edit logs in the local filesystem by adding the following property to the file:

    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/hadoop/journaledits/</value>
    </property>
    

    备注

    应该在每台 NameNode 计算机上配置此属性。

  9. 通过将以下行添加到文件来配置 NameNode HA 的代理提供程序:

    <property>
      <name>dfs.client.failover.proxy.provider.hdcluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
  10. Configure the fencing method by adding the following property to the file:

```sh
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
```

### 提示

目前 NameNode HA 支持两种隔离方式,一种是`sshfence`,另一种是`shell`。 `sshfence`使用 SSH 登录到活动 NameNode 并终止进程,`shell`隔离使用常规 shell 命令来隔离活动 NameNode。 在这个配方中,我们假设使用`sshfence`方法。

11. Configure the private key file for the sshfence method by adding the following property to the file:

```sh
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>$HOME/.ssh/id_rsa</value>
</property>
```

### 提示

此属性的值应该是以逗号分隔的私钥文件列表。 为了使`sshfence`正常工作,我们正在配置私钥文件,以便它可以登录到目标节点,而无需提供释义。

12. 通过将以下属性添加到文件来配置 SSH 连接超时(以毫秒为单位):

```sh
<property>
  <name>dfs.ha.fencing.ssh.connect-timeout</name>
  <value>50000</value>
</property>
```

13. Enable automatic failover by adding the following property to the file:

```sh
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>
```

此配置将启用所有名称服务 ID 的自动故障转移。 如果我们要为特定的名称服务 ID(例如`hdcluster`)启用自动故障转移,我们可以配置以下属性:

```sh
<property>
  <name>dfs.ha.automatic-failover.enabled.hdcluster</name>
  <value>true</value>
</property>
```

14. 通过将以下属性添加到$HADOOP_CONF_DIR/core-site.xml文件来配置 ZooKeeper 服务:

```sh
<property>
   <name>ha.zookeeper.quorum</name>
   <value>master1:2181,master2:2181</value>
</property>
```

15. 使用以下命令将配置同步到集群中的所有节点:

```sh
for host in cat $HADOOP_CONF_DIR/slaves; do
 echo 'Sync configuration files to ' $host
 scp $HADOOP_CONF_DIR/hdfs-site.xml $host:$HADOOP_CONF_DIR/
 scp $HADOOP_CONF_DIR/core-site.xml $host:$HADOOP_CONF_DIR/
done

```

16. Initialize the ZooKeeper with the following command:

```sh
hdfs zkfc -formatZK

```

### 备注

此命令将在 ZooKeeper 中创建**Znode**,自动故障转移系统将在其中存储数据。

17. Start the HDFS cluster with the following command:

```sh
start-dfs.sh

```

### 备注

此命令将在每台 NameNode 计算机上启动一个 ZKFC 守护进程,并在守护进程启动后选择活动的 NameNode。

或者,我们可以使用命令`hadoop-daemon.sh start zkfc`在每台 NameNode 机器上手动启动 ZKFC 守护进程。

我们可以使用以下步骤测试 NameNode HA 配置:

  1. 通过使用以下 URL 访问 NameNode Web 用户界面来检查 NameNode 的状态:

    master1:50070
    master2:50070
    
    
  2. Assuming master1 has the active NameNode, we can get the NameNode process ID on master1 with the following command:

    jps
    
    

    该命令将产生类似于以下内容的输出:

    ...
    22459 NameNode
    ...
    
    
  3. Kill the NameNode process with the following command on master1:

    kill -9 22459
    
    

    备注

    如果备用 NameNode 自动成为活动 NameNode,并且 Hadoop 集群仍在工作,没有任何问题,则配置成功。

它是如何工作的.

Hadoop NameNode HA 是从版本 0.23.x 或 2.0.x 分支(MRv2)开始引入的。 目标是保证集群的可用性。 它使用集群中的两个 NameNode、一个活动 NameNode 和一个备用 NameNode 来解决该问题。 活动 NameNode 将提供与 MRv1 中的 NameNode 相同的服务。 与仅将 NameNode 映像和编辑日志复制到备份目录的 Second daryNameNode 不同,备用 NameNode 是活动 NameNode 的热备份节点。 如果活动 NameNode 出现故障,备用 NameNode 将在最短时间内成为活动节点。

还有更多...

在 NameNode HA 实现中,ZooKeeper 扮演着重要角色。 动物园管理员的安全可能是一个必要的问题。 我们可以使用以下步骤配置受保护的动物园管理员:

  1. 使用ssh命令登录到master1机器。

  2. Add the following property to the $HADOOP_CONF_DIR/core-site.xml file:

    <property>
      <name>ha.zookeeper.auth</name>
      <value>@$HADOOP_CONF_DIR/zkauth.txt</value>
    </property>
    

    备注

    此属性配置用于 ZooKeeper 身份验证的文件。 特殊符号@指定配置指向文件,而不是内联。 该文件的内容应该类似于digest:zkuser:password,其中zkuser是 ZooKeeper 的用户,passwordzkuser的密码。

  3. Add the following property into the $HADOOP_CONF_DIR/core-site.xml file for ZooKeeper access control:

    <property>
      <name>ha.zookeeper.acl</name>
      <value>@$HADOOP_CONF_DIR/zkacl.txt</value>
    </property>
    

    备注

    ha.zookeeper.auth属性类似,值中的@字符指定configuration是磁盘上的文件。

  4. Generate ZooKeeper ACL corresponding to the authentication with the following command:

    java -cp $ZK_HOME/lib/*:$ZK_HOME/zookeeper-*.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider zkuser:password
    
    

    我们将得到类似于以下内容的输出:

    zkuser:password->zkuser:a4XNgljR6VhODbC7jysuQ4gBt98=
    
    
  5. 将加密密码添加到$HADOOP_CONF_DIR/zkacl.txt文件:

    digest:zkuser:a4XNgljR6VhODbC7jysuQ4gBt98=
    
  6. 使用以下命令将配置同步到master2

    scp $HADOOP_CONF_DIR/zkacl.txt master2:$HADOOP_CONF_DIR/
    scp $HADOOP_CONF_DIR/zkauth.txt master2:$HADOOP_CONF_DIR/
    
    
  7. 使用以下命令格式化 ZooKeeper:

    hdfs zkfc -formatZK
    
    
  8. Test the configuration with the following command:

    zkCli.sh
    
    

    我们将得到类似于以下内容的输出:

    [zk: master1:2181(CONNECTED) 1] getAcl /hadoop-ha'digest, zkuser: a4XNgljR6VhODbC7jysuQ4gBt98=
    : cdrwa
    
    
  9. 使用以下命令重新启动集群:

    start-dfs.sh
    
    

另请参阅

配置 HDFS 联合

Hadoop NameNode 将元数据保存在主内存中。 当 HDFS 命名空间变大时,主内存可能成为集群的瓶颈。 在适用于 MRv2 的 Hadoop 中引入了 HDFS 联合。 它通过利用多个独立 NameNode 的容量来增加 NameNode 容量和吞吐量,每个 NameNode 托管或管理 HDFS 命名空间的一部分。

做好准备

目前,只有 Hadoop MRv2 支持 NameNode 联合,因此我们假设所有集群计算机上都正确配置了 Hadoop MRv2。

备注

我们假设所有配置都在对$HADOOP_CONF_DIR/hdfs-site.xml文件进行更改。

怎么做……

使用以下步骤配置 HDFS 联合:

  1. 使用以下命令登录到master1

    ssh hduser@master1
    
    
  2. Specify a list of NameNode service IDs by adding the following lines into the file:

    <property>
      <name>dfs.nameservices</name>
      <value>namenode1,namenode2</value>
    </property>
    

    备注

    此属性的值是以逗号分隔的 NameNode 服务 ID 列表。 例如,在此步骤中,该值指定了两个 NameNode 服务:namenode1namenode2

  3. Configure the NameNode RPC and HTTP URI for namenode1 by adding the following into the file:

    <property>
        <name>dfs.namenode.rpc-address.namenode1</name>
        <value>master1:54310</value>
      </property>
    
      <property>
        <name>dfs.namenode.http-address.namenode1</name>
        <value>master1:50070</value>
      </property>
    
      <property>
        <name>dfs.namenode.secondaryhttp-address.namenode1</name>
        <value>master1:50071</value>
      </property>
    

    备注

    前面的配置假设 NameNode 守护进程以及 NameNode HTTP 和辅助 HTTP 守护进程位于主机master1上。

  4. 通过将以下内容添加到文件中,指定namenode2的 NameNode RPC 和 HTTP URI:

    <property>
      <name>dfs.namenode.rpc-address.namenode2</name>
      <value> master2:54310</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.namenode2</name>
      <value> master2:50070</value>
    </property>
    <property>
      <name>dfs.namenode.secondaryhttp-address.namenode2</name>
      <value>master2:50071</value>
    </property>
    
  5. 使用以下命令将配置同步到集群中的所有节点:

    for host in cat $HADOOP_CONF_DIR/slaves; do
     echo 'Sync configuration files to ' $host
     scp $HADOOP_CONF_DIR/hdfs-site.xml $host:$HADOOP_CONF_DIR/
    done
    
    
  6. Format namenode1 on master1 with the following command:

    hdfs namenode -format -clusterId hdcluster
    
    

    备注

    在此命令中,-clusterId选项应该是环境中唯一的集群 ID。 如果未指定,将自动生成唯一的集群 ID。

  7. Similarly, format namenode2 on master2 with the following command:

    hdfs namenode -format -clusterId hdcluster
    
    

    提示

    警告!

    此 NameNode 的集群 ID 应与为namenode1指定的集群 ID 相同,以便两个 NameNode 位于同一集群中。

  8. 现在,我们可以使用以下命令在任一 NameNode 主机上启动或停止 HDFS 集群:

    start-dfs.sh
    stop-dfs.sh
    
    

它是如何工作的.

在非联合 HDFS 集群上,所有 DataNode 都向单个 NameNode 注册并向其发送心跳信号。 在联合 HDFS 集群上,所有 DataNode 都将注册到集群中的所有 NameNode,并且心跳和数据块报告将发送到这些 NameNode。

联合 HDFS 集群由一个或多个命名空间卷组成,命名空间卷由命名空间和属于该命名空间的数据块池组成。 命名空间卷是集群中的管理单位。 例如,集群管理操作(如deleteupgrade)将在命名空间卷上操作。 此外,联合 NameNode 可以为不同的应用或情况隔离名称空间。

下表显示了配置 NameNode 联合的属性:

|

精灵 / 恶魔 / 守护进程 / 后台程序

|

性质 / 财产 / 所有权

|

描述 / 描写 / 形容 / 类别

| | --- | --- | --- | | NameNode | dfs.namenode.rpc-address | 用于 NameNode RPC 与客户端的通信 | | dfs.namenode.servicerpc-address | 用于与 HDFS 服务进行 NameNode RPC 通信 | | dfs.namenode.http-address | NameNode HTTP Web 用户界面地址 | | dfs.namenode.https-addressw | NameNode 安全的 HTTP Web 用户界面地址 | | dfs.namenode.name.dir | NameNode 本地目录 | | dfs.namenode.edits.dir | NameNode 编辑日志的本地目录 | | dfs.namenode.checkpoint.dir | Second daryNameNode 本地目录 | | dfs.namenode.checkpoint.edits.dir | Second daryNameNode 编辑日志的目录 | | Second DaryNameNode | dfs.secondary.namenode.keytab.file | Second daryNameNodekeytab文件 | | dfs.namenode.backup.address | 备份节点的地址 | | 备份节点 | dfs.secondary.namenode.keytab.file | 备份节点\T0 文件 |

还有更多...

NameNode 联合 Hadoop 集群的管理任务与不支持联合的旧版本(MRv1)不同。

从集群中取消 NameNode

将 NameNode ID 添加到$HADOOP_CONF_DIR/namenode_exclude.txt文件中。 例如,如果我们想要从集群中停用namenode1,文件的内容应该是:

namenode1

使用以下命令将exclude文件分发给所有 NameNode:

distributed-exclude.sh $HADOOP_CONF_DIR/namenode_exlude.txt

使用以下命令刷新 NameNode 列表:

refresh-namenodes.sh

我们可以使用以下 URL 访问 HDFS 集群的 Web 用户界面:

http://namenode2:50070/dfsclusterhealth.jsp

运行平衡机

与旧的 Hadoop 版本类似,平衡器用于平衡集群上的数据块。 在 HDFS 联合 Hadoop 集群上,我们可以使用以下命令运行平衡器:

hadoop-daemon.sh --config $HADOOP_HOME/conf --script hdfs start balancer -policy node

此命令将在节点级别平衡数据块。 另一个平衡策略是blockpool,它在数据块池级别和数据节点级别平衡存储。

添加新的 NameNode

假设我们已经配置了一个由 NameNode 联合的 Hadoop 集群,其中有两个正在运行的 NameNode。 我们想要在主机master3上添加第三个 NameNodenamenode3。 我们可以使用以下步骤来完成此操作:

  1. 登录到新的 NameNode 计算机master3

  2. master3节点上配置 MRv2。

  3. 将以下行添加到$HADOOP_CONF_DIR/hdfs-site.xml文件中:

    <property>
      <name>dfs.nameservices</name>
      <value>namenode1,namenode2,namenode3</value>
    </property>
    
    <property>
      <name>dfs.namenode.rpc-address.namenode1</name>
      <value>master1:54310</value>
    </property>
    
    <property>
      <name>dfs.namenode.http-address.namenode1</name>
      <value> master1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.secondaryhttp-address.namenode1</name>
      <value>master1:50071</value>
    </property>
    
    <property>
      <name>dfs.namenode.rpc-address.namenode2</name>
      <value>master2:54310</value>
    </property>
    
    <property>
      <name>dfs.namenode.http-address.namenode2</name>
      <value> master2:50070</value>
    </property>
    <property>
      <name>dfs.namenode.secondaryhttp-address.namenode2</name>
      <value>master2:50071</value>
    </property>
    
    <property>
      <name>dfs.namenode.rpc-address.namenode3</name>
      <value>master3:54310</value>
    </property>
    
    <property>
      <name>dfs.namenode.http-address.namenode3</name>
      <value> master3:50070</value>
    </property>
    <property>
      <name>dfs.namenode.secondaryhttp-address.namenode3</name>
      <value>master3:50071</value>
    </property>
    
  4. 使用以下命令格式化namenode3

    hdfs namenode -format -cluserId hdcluster
    
    
  5. 使用以下命令将配置同步到所有其他 NameNode:

    scp $HADOOP_CONF_DIR/hdfs-site.xml master1:$HADOOP_CONF_DIR/
    scp $HADOOP_CONF_DIR/hdfs-site.xml master2:$HADOOP_CONF_DIR/
    
    
  6. 使用以下命令将配置同步到集群中的所有从节点:

    for host in `cat $HADOOP_CONF_DIR/slaves`; do
     echo 'Sync configuration files to ' $host
     scp $HADOOP_CONF_DIR/hdfs-site.xml $host:$HADOOP_CONF_DIR/
    done
    
    
  7. 使用以下命令启动 HDFS 集群:

    start-dfs.sh
    
    
  8. 使用以下命令将 NameNodes 的更改告知 DataNodes:

    for slavehost in `$HADOOP_CONF_DIR/slaves`;  do
     echo "Processing on host " $slavehost
     ssh $slavehost -C "hdfs dfsadmin -refreshNameNode master3:54310"
    done
    
    

另请参阅

六、监控 Hadoop 集群

在本章中,我们将介绍:

  • 使用 JMX 监视 Hadoop 集群
  • 使用 Ganglia 监视 Hadoop 集群
  • 使用 Nagios 监视 Hadoop 集群
  • 使用 Ambari 监视 Hadoop 集群
  • 使用 Chukwa 监视 Hadoop 集群

简介

系统监控对于维护大型分布式系统(如 Hadoop)的健康和可用性至关重要。 常规监控任务包括监控集群节点和网络的健康状况,例如,内存、堆、CPU、网络等的使用情况。 对于 Hadoop 集群,我们可能还需要监视一些特定的指标,例如集群中作业和任务的状态、JobTracker、TaskTracker、NameNode 和 DataNode 的状态。

Hadoop 很幸运地出生在一个开放源码的世界! 许多非常稳定的开源系统监控工具正在等待加入 Hadoop 大家庭,其中许多系统已经被 Hadoop 用于监控目的。

在本章中,我们将首先介绍用于系统监控的管理框架Java Management Extension(JMX)。 接下来,我们将介绍两个著名的开源集群监控系统:GangliaNagios。 Ganglia 是一个开源的可伸缩监控系统。 在监视主机上运行的监视守护程序将数据发送到监视服务器主机以进行存储、统计分析和可视化。 Nagios 是另一个著名的监控系统。 它使用插件监控集群中的主机。

接下来,我们将介绍特定于 Hadoop 的监视系统AmbariChukwa。 Ambari 旨在成为部署、管理和监控 Hadoop 集群的成熟系统。 它是基于 Ganglia 和 Nagios 的监控框架开发的。 但与 Ganglia 和 Nagios 不同的是,Apache Chukwa 通过分析从 Hadoop 集群收集的系统日志来监控 Hadoop 集群。 ApacheFlume是另一个用于流式传输数据(如系统日志)的通用数据分析框架。 它可以配置为进行系统监控,这与 Chukwa 类似。

使用 JMX 监控 Hadoop 集群

JMX 是 Java 用来构建、监视和管理分布式系统和网络应用的技术。 它已经从J2SEPlatform 5.0 并入 Java。 有关 jmx 的更多信息,请访问官方网站www.oracle.com/technetwork…。 在本食谱中,我们将概述使用 JMX 配置 Hadoop 集群监控的步骤。

提示

在本章中,我们假设监控 Hadoop 版本 1.1.y 或相应的 0.20.x Hadoop 版本。 监控 Hadoop 版本 2.0.x 或 0.23.x 的配置应该遵循食谱进行一些更改。

做好准备

我们假设已经安装了 Oracle JDK,并且我们的 Hadoop 集群已经正确配置,并且所有守护进程都在运行,没有任何问题。

怎么做……

使用以下步骤配置 JMX 以监视 Hadoop 集群:

  1. 使用以下命令创建用于远程监控的 JMX 密码文件:

    cp $JAVA_HOME/jre/lib/management/jmxremote.password.template $HADOOP_HOME/conf/jmxremote.password
    
    
  2. Open the template password $HADOOP_HOME/conf/jmxremote.password file with a text editor and the last few lines of this file will be similar to the following:

    # Following are two commented-out entries.  The “measureRole” role has
    # password “QED”.  The “controlRole” role has password “R&D”.
    #
    # monitorRole  QED
    # controlRole  R&D
    

    删除突出显示的两行的注释符号#

    提示

    这两行指定monitorRolecontrolRole的密码。 JMX 将在远程监控中使用它们进行身份验证。

    使用以下命令将密码文件的权限更改为600

    chmod 600 $HADOOP_HOME/conf/jmxremote.password
    
    

    提示

    警告!

    如果此文件过于打开,则在启动 Hadoop 集群守护程序时会出现类似以下内容的错误:

    master: Error: Password file read access must be restricted: /usr/local/hadoop/conf/jmxremote.password
    
  3. 使用文本编辑器打开$HADOOP_HOME/conf/hadoop-env.sh文件。

  4. In this file, we will be able to find JMX monitoring configurations for the Hadoop daemons including NameNode, SecondaryNameNode, DataNode, balancer, JobTracker, and TaskTracker. The default configuration will be similar to the following:

    export HADOOP_NAMENODE_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTSexport HADOOP_SECONDARYNAMENODE_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTSexport HADOOP_DATANODE_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTSexport HADOOP_BALANCER_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTSexport HADOOP_JOBTRACKER_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS

    现在,我们需要通过将原始配置更改为以下内容来配置 Hadoop 守护程序的远程监控端口:

    # Extra Java runtime options. Empty by default.
    export HADOOP_OPTS=”-Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=$HADOOP_CONF_DIR/jmxremote.password”
    
    export HADOOP_NAMENODE_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS -Dcom.sun.management.jmxremote.port=8004”
    export HADOOP_SECONDARYNAMENODE_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS -Dcom.sun.management.jmxremote.port=8005”
    export HADOOP_DATANODE_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS -Dcom.sun.management.jmxremote.port=8006”
    export HADOOP_BALANCER_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS -Dcom.sun.management.jmxremote.port=8007”
    export HADOOP_JOBTRACKER_OPTS=”-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS -Dcom.sun.management.jmxremote.port=8008”
    export HADOOP_TASKTRACKER_OPTS=”-Dcom.sun.management.jmxremote.port=8009”
    
  5. Use the following command to start the monitor user interface:

    jconsole
    
    

    我们可以看到一个类似于以下屏幕截图的窗口:

    How to do it...

    在此窗口中,我们可以检查本地和远程进程的状态。 检查本地进程的状态相对简单。 首先,从进程列表中选择要检查的所需进程。 然后,我们只需单击连接按钮。 检查远程进程的状态相对复杂。 我们需要通过指定主机名和端口或协议和 SAP 来指定服务的位置,如屏幕截图所示。 出于验证目的,我们还需要输入用户名密码值。 在以下步骤中,我们假设检查本地 JobTracker 进程的状态。

  6. Select the Local Process radio button and then click on the Connect button. We can get a monitoring window after waiting for a few moments, as shown in the following screenshot:

    How to do it...

    该窗口显示 JobTracker 的后台进程状态。 在窗口中,我们可以查看内存使用情况、线程、类、JVM 摘要以及 MBean 的详细信息。

  7. Check the memory of the daemon by clicking on the Memory tab of the jconsole window, and we will get a window similar to the following:

    How to do it...

    Memory 窗口以时间序列图的形式显示Heap Memory Usage页。 在此窗口中,我们可以从不同的图表和时间范围中选择要显示的内容。 窗口的底部是当前内存使用情况的摘要。

  8. By clicking on the Threads tab of the window, we can check the running threads of the JobTracker and we can get a window similar to the following screenshot:

    How to do it...

    窗口的上半部分显示峰值活动线程数和当前活动线程数**。 在窗口的下部,我们可以看到一个线程列表,通过单击所需的线程名称可以查看这些线程的信息。**

    同样,我们可以通过单击窗口的Classs选项卡检查当前类,并通过单击窗口的VM Summary选项卡检查 JVM 虚拟机的摘要。

*** The MBeans tab is the most informative one if you want to check the status details of the daemon. For example, the following screenshot shows more metrics details for JobTracker:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4c7320a55ada493ea283615cc9e89ac8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=DklgDrLz2XhP54qIZSnvdGMY5lE%3D)

从该窗口中,我们可以获得多个 JobTracker 指标,例如正在运行的作业的数量、映射和还原插槽的数量以及正在运行的映射和还原任务的数量。** 

**## 另请参阅

使用 Ganglia 监视 Hadoop 集群

Ganglia是一个开源、可伸缩的分布式监控系统,用于集群和计算网格。 它有三个主要的组件:监控守护进程元数据守护进程Web UI。 在本食谱中,我们将概述为 Hadoop 集群监控配置 Ganglia 的步骤。

做好准备

使用以下命令从管理员计算机登录到主节点:

ssh hdadmin@master

使用以下yum命令在主计算机上安装 Ganglia:

sudo yum install -y ganglia-gmond ganglia-gmetad ganglia-web

使用以下命令在所有从节点上安装 Ganglia 监视守护进程:

for host in `cat $HADOOP_HOME/conf/slaves`
do
 echo ‘Installing Ganglia on host ‘ $host
 sudo ssh $host -C “yum install -y ganglia-gmond”
done

提示

在本配方中,我们假设 Ganglia 服务器将在主节点上运行,监视守护进程在主节点和从节点上运行。

怎么做……

使用以下步骤为 Hadoop 集群监视配置 Ganglia:

  1. 用文本编辑器打开gmond配置文件/etc/ganglia/gmond.conf

  2. cluster属性更改为以下内容:

    cluster {
      name = “hadoop”
      owner = “hduser”
      latlong = “unspecified”
      url = “unspecified”
    }
    
  3. udp_send_channel属性更改为以下内容:

    udp_send_channel {
      bind_hostname = yes
      # mcast_join = 239.2.11.71
      host = master
      port = 8649
      ttl = 1
    }
    
  4. Change the udp_recv_channel attribute to the following:

    udp_recv_channel {
      # mcast_join = 239.2.11.71
      port = 8649
      # bind = 239.2.11.71
    }
    

    提示

    Hadoop 支持通过单播(使用普通 IP 地址,我们在这里使用的地址)和多播(使用多播地址,如239.2.11.71)进行网络通信。 要使用组播,所有受监控的主机都应位于同一 IP 网段中。 在本书中,我们假定使用单播。

  5. Add all the hostnames in the cluster to the gmetad configuration /etc/ganglia/gmetad.conf file, for example, this file should contain the following:

    data_source “hdcluster” master:8649
    

    备注

    这里hdcluster是 Ganglia 监视的集群的名称,master:8649gmetad的网络地址。

  6. Open the $HADOOP_HOME/conf/hadoop-metrics.properties file with your favorite text editor and add the following contents into the file:

    jvm.class=org.apache.hadoop.metrics.ganglia.GangliaContext
    jvm.period=10
    jvm.servers=master:8649
    

    前三行配置 JVM 监视。

    rpc.class=org.apache.hadoop.metrics.ganglia.GangliaContext
    rpc.period=10
    rpc.servers=master:8649
    

    前三行配置 RPC 监视。

    dfs.class=org.apache.hadoop.metrics.ganglia.GangliaContext
    dfs.period=10
    dfs.servers=master:8649
    

    前三行配置 HDFS 监视。

    mapred.class=org.apache.hadoop.metrics.ganglia.GangliaContext
    mapred.period=10
    mapred.servers=master:8649
    

    前三行配置为监视 MapReduce 指标。

    hbase.class=org.apache.hadoop.metrics.ganglia.GangliaContext
    hbase.period=10
    hbase.servers=master:8649
    

    前三行配置监视 HBase 指标。

    提示

    在前面的配置中,我们指定了三个公共参数:classperiodservers。 参数class指定 Ganglia 将使用的消息格式(可以是GangliaContextGangliaContext31);period指定两个连续度量更新之间的时间间隔,servers指定监视消息应该发送到的服务器列表。

  7. 使用以下命令将配置文件复制到所有从节点:

    for host in cat $HADOOP_HOME/conf/slaves
    do
     echo ‘Copying ganglia monitoring configuration file to host’ $host;
     sudo scp /etc/ganglia/gmond.conf $host:/etc/ganglia/gmond.conf
     sudo scp /etc/ganglia/gmetad.conf $host:/etc/ganglia/gmetad.conf
     sudo scp $HADOOP_HOME/conf/hadoop-metrics.properties $host:$HADOOP_HOME/conf/hadoop-metrics.properties;
    done
    
    
  8. 使用以下命令重新启动 Hadoop 集群:

    stop-all.sh
    start-all.sh
    
    
  9. Start the gmond daemon with the following command on the master node:

    sudo service gmond start
    
    

    提示

    如果希望该进程在系统重新启动后继续运行,请运行 sudo chkconfig gmondON 命令。

  10. Check the status of gmond with the following command:

```sh
curl master:8649

```

此命令将输出 XML 格式的 Ganglia 配置,如下所示:

```sh
<GANGLIA_XML VERSION=”3.1.7” SOURCE=”gmond”>
<CLUSTER NAME=”hdcluster” LOCALTIME=”1363403519” OWNER=”hduser” LATLONG=”unspecified” URL=”hdcluster.com”>
<HOST NAME=”master” IP=”10.147.166.55” REPORTED=”1363403500” TN=”19” TMAX=”20” DMAX=”0” LOCATION=”unspecified” GMOND_STARTED=”1363403380”>
<METRIC NAME=”proc_run” VAL=”3” TYPE=”uint32” UNITS=TN=”42” TMAX=”950” DMAX=”0” SLOPE=”both”>
<EXTRA_DATA>
<EXTRA_ELEMENT NAME=”GROUP” VAL=”process”/>
<EXTRA_ELEMENT NAME=”DESC” VAL=”Total number of running processes”/>
<EXTRA_ELEMENT NAME=”TITLE” VAL=”Total Running Processes”/>
</EXTRA_DATA>
</METRIC>
<METRIC NAME=”dfs.datanode.heartBeats_avg_time” VAL=”1.0” TYPE=”double” UNITS=”” TN=”2” TMAX=”60” DMAX=”0” SLOPE=”both”>
<EXTRA_DATA>
<EXTRA_ELEMENT NAME=”GROUP” VAL=”dfs.datanode”/>
</EXTRA_DATA>
</METRIC>
<METRIC NAME=”mapred.shuffleOutput.shuffle_output_bytes” VAL=”0” TYPE=”float” UNITS=”” TN=”1225” TMAX=”60” DMAX=”0” SLOPE=”positive”>
<EXTRA_DATA>
<EXTRA_ELEMENT NAME=”GROUP” VAL=”mapred.shuffleOutput”/>
</EXTRA_DATA>
</METRIC>
...
<EXTRA_ELEMENT NAME=”GROUP” VAL=”system”/>
<EXTRA_ELEMENT NAME=”DESC” VAL=”Operating system release date”/>
<EXTRA_ELEMENT NAME=”TITLE” VAL=”Operating System Release”/>
</EXTRA_DATA>
</METRIC>
</HOST>
</CLUSTER>
</GANGLIA_XML>

```

### 备注

突出显示的行显示 Ganglia 正在监视某些 HDFS 和 MapReduce 指标。

11. 在主节点上使用以下命令启动gmetad守护进程:

```sh
sudo service gmetad start

```

12. 使用以下命令在所有从节点上启动gmond

```sh
for host in cat $HADOOP_HOME/conf/slaves
do
 echo ‘Starting gmond service on host: ‘ $host;
 sudo ssh $host -C “service gmond start”;
done

```

13. Open the /etc/httpd/conf.d/ganglia.conf file with your favorite text editor and add the following content:

```sh
<Location /ganglia>
   Order deny,allow
   Allow from all
</Location>
```

### 备注

该文件中的`access control`设置允许每个人访问 Ganglia web UI。 出于安全原因,我们可以使用配置中的`Allow from``Deny from`语句限制 IP 地址、主机或域。

14. 使用以下命令启动httpd守护进程:

```sh
sudo service httpd start

```

15. Check the status of Ganglia by opening URL http://master:80/ganglia, and we can get a web page similar to the following screenshot:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/27e41801d6d14032b170a5743769999a~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=Oi6VZ8%2Bmk5DxO3ESBZAbjBeTS2k%3D)

UI 的左上角是集群的摘要,包括主机数量、主机状态、平均负载等。

屏幕截图右上角的部分显示了整个集群的概况,包括集群总负载、CPU 使用率、内存和网络流量。 当一个`teragen`作业正在运行时,屏幕截图包含大约 20 分钟的明显跳转,这会消耗集群资源。

屏幕截图的下部显示集群中每个节点的状态,包括主节点和所有从节点。 我们可以通过从组合框中选择来更改要显示的指标,如以下屏幕截图所示:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/4e9919a73c38441db86adf3d735acfc2~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=QDQ8Hk%2FyiJBasv0vqBFg1LS9Fs4%3D)

例如,通过选择指标**DFS_datenode.bytes_Writed**,我们可以获得每个节点的以下屏幕截图:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3849e540af854a4b909a7b5f713b1afb~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=nq9S%2Fd3za04%2Fy3HcLrLBiknWHkA%3D)

前面的屏幕截图确认 DataNode 是存储数据块的实际位置,而 NameNode 只跟踪数据块的元数据。 因此,NameNode 的写入数据大小要小得多。

16. Check the details of each cluster node by selecting the option from the combo box, which has the initial value of --Choose a Node. For example, if we want to check all the metric values for the master node, we will be able to get a web page similar to the following screenshot:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/47504125060f4641bb25bf1b1f1ecc97~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=b8JzGSp7mhIyDXerZfewWwN7yY4%3D)

17. By scrolling down the window, we can check the Hadoop JobTracker metrics as shown in the following screenshot:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/45c43391ea2849a78401cbb42fe94bb4~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=unTGZI2WcYroAZdWFqaNjIwLD8Q%3D)

前面的屏幕截图包含 JobTracker 的状态信息,包括正在运行的作业数、MAP Reduce 插槽数等。

它是如何工作的.

Ganglia 监视系统由三个部分组成:监视守护进程gmond、元数据处理守护进程gmetad和 Web UI。

Gangliagmond守护进程在集群中受监视的每个节点上运行。 它们持续收集指标数据,并将其发送到主节点上运行的gmetad守护进程。 gmetad守护进程将数据存储到由rrdtool维护的数据库中。 Web 用户界面(包括所有图形)是通过 PHP 从数据库中提取数据生成的。 Ganglia 数据流可以用下图描述:

How it works...

另请参阅

使用 Nagios 监视 Hadoop 集群

Nagios是一个强大的开源集群监控系统。 它不仅可以监控主机和服务器,还可以监控路由器和交换机等互联设备。 警报服务提供快速响应系统问题的通知机制。

Nagios 设计为通用监控系统,可以配置为监控 Hadoop 集群。 在本食谱中,我们将概述为 Hadoop 集群监控配置 Nagios 的步骤。

做好准备

在使用 Nagios 监视 Hadoop 集群之前,请执行以下步骤:

  1. To get started with Nagios monitoring, we need to install it first. On CentOS and other Red Hat-compatible Linux systems, we can use the following yum command to install Nagios:

    sudo yum install nagios nagios-plugins
    
    

    该命令将自动安装依赖软件包,如libgdlibgd-devel。 安装后,Nagios 配置文件将位于/etc/nagios目录下,Nagios 守护进程将位于/etc/init.d/目录下。

  2. Install the Nagios Remote Plugin Executor (NRPE) package with the following command:

    sudo yum install nrpe
    
    

    NRPE 是一个 Nagios 插件,允许我们在远程机器上执行 Nagios 插件。 详情请查看:nagios.sourceforge.net/docs/3_0/ad…nagios.sourceforge.net/docs/nrpe/N…

  3. Download the check_jmx Nagios plugin from exchange.nagios.org/directory/P….

    我们希望使用 Java JMX 作为 Nagios 插件来监控 Hadoop 指标。

    使用以下命令构建check_jmx包:

    tar xvf check_jmx.tgz
    cd check_jmx
    ant
    
    
  4. 在之后,我们希望获得以下目录结构:

    check_jmx
    ├── ...
    ├── nagios
    │ ├── plugin
    │ │ ├── check_jmx
    │ │ └── jmxquery.jar
    │ └── readme.txt
    └── ...
    
    
  5. Copy the two highlighted files in the /usr/local/nagios/libexec directory:

    cp check_jmx/nagios/plugin/check_jmx /usr/local/nagios/libexec
    cp check_jmx/nagios/plugin/jmxquery.jar /usr/local/nagios/libexec
    
    

    通过这样做,我们将能够在 Nagios 监视配置中使用check_jmx命令。

怎么做……

使用以下步骤配置用于 Hadoop 集群监视的 Nagios:

  1. Open the /etc/nagios/nagios.cfg file with a text editor.

    提示

    该文件是 Nagios 的主配置文件。 它引用了许多扩展名为.cfg的文件,其中包含特定的监控配置。

  2. Change the contacts information for alerting services by changing the e-mail address in the /usr/local/nagios/etc/objects/contacts.cfg file:

    define contact{
      contact_name  nagiosadmin
      use   generic-contact
     alias   Nagios 
     email   nagios@localhost
    }
    

    提示

    也可以使用其他提醒方法,例如 SMS 消息和寻呼。 有关更多信息,请参阅以下网页:

    http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html

  3. Change the Apache web server configuration file /etc/httpd/conf/httpd.conf by adding the following line:

    Include /etc/httpd/conf/nagios.conf
    

    /etc/httpd/conf/nagios.conf文件是 Nagios Web 界面的配置文件;该文件的内容应与以下内容类似:

    # Specifies the location of the cgi scripts. 
    ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin
    <Directory “/usr/local/nagios/sbin”>
      AllowOverride AuthConfig
      Options ExecCGI
      Allow from all
      Order allow,deny
    </Directory>
    
    # Specifies the Nagios root directory.
    # This will enable us to visit Nagios through http://<host>/nagios
    Alias /nagios /usr/local/nagios/share
    <Directory “/usr/local/nagios/share”>
      Options None
      AllowOverride AuthConfig
      Order allow,deny
      Allow from all
    </Directory>
    

    前面的配置指定了 Nagios web UI 的根目录和 CGI 目录;要使用户能够访问,我们需要创建/usr/local/nagios/sbin/.htaccess/usr/local/nagios/share/.htaccess文件,内容如下:

    AuthName “Nagios Access”
    AuthType Basic
    AuthUserFile /etc/nagios/htpasswd.users
    require valid-user
    
  4. Create an administrator user for the Nagios web UI with the following command:

    sudo htpasswd -c /etc/nagios/htpasswd.users nagiosadmin
    
    

    提示

    我们应该为nagiosadmin用户键入两次密码。 用户名和密码将用于登录 Web 用户界面。

现在,我们已经准备好通过以下步骤指定 Hadoop 集群监控配置:

  1. Open the /etc/nagios/nagios.cfg file and add the following content:

    cfg_file=/etc/nagios/hosts.cfg
    cfg_file=/etc/nagios/services.cfg
    

    前两行告诉主配置文件nagios.cfg包括两个特定于用户的配置文件:hosts.cfgservices.cfg

  2. Configuration file hosts.cfg specifies the hosts we want to monitor, and it should have content similar to the following:

    #####################################
    ## Declare host groups.
    #####################################
    define hostgroup {
     hostgroup_name hdgroup
     alias Hadoop cluster groups.
    }
    
    #####################################
    # Define a host template.
    # All the hosts configuration in our 
    # cluster should be derived from this 
    # template.
    #####################################
    define host {
       name       hdhost
       use        linux-server
       hostgroups hdgroup
       register   0
    }
    
    ##########################################
    # This are the real hosts in the cluster.
    ##########################################
    define host{
       host_name    master
       alias        The master node.
       address      10.194.19.16
       use          hdhost
    }
    
    define host{
       host_name    slave1
       alias        The slave 1.
       address      10.40.193.19
       use          hdhost
    }
    
    define host{
       host_name    slave2
       alias        The slave 2.
       address      10.36.117.108
       use          hdhost
    }
    
    define host{
       host_name    slave3
       alias        The slave 3.
       address      10.40.66.245
       use          hdhost
    }
    
    define host{
       host_name    slave4
       alias        The slave 4.
       address      10.245.133.242
       use          hdhost
    }
    
    define host{
       host_name    slave5
       alias        The slave 5.
       address      10.12.73.254
       use          hdhost
    }
    

    该文件配置集群中要监视的六台主机,包括一个主节点和五个从节点。

  3. The configuration file services.cfg specifies the services we want to monitor. The contents of this file should be similar to the following:

    ###############################################
    ## Service definitions.
    ## For example, we want to monitor the status of
    ## the system, including the load, cpu usage, 
    ## memory usage etc. 
    ## For the monitoring of Hadoop clsuters, 
    ###############################################
    # Monitor system metrics. 
    define service{
       use                   generic-service
       hostgroup_name        hdgroup
       service_description   SSH
       check_command         check_ssh
    }
    
    define service{
       use                   local-service 
       hostgroup_name        hdgroup
       service_description   Swap Usage
       check_command         check_local_swap!20!10
    }
    
    define service{
       use                   local-service 
       hostgroup_name        hdgroup
       service_description   Total processes
       check_command         check_local_procs!250!400!RSZDT
    }
    

    此文件中配置的服务将应用于声称在hosts.cfg文件中配置的hdgroup组中的每个主机。

  4. Verify the configurations with the following command:

    sudo nagios --verify-config /etc/nagios/nagios.cfg
    
    

    我们将获得类似于以下屏幕截图的输出:

    How to do it...

  5. 使用以下命令启动 Nagios 服务:

    sudo service nagios start
    
    
  6. Check the status of the service with the following command:

    sudo service nagios status
    
    

    如果 Nagios 正在运行,输出应该类似于:

    nagios (pid 21542) is running...
    
    

    如果 SELinux 处于打开状态,我们需要使用以下命令更改 Web 目录的上下文:

    chcon -R -t httpd_sys_content_t /usr/local/nagios/sbin/
    chcon -R -t httpd_sys_content_t /usr/local/nagios/share/
    
    
  7. Restart the web server with the following command:

    sudo service httpd restart
    
    

    现在,我们应该能够通过打开 URL:http://master/nagios来检查 Web 用户界面。

    提示

    如果您是第一次打开 Web 用户界面,则需要键入用户名和密码。 用户名应为nagiosadmin,密码应为您为htpasswd命令输入的密码。

它是如何工作的.

Nagios 是一个开源的集中式网络监控系统。 典型的 Nagios 部署由一个监控服务器和多个被监控的主机组成。 管理员使用一个或多个配置文件定义监控规范(哪些主机上有哪些服务)。 有关 Nagios 的更多信息,请参考:www.nagios.org

另请参阅

  • 使用 JMX配方监视 Hadoop 集群
  • 使用 Chukwa配方监视 Hadoop 集群
  • 使用 Ganglia配方监视 Hadoop 集群
  • 使用 Ambari配方监视 Hadoop 集群
  • 参考library.nagios.com/library/pro…

使用 Ambari 监控 Hadoop 集群

ApacheAmbari项目(Hadoop)是一个开源项目,旨在简化 incubator.apache.org/ambari/集群的管… 目前,Ambari 支持对该软件的管理:HDFS、MapReduce、HBase 和 HIVE。 在本食谱中,我们将概述配置 Hadoop Ambari 以进行集群安装、监控和管理的步骤。

做好准备

我们假设 Hadoop 集群已正确配置。 执行以下步骤:

  1. 使用以下命令启用 NTP 服务器:

    sudo service ntpd start
    sudo chkconfig ntpd on
    
    
  2. 应该在安装了 Ambari 的服务器上禁用 SELinux。 我们可以使用以下命令临时禁用 SELinux:

    sudo setenforce 0
    
    
  3. To permanently disable SELinux, we need to edit the SELinux configuration file /etc/selinux/config by changing the state of the SELINUX attribute to the following:

    SELINUX=disabled0
    
    

    提示

    更改/etc/selinux/config文件后,我们需要重新启动系统才能使其生效。

  4. 使用以下命令禁用iptables服务:

    sudo service iptables stop
    sudo chkconfig iptables off
    
    
  5. Check the status of iptables with the following command:

    sudo iptables -L
    
    

    输出应与以下内容类似:

    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    
    

怎么做……

使用以下步骤配置 Ambari 以进行 Hadoop 监视和管理:

  1. 使用以下命令从 Horntonworks 网站下载存储库文件:

    sudo wget http://public-repo-1.hortonworks.com/ambari/centos6/1.x/GA/ambari.repo -P /etc/yum.repos.d
    
    
  2. 使用以下命令安装epel存储库:

    sudo yum install epel-release
    
    
  3. Verify the repository list with the following command:

    yum repolist
    
    

    输出应与以下内容类似:

    Loaded plugins: langpacks, presto, refresh-packagekit
    ...
    repo id               repo name                         status
    HDP-UTILS-1.1.0.15    HDP-UTILS-1.1.0.15                52
    Updates-ambari-1.x    ambari-1.x - Updates              10
    ambari-1.x            Ambari 1.x                        5
    epel                  Extra Packages for Enterprise Linux 5 - x86_64
    
    
  4. Install Ambari with the following command:

    sudo yum install ambari-server
    
    

    该命令将自动安装PostgreSQL数据库,这是 Ambari 所需的。

  5. Set up the Ambari server with the following command:

    sudo ambari-server setup
    
    

    提示

    如果 SELinux 未禁用,我们将收到警告,如果未禁用,iptables服务将被禁用。 在配置过程中,我们将被要求配置 PostgreSQL 数据库的用户名和密码。 如果您选择不这样做(这是默认选项),则默认用户名和密码将为ambari-serverbigdata。 然后,安装过程将提示下载 Oracle JDK,我们应该接受许可证。 在集群上部署包时,会将下载的 JDK 安装到主机上。

    设置过程的输出如以下屏幕截图所示:

    How to do it...

  6. 现在,我们可以使用以下命令启动 Ambari 服务器:

    sudo service ambari-server start
    
    
  7. Visit the web UI by opening URL: http://master:8080.

    提示

    现在,我们需要使用用户名和密码admin登录到 Ambari 服务器。

  8. After logging in, we will be able to install and manage our Hadoop cluster from the Ambari web UI, which is similar to the following screenshot:

    How to do it...

  9. Next, we need to configure Install Options as shown in the following screenshot:

    How to do it...

  10. After specifying the installation options as shown in the previous screenshot, we can click on the Register and Confirm button to start the installation process. This will lead to the host registration progress page as shown in the following screenshot. In this step, we need to confirm the hosts to install Hadoop:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/372fac6e552442fabf9c00ed5b1ea671~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=A984YC0B2XH2PzP3NzOmoQokB3k%3D)
  1. By clicking on the Next button, we will allow the web page to choose the services to install, as shown in the following screenshot:
![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/831f0af17a7047c98cbaafda286aa50e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=1rKcUDBnAfNjPWl6jRDnsWmo6IU%3D)
  1. By default, all the services are selected to be installed; we can make changes based on the requirements and then click on the Next button. We will go to a web page to assign hosts as masters, slaves, and clients, as shown in the following screenshot:
![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/a17411496c6c46a5a25302163b01f2a8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=QRCWIT4duhtP1CjQyzVcy%2BlAuG4%3D)
  1. Next, we will go to a web page for customizing services, for example, configuring the location for the NameNode directory. In this step, some services such as Hive and Nagios may ask you to enter administrative usernames and passwords, which are required for service installation.
![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e175855acfee4018b2db35f0b00a83c8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=qQTWIID26ocNR2KWhoMdJ7BsbVs%3D)
  1. After everything is configured, we will get a summary page about our configurations, as shown in the following screenshot:
![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/ac1ede61c25243a4b8222cd006c1dbb6~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=VYpoRHhjsi9hmUbBqTUm5Mu6198%3D)
  1. By clicking on the Deploy button, the cluster deployment will start and a progress bar will appear for each service that is being installed, as shown in the following screenshot:
![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/2bd5efa216b74a7f81751d3e157f4705~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=j4vIyu9WAaWIjlIn%2Fn6rj058nn8%3D)
  1. After the deployment completes, we will get a Summary page as shown in the following screenshot:
![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/af9575161b854de894022838ff820b9f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=vRcxF3nBHjiHB8RJWD0q9F3riRE%3D)
  1. 通过单击完成按钮,集群安装过程将完成,和我们将能够看到集群的状态,如以下屏幕截图所示:

How to do it...

另请参阅

使用 Chukwa 监视 Hadoop 集群

Chukwa是一个为收集和分析 Hadoop 日志而开发的项目。 它使用 HDFS 作为其存储架构,并包含许多用于日志分析和集群监控的工具包。 在本食谱中,我们将指导您完成配置 Chukwa 以监视 Hadoop 集群的步骤。

做好准备

最新版本的 Chukwa 使用 HBase 进行键值存储。 因此,在开始之前,我们假设 Hadoop 和 HBase 已经安装并正确配置。

接下来,我们可以使用以下步骤安装 Chukwa:

  1. 从官网incubator.apache.org/chukwa下载最新版本,例如使用以下命令:

    sudo wget http://mirror.symnds.com/software/Apache/incubator/chukwa/chukwa-0.5.0/chukwa-incubating-src-0.5.0.tar.gz -P /usr/local
    
    
  2. 使用以下命令解压缩存档文件:

    sudo tar xvf chukwa-incubating-src-0.5.0.tar.gz
    
    
  3. 使用以下命令为目录创建符号链接:

    sudo ln -s chukwa-incubating-src-0.5.0 chukwa
    
    
  4. 使用以下命令更改目录的所有权:

    sudo chown hduser.hduser chukwa-incubating-src-0.5.0 -R
    sudo chown hduser.hduser chukwa -R
    
    
  5. 通过将以下内容添加到~/.bashrc文件中来更改环境变量:

    export CHUKWA_HOME=/usr/local/chukwa
    PATH=$CHUKWA_HOME/bin:$PATH
    
    
  6. 使用以下命令从源代码构建 Chukwa:

    source ~/.bashrc
    cd $CHUKWA_HOME
    mvn clean package
    
    
  7. When the compilation finishes, the directory structure of Chukwa will be similar to the following:

    chukwa
    ├── bin
    │ ├── chukwa
    │ ├── chukwa-config.sh
    │ ├── slaves.sh
    │ ├── start-agents.sh
    │ ├── start-chukwa.sh
    │ ├── start-collectors.sh
    │ └── VERSION
    ├── conf
    │ ├── auth.conf
    │ ├── chukwa-agent-conf.xml
    │ ├── chukwa-collector-conf.xml
    │ ├── chukwa-demux-conf.xml
    │ ├── chukwa-env.sh
    │ ├── chukwa-log4j.properties
    │ ├── collectors
    │ ├── agents
    │ ├── hadoop-log4j.properties
    │ ├── hadoop-metrics.properties
    │ ├── hbase.schema
    │ ├── initial_adaptors
    │ └── system-data-loader.properties
    └── ...
    29 directories, 93 files
    
    

    提示

    如果您下载的是 Chukwa 的二进制版本,则目录结构可能与此不同。

  8. 使用以下命令安装telnet

    sudo yum install telnet
    
    
  9. 使用以下命令将中的从管理员计算机登录到主节点:

    ssh hduser@master
    
    

怎么做……

使用以下步骤配置 Chukwa 以进行 Hadoop 监视:

  1. $HADOOP_HOME/conf/log4j.properties文件中的log4j.appender.DRFA变量更改为以下值:

    log4j.appender.DRFA=org.apache.log4j.net.SocketAppender
    
  2. 使用以下命令将 Hadoopmetrics文件从Chukwa目录复制到 Hadoop 配置目录:

    cp $CHUKWA_HOME/etc/chukwa/hadoop-metrics.properties $HADOOP_HOME/conf
    
    
  3. 使用以下命令将client.jar文件从 Chukwa 安装目录复制到 Hadoop 共享目录:

    cp $CHUKWA_HOME/share/chukwa/chukwa-0.5.0-client.jar $HADOOP_HOME/lib
    
    
  4. 使用以下命令将json库从 Chukwa 库复制到 Hadoop 库:

    cp $CHUKWA_HOME/share/chukwa/lib/json-simple-1.1.jar $HADOOP_HOME/lib
    
    
  5. 使用以下命令将文件和配置同步到从节点:

    for host in cat $HADOOP_HOME/conf/slaves
    do
     echo ‘Copying file to ‘ $host
     scp $HADOOP_HOME/lib/chukwa-0.5.0-client.jar $host:$HADOOP_HOME/lib;
     scp $HADOOP_HOME/lib/json-simple-1.1.jar $host: $HADOOP_HOME/lib;
     scp $HADOOP_HOME/conf/hadoop-metrics.properties $host:$HADOOP_HOME/conf
    done
    
    
  6. 使用以下命令重启 Hadoop 集群:

    stop-all.sh
    start-all.sh
    
    
  7. 使用以下命令启动 HBase 后台进程:

    start-hbase.sh
    
    
  8. Import the Chukwa schema file to HBase with the following command:

    hbase shell < $CHUKWA_HOME/etc/chukwa/hbase.schema
    
    

    该命令将产生类似于以下内容的输出:

    HBase Shell; enter ‘help<RETURN>’ for list of supported commands.
    Type “exit<RETURN>” to leave the HBase Shell
    Version 0.94.5, r1443843, Fri Feb  8 05:51:25 UTC 2013
    
    create “Hadoop”,
    {NAME => “ClientTrace”, VERSIONS => 65535},
    {NAME => “dfs_namenode”, VERSIONS => 65535},
    {NAME => “dfs_FSNamesystem”, VERSIONS => 65535},
    {NAME => “dfs_datanode”, VERSIONS => 65535},
    {NAME => “mapred_jobtracker”, VERSIONS => 65535},
    {NAME => “mapred_shuffleOutput”, VERSIONS => 65535},
    {NAME => “mapred_tasktracker”, VERSIONS => 65535},
    {NAME => “jvm_metrics”, VERSIONS => 65535},
    {NAME => “mapred_Queue”, VERSIONS => 65535},
    {NAME => “metricssystem_MetricsSystem”, VERSIONS => 65535},
    {NAME => “rpc_rpc”, VERSIONS => 65535},
    {NAME => “rpcdetailed_rpcdetailed”, VERSIONS => 65535},
    {NAME => “ugi_ugi”, VERSIONS => 65535}
    0 row(s) in 2.7920 seconds
    
    create “HadoopLog”,
    {NAME => “NameNode”, VERSIONS => 65535},
    {NAME => “Audit”, VERSIONS => 65535}
    0 row(s) in 1.0740 seconds
    
    create “Jobs”,
    {NAME => “summary” }
    0 row(s) in 1.0610 seconds
    
    create “SystemMetrics”,
    {NAME => “cpu”, VERSIONS => 65535},
    {NAME => “system”, VERSION => 65535},
    {NAME => “disk”, VERSION => 65535},
    {NAME => “memory”, VERSION => 65535},
    {NAME => “network”, VERSION => 65535},
    {NAME => “tags”, VERSION => 65535}
    0 row(s) in 1.1030 seconds
    
    create “ClusterSummary”,
    {NAME=> “cpu”, VERSIONS => 65535},
    {NAME => “system”, VERSION => 65535},
    {NAME => “disk”, VERSION => 65535},
    {NAME => “memory”, VERSION => 65535},
    {NAME => “network”, VERSION => 65535},
    {NAME => “hdfs”, VERSION => 65535},
    {NAME => “mapreduce”, VERSION => 65535}
    0 row(s) in 1.0830 seconds
    
    create “chukwa”,
    {NAME=>”chukwaAgent_chunkQueue”, VERSIONS => 65535},
    {NAME => “chukwaAgent_metrics”, VERSION => 65535},
    {NAME => “chukwaAgent_httpSender”, VERSION => 65535}
    0 row(s) in 1.0860 seconds
    
    

    输出显示已经创建了 6 个 HBase 表。

  9. Use a text editor to open the $CHUKWA_HOME/etc/chukwa/chukwa-collector-conf.xml file and comment the chukwaCollector.pipeline property by adding the following string before the property:

    <!-- 
    

    在属性末尾添加以下字符串:

    -->
    

    通过这样做,我们已经将 Chukwa 配置为使用 HBase 进行日志收集存储。

  10. 将文件中的环境变量配置为以下值:

```sh
export JAVA_HOME=/usr/java/latest
export HADOOP_HOME=/usr/local/hadoop
export HBASE_HOME=/usr/local/hbase
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
export HBASE_CONF_DIR=$HBASE_HOME/conf
```

11. 通过将以下主机名添加到$CHUKWA_HOME/etc/chukwa/agents文件,将 Chukwa 配置为从从节点收集数据:

```sh
slave1
slave2
slave3
...
```

12. We can run multiple collectors (for example, we want to run collectors on the master and slave1 nodes) by adding the following content into the $CHUKWA_HOME/etc/chukwa/collectors file:

```sh
http://master:8081
http://slave1:8081
```

### 备注

多个收集器可以提高数据收集过程的吞吐量。

13. Start the Chukwa agents with the following command:

```sh
start-agents.sh

```

我们将获得类似于以下屏幕截图的输出:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/c6f2c3c3381d48a0a159efb6a675f047~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=z0aFaOe4SFxNO8IOhsQVJjXAcTM%3D)

14. Start the Chukwa collector with the following command:

```sh
start-collectors.sh

```

此命令的输出类似于以下内容:

![How to do it...](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/315cc1ab251c43658e59f97e541f8bd7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5biD5a6i6aOe6b6Z:q75.awebp?rk3s=f64ab15b&x-expires=1771320275&x-signature=0jpWmJmWPEbI6EImrByZlgsNA0g%3D)

15. 使用

```sh
export PIG_CLASSPATH=$HADOOP_HOME/conf:$HBASE_HOME/conf

```

将 Hadoop 和 HBase 的配置目录添加到 Pig`CLASSPATH`条目

16. 使用pig通过以下命令分析数据:

```sh
pig -Dpig.additional.jars=$HBASE_HOME/hbase-0.94.5.jar:$PIG_HOME/pig-0.11.0.jar $CHUKWA_HOME/share/chukwa/script/pig/ClusterSummary.pig

```

17. 使用以下命令启动Hadoop Infrastructure Care Center(HICC)的 Web UI:

```sh
chukwa hicc

```

18. 打开 URLhttp://master:4080,并使用admin作为登录的用户名和密码。

提示

我们可以修改$CHUKWA_HOME/etc/chukwa/auth.conf文件以更改登录凭据。

默认情况下,该文件将包含以下内容:

admin: admin, user

这个的意思是username: password[, role]

它是如何工作的.

Chukwa 旨在收集集群中跨分布式机器动态生成的数据。 它有四个主要组件:Adaptor收集器MapReduce其他数据处理作业,以及称为HICC的 Web UI。

Chukwa 适配器部署在每台数据源计算机上。 适配器在这些机器上以代理的形式运行,这些代理将收集的数据发送到本地或远程机器上的收集器。

Chukwa 收集器将数据从代理输送到 HDFS 等数据存储系统。 出于性能原因,数据通常作为序列文件写入,这些文件将由 MapReduce 作业处理。

MapReduce 作业将生成键-值对,以供最后一个组件-HICC 进行可视化。 Chukwa 使用嵌入式 Web 服务器Jetty部署 Web 存档文件$CHUKWA_HOME/ share/chukwa/webapps/hicc.war

提示

有时,您可能在运行 HICC 和访问 Web UI 时遇到问题;最可能的原因是您有不兼容的 Hadoop、HBase 和 Chukwa 的.jar文件。 在这种情况下,我的建议是从 GitHub(github.com/apache/chuk…)克隆源代码,然后从源代码编译hicc.warWeb 归档文件。 有关更多信息,请查看源代码根目录中的README.txt文件。

总而言之,楚科瓦的数据流可以用下图来描述:

How it works...

有关楚克瓦设计的更多信息,请查看网址:incubator.apache.org/chukwa/docs…

还有更多...

由于该软件包的不稳定,在将其部署到集群上时可能需要进行一些调试。 但是,要开始使用 Chukwa,建议始终以本地或伪分布式模式运行它,这将在本地计算机上启动一个代理和一个收集器。 为此,可以使用以下命令:

chukwa agent local

前面的命令将给出以下输出:

OK chukwaAgent.checkpoint.dir [File] = /tmp/chukwa/log/
OK chukwaAgent.checkpoint.interval [Time] = 5000
OK chukwaAgent.control.port [Portno] = 9093
OK chukwaAgent.sender.fastRetries [Integral] = 4

我们还可以使用以下命令:

chukwa collector local

此命令将提供以下输出:

OK chukwaCollector.http.port [Integral] = 8081
OK chukwaCollector.pipeline [ClassName list] = org.apache.hadoop.chukwa.datacollection.writer.SocketTeeWriter,org.apache.hadoop.chukwa.datacollection.writer.hbase.HBaseWriter
OK chukwaCollector.rotateInterval [Time] = 300000
OK chukwaCollector.writerClass [ClassName] = org.apache.hadoop.chukwa.datacollection.writer.PipelineStageWriter
OK writer.hdfs.filesystem [URI] = hdfs://master:54310
started Chukwa http collector on port 8081

我们可以通过使用以下命令跟踪日志文件来检查守护程序的状态:

tail -f /tmp/chukwa/logs/agent.log
tail -f /tmp/chukwa/logs/collector.log

目前,Chukwa 是Apache Free Software(AFS)基金会下的孵化器项目。 我们可以在wiki.apache.org/hadoop/chuk…的维基页面或官方网站incubator.apache.org/chukwa/上查看开发计划和进展。 与许多开放源码项目类似,会报告新的错误并添加新功能;跟上最新更改的一个很好的方法是使用源代码存储库,它可以在:github.com/apache/chuk…中找到。

另请参阅

  • 使用 JMX配方监视 Hadoop 集群
  • 使用 Ganglia配方监视 Hadoop 集群
  • 使用 Nagios配方监视 Hadoop 集群
  • 使用 Ambari配方监视 Hadoop 集群
  • 参考incubator.apache.org/chukwa/docs…**