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用户必须能够连接
- 在这种情况下,可以通过ssh master迁移到master上自己的用户帐户,而不必是ssh localhost。
- 通过无密码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和辅助NameNodes 。
主NameNode和JobTracker将始终在我们运行bin / start-dfs.sh和bin / start-mapred.sh的计算机上 。
- 现在让我们使用以下命令编辑conf / slaves (仅在masters节点中)
master
slave
这意味着,我们也尝试在主机上运行datanode进程-namenode也在其中运行。 如果我们拥有更多的机器作为数据节点,我们可以让主服务器充当从服务器。
如果我们有更多的奴隶,那么每行添加一个主机,如下所示:
master
slave
slave2
slave3
等等…。
现在,让我们编辑两个重要文件( 在集群的所有节点中):
- conf / core-site.xml
- 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命令以查看一切运行良好与否。
在主节点中,所需的输出为–
$ jps14799 NameNode
15314 Jps
14880 DataNode
14977 SecondaryNameNode
在从站中:
$ jps
15314 Jps
14880 DataNode
当然,进程ID会因计算机而异。
故障排除
Datanode可能无法在我们所有的节点中启动。 在这一点上,如果我们看到
logs/hadoop-hduser-datanode-.log
在受影响的节点上,以下情况除外:
java.io.IOException: Incompatible namespaceIDs
在这种情况下,我们需要执行以下操作–
- 停止整个集群,即MapReduce和HDFS层。
- 删除有问题的DataNode上的数据目录:该目录由conf / hdfs-site.xml中的 dfs.data.dir指定。 在我们的例子中,相关目录是/ app / hadoop / tmp / dfs / data
- 重新格式化NameNode。 在格式化过程中,所有HDFS数据都会丢失。
- 重新启动集群。
要么
我们可以手动更新有问题的DataNode的namespaceID:
- 停止有问题的DataNode。
- 编辑$ {dfs.data.dir} / current / VERSION中的namespaceID的值,以匹配$ {dfs.name.dir} / current / VERSION中当前NameNode的对应值。
- 重新启动固定的DataNode。
在Apache Hadoop(多节点集群)中运行Map-Reduce作业中 ,我们将按照apache hadoop示例分享有关Map Reduce Job Running的经验。
资源资源
- http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
- http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/
- http://hadoop.apache.org/docs/current/
翻译自: https://www.javacodegeeks.com/2013/06/setting-up-apache-hadoop-multi-node-cluster.html
hadoop 多节点集群