集群三部曲:全分布模式
!!!准备三台干净的机器Cloud01、Cloud02、Cloud03 ,这里建议三台机器的主机名hostname不一样(防止无法根据配置文件确定主节点和从节点等),用户名username是一样的(方便免密登录),主机名和用户名最好不要一样,若要修改主机名请参考修改主机名的步骤。并且做好准备工作(请参考集群三部曲之准备工作,一定要在准备工作的基础上)。
~单机模式
1.免密登录三台机器SSH(Secure Shell)
(请查看SSH免密登录原理及详细操作)
1.1 使用root权限修改每台机器的hosts,添加对应的远程IP和主机名(IP 主机名)
sudo vim /etc/hosts
• 将原来的内容清空,增加对应内容:
192.168.137.129 Cloud01
192.168.137.130 Cloud02
192.168.137.131 Cloud03
1.2 客户端发起一个Public Key认证请求
ssh-keygen -t rsa
(三个回车)
在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和 id_rsa。id_rsa.pub是你的公钥,后者是你的私钥。
1.3 将公钥传送到远程主机上
ssh-copy-id [email protected]
ssh-copy-id [email protected]
1.4 查看远程主机上是否接收到,.ssh/authorized_keys文件中
实际上是追加在authorized_keys文件的末尾
1.5 重启 SSH服务命令使其生效:
sudo service sshd restart
1.6 使用IP免密登录(用户名相同时,ssh+主机名;如果不同,登录方式就是 ssh+用户名@IP地址)
ssh Cloud02
ssh Cloud03
*!注意:三台机器要都能互相免密登录。重复步骤1-6,对后面两台机器免密认证。
2.搭建过程:
1)集群部署规划
Cloud01 | Cloud02 | Cloud03 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | ResourceManager、NodeManager | NodeManager | NodeManager |
2)配置文件(这里建议将第一台机器的8个配置文件通过远程工具移到win系统桌面操作,更改完之后再分别导入每台机器的对应文件夹,注意保存文件时的编码格式要是UTF-8)
需要修改的配置文件有:
core-site.xml
hadoop-env.sh
hadoop-site.xml
slaves(自己创建的)
yarn-env.sh
yarn-site.xml
mapred-env.sh
mapred-site.xml(通过mapred-site.xml.template复制的)
(1)core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 --> <property>
<name>fs.defaultFS</name>
<value>hdfs://Cloud01:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hyn/software/hadoop/data/tmp</value>
</property> </configuration>
(2)Hdfs
hadoop-env.sh
export JAVA_HOME=/home/hyn/software/jdk
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Cloud01:50090</value>
</property>
</configuration>
slaves
Cloud01
Cloud02
Cloud03
(3)yarn
yarn-env.sh
export JAVA_HOME=/home/hyn/software/jdk
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Cloud01</value>
</property>
</configuration>
(4)mapreduce
mapred-env.sh
export JAVA_HOME=/home/hyn/software/jdk
mapred-site.xml(如果没有此配置文件,使用命令复制一份,参考下面截图)
<configuration>
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
*!把上面的配置文件同步到集群其他机器,
配置文件内容是一样的,可以先将文件复制出来,再分别移到其他机器。
至此,操作步骤已完成,请确保:
1.jdk和Hadoop安装、配置工作做好了
2.三台机器互相免密登录
3.三台机器的配置文件更改完成
3.集群启动及测试
Cloud01
1)启动集群(下面的命令中可以省略 bin/ 和sbin/)
(1)如果集群是第一次启动,需要格式化namenode
bin/hdfs namenode -format
启动hdfs:start-dfs.sh
(这里有很多人不成功,请看文末的错误情况和解决方法)
(2)启动namenode和datanode
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
(3)启动resourcemanager和nodemanager
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
(4)jps查看是否启动成功
Cloud02
(1)启动datanode
sbin/hadoop-daemon.sh start datanode
(2)启动nodemanager
sbin/yarn-daemon.sh start nodemanager
(3)jps查看是否启动成功
Cloud03
(1)启动secondarynamenode和datanode
(如果配置文件中设置的SecondaryNamenode是第二台机器,就在Cloud02上启动secondarynamenode节点就好了)
sbin/hadoop-daemon.sh start secondarynamenode
sbin/hadoop-daemon.sh start datanode
(2)启动nodemanager
sbin/yarn-daemon.sh start nodemanager
(3)jps查看是否启动成功
按照集群结点部署规划,若符合则证明集群搭建成功。
启动hdfs时可能出现问题的解决方法:
1.查看自己的配置文件是否正确,并且确保三台机器的配置文件是一样的。
2.如果出现错误:
19/03/21 17:11:08 FATAL conf.Configuration: error parsing conf core-site.xml
org.xml.sax.SAXParseException; systemId: file:/home/hyn/software/hadoop/etc/hadoop/core-
site.xml; lineNumber: 20; columnNumber: 8; Invalid byte 1 of 1-byte UTF-8 sequence.
这个错误是你的配置文件编码格式错误,将对应的配置文件更改为UTF-8格式就好了,记得保证三台机器的配置文件一致。
3.如果没有出现错误,但是在dfs启动节点的时候,一直停留不动,可能原因是你的主机名一致,导致后台无法通过配置文件判断你的主节点和从节点等该分配到哪台机器。这时你可以在系统启动节点不动时,先回车,结束后,再来手动按照集群部署规划启动各台机器分布的节点即可。
产生的错误情况:
starting...
[hyn@Cloud hadoop]$ hyn@localhost's password:
hyn@localhost's password:
localhost: Permission denied, please try again.
hyn@localhost's password:
localhost: Permission denied, please try again.
localhost: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).