设置Apache Hadoop多节点集群

我们正在分享有关在基于Linux的机器(多节点)上安装Apache Hadoop的经验。 在这里,我们还将分享我们在各种故障排除方面的经验,并在将来进行更新。

用户创建和其他配置步骤–

  • 我们首先在每个集群中添加一个专用的Hadoop系统用户。


$ sudo addgroup hadoop
$ sudo adduser –ingroup hadoop hduser
  • 接下来,我们在所有群集上配置SSH(安全外壳)以启用安全的数据通信。
user@node1:~$ su – hduser
hduser@node1:~$ ssh-keygen -t rsa -P “”

输出将类似于以下内容:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/hduser/.ssh/id_rsa):
Created directory '/home/hduser/.ssh'.
Your identification has been saved in /home/hduser/.ssh/id_rsa.
Your public key has been saved in /home/hduser/.ssh/id_rsa.pub.
The key fingerprint is:
9b:82:ea:58:b4:e0:35:d7:ff:19:66:a6:ef:ae:0e:d2 hduser@ubuntu
.....
  • 接下来,我们需要使用此新创建的密钥启用对本地计算机的SSH访问:
hduser@node1:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys

在所有群集节点中重复上述步骤,并通过执行以下语句进行测试

hduser@node1:~$ ssh localhost

还需要执行此步骤,以将本地计算机的主机密钥指纹保存到hduser用户的known_hosts文件中。

接下来,我们需要编辑/ etc / hosts文件,在其中将集群中每个系统的IP和名称放入其中。

在我们的方案中,我们有一个主机(IP 192.168.0.100)和一个从机(IP 192.168.0.101)

$ sudo vi /etc/hosts

然后将这些值作为键值对放入主机文件中。

192.168.0.100 master
192.168.0.101 slave
  • 提供SSH访问

主节点上的hduser用户必须能够连接

    1. 在这种情况下,通过ssh master可以将其自身的用户帐户转移到master上,而不必是ssh localhost。
    2. 通过无密码SSH登录到从设备的hduser帐户。

因此,我们将hduser @ master的SSH公钥分配给它的所有从属(在我们的情况下,我们只有一个从属。如果您有更多从属,请执行以下语句更改计算机名称,即slave,slave1,slave2)。

hduser@master:~$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub hduser@slave

尝试通过将主机连接到主机,将主机连接到从机,然后检查是否一切正常。

配置Hadoop

  • 让我们编辑conf / masters (仅在masters节点中)

然后我们在文件中输入master

为此,我们告诉Hadoop在此计算机的多节点集群中启动Namenode和secondary NameNodes

主NameNodeJobTracker将始终在我们运行bin / start-dfs.shbin / start-mapred.sh的计算机上

  • 现在让我们使用以下命令编辑conf / slaves (仅在masters节点中)
master
slave

这意味着,我们也尝试在主机上运行datanode进程-namenode也在其中运行。 如果我们拥有更多的机器作为数据节点,我们可以让主服务器充当从服务器。

如果我们有更多的奴隶,那么每行添加一个主机,如下所示:

master
slave
slave2
slave3

等等…。

现在,让我们编辑两个重要文件( 集群的所有节点中):

  1. conf / core-site.xml
  2. conf / core-hdfs.xml

1)conf / core-site.xml

我们必须更改指定NameNode主机和端口的fs.default.parameter 。 (在我们的例子中,这是主机)

<property>

<name>fs.default.name</name>
<value>hdfs://master:54310</value>

…..[Other XML Values]

</property>

创建一个目录,Hadoop将在其中存储其数据–

$ mkdir /app/hadoop

我们必须确保该目录可由任何用户写入:

$ chmod 777 /app/hadoop

再次修改core-site.xml以添加以下属性:

<property>
<name>hadoop.tmp.dir</name>
<value>/app/hadoop</value>
</property>

2)conf / core-hdfs.xml

我们必须更改dfs.replication参数,该参数指定默认的块复制。 它定义了单个文件可用之前应复制到多少台计算机。 如果将其设置为大于可用从属节点数(更确切地说是DataNode数)的值,则将开始在日志中看到很多“(找到零目标,forbidden1.size = 1)”类型错误文件。

dfs.replication的默认值为3。但是,由于(在我们的方案中)只有两个节点可用,因此我们将dfs.replication设置为2。

<property>
<name>dfs.replication</name>
<value>2</value>
…..[Other XML Values]
</property>
  • 让我们通过NameNode 格式化 HDFS文件系统。

master上运行以下命令

bin/hadoop namenode -format
  • 让我们启动多节点集群:

运行命令:(在本例中,我们将在名为master的机器上运行)

bin/start-dfs.sh

检查Hadoop状态–

一切开始后,在所有节点上运行jps命令以查看一切运行良好与否。

在主节点上,所需的输出将是–

$ jps

14799 NameNode
15314 Jps
14880 DataNode
14977 SecondaryNameNode

在从站中:

$ jps
15314 Jps
14880 DataNode

当然,进程ID会因计算机而异。

故障排除

Datanode可能无法在我们所有的节点中启动。 在这一点上,如果我们看到

logs/hadoop-hduser-datanode-.log

在受影响的节点上,以下情况除外:

java.io.IOException: Incompatible namespaceIDs

在这种情况下,我们需要执行以下操作–

  1. 停止整个集群,即MapReduce和HDFS层。
  2. 删除有问题的DataNode上的数据目录:该目录由conf / hdfs-site.xml中的 dfs.data.dir指定 在我们的例子中,相关目录是/ app / hadoop / tmp / dfs / data
  3. 重新格式化NameNode。 在格式化过程中,所有HDFS数据都会丢失。
  4. 重新启动集群。

要么

我们可以手动更新有问题的DataNode的namespaceID:

  1. 停止有问题的DataNode。
  2. 编辑$ {dfs.data.dir} / current / VERSION中的namespaceID的值,以匹配$ {dfs.name.dir} / current / VERSION中当前NameNode的对应值。
  3. 重新启动固定的DataNode。

Apache Hadoop(多节点群集)中运行Map-Reduce作业中 ,我们将按照apache hadoop示例分享有关Map Reduce Job Running的经验。

资源资源


翻译自: https://www.javacodegeeks.com/2013/06/setting-up-apache-hadoop-multi-node-cluster.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值