Hadoop手把手逐级搭建(2) Hadoop完全分布式(full)
前置步骤: 1). 第一阶段:Hadoop单机伪分布(single) 第二阶段: Hadoop完全分布式(full) 0. 步骤概述 1). 克隆4台虚拟机 2). 为完全分布式配置ssh免密 3). 将hadoop配置修改为完全分布式 4). 启动完全分布式集群 5). 在完全分布式集群上测试wordcount程序 1. 克隆4台虚拟机 1.1 使用hadoop0克隆4台虚拟机hadoop1,hadoop2,hadoop3,hadoop4 1.1.0 克隆虚拟机hadoop1 1.1.1 右键点击当前虚拟机hadoop0 1.1.2 在右键菜单选中“管理” 1.1.3 在“管理”的子菜单选中“克隆” 1.1.4 弹出“克隆虚拟机向导”窗口 1.1.5 点击“下一步”进入“克隆源”选择窗口 1.1.6 在“克隆源”中选择“虚拟机当前状态”或者“现有快照(仅限关闭的虚拟机)(S):” 1.1.7 点击下一步进入“克隆类型”窗口 1.1.8 选择“创建完整克隆”,点击下一步 1.1.9 在“新虚拟机名称”窗口,“虚拟机名称(V)”中填入新虚拟机“hadoop1”,“位置(L)”中选择目录 1.1.10 点击“完成”开始克隆 1.2生成新的mac地址 1.2.1 右键点击新建的虚拟机hadoop1 1.1.2在右键菜单选中点击“设置” 1.1.3 在“虚拟机设置”窗口,“硬件”标签下,选中“网络适配器” 1.1.4 在窗口右侧点击“高级” 1.1.5 在“网络适配器高级设置”窗口最下方“MAC 地址(M)”一栏点击“生成” 1.1.6 点击“确定”使设置生效 1.3 修改主机名 1.3.1 启动新虚拟机hadoop1 1.3.2 修改network中的HOSTNAME 1.3.2.1 修改生效前命令提示符中现有的主机名还是hadoop0 [root@hadoop0 ~]# vim /etc/sysconfig/network HOSTNAME=hadoop1 1.3.2.2 修改完成后/etc/sysconfig/network完整内容如下 NETWORKING=yes HOSTNAME=hadoop1 GATEWAY=192.168.111.2 1.4 修改hadoop1的IP地址 14.1.1 修改hadoop1的IP地址为192.168.111.211 [root@hadoop0 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 IPADDR=192.168.111.211 1.4.2 修改完成后/etc/sysconfig/network-scripts/ifcfg-eth0完整内容如下 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.111.211 NETMASK=255.255.255.0 GATEWAY=192.168.111.2 1.5 删除70-persistent-net.rules文件 [root@hadoop0 ~]# rm -rf /etc/udev/rules.d/70-persistent-net.rules 1.6 重启虚拟机使配置生效 [root@hadoop0 ~]# init 6 1.7 查看主机名:命令提示符中主机名已变成hadoop1 [root@hadoop1 ~]# hostname hadoop1 1.8 测试外网是否畅通 [root@hadoop1 ~]# ping baidu.com 64 bytes from 111.13.101.208: icmp_seq=1 ttl=128 time=5.50 ms 64 bytes from 111.13.101.208: icmp_seq=1 ttl=128 time=5.50 ms #如果返回如上信息表示网络畅通 1.9 克隆另外3台虚拟机 使用同样的方式克隆并配置另外3台虚拟机,分别命名为hadoop2,hadoop3,hadoop4 2. 为完全分布式配置ssh免密 2.1 在hadoop1上修改hosts文件 2.1.1 将/etc/hosts文件内容替换如下 [root@hadoop1 ~]# vim /etc/hosts 192.168.111.211 hadoop1 192.168.111.212 hadoop2 192.168.111.213 hadoop3 192.168.111.214 hadoop4 2.1.2 将hadoop1上的/etc/hosts分发到hadoop2,hadoop3,hadoop4三个节点 [root@hadoop1 ~]# scp /etc/hosts hadoop2:/etc/hosts [root@hadoop1 ~]# scp /etc/hosts hadoop3:/etc/hosts [root@hadoop1 ~]# scp /etc/hosts hadoop4:/etc/hosts 2.2 在hadoop1上生成密匙 [root@hadoop1 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 2.3 设置本机ssh免密 [root@hadoop1 ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 2.4 将hadoop1生成的公匙拷贝到hadoop2 2.4.1 拷贝过程中需要输入hadoop2的密码 [root@hadoop1 ~]# ssh-copy-id -i ~/.ssh/id_dsa.pub hadoop2 root@hadoop2's password: Now try logging into the machine, with "ssh 'hadoop2'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. 2.4.2 同理,将公匙拷贝hadoop3和hadoop4 2.5 测试从hadoop1通过ssh连接到hadoop2 2.5.1 ssh到hadoop2 [root@hadoop1 ~]# ssh hadoop2 Last login: Mon Nov 27 04:10:16 2017 from 192.168.111.211 2.5.2无需输入密码直接进入hadoop2,说明免密成功 [root@hadoop2 ~] 2.6 退出hadoop2连接,回到hadoop1 2.6.1 使用exit命令退出 [root@hadoop2 ~]# exit logout Connection to hadoop2 closed. 2.6.2 命令提示符显示已经回到hadoop1 [root@hadoop1 ~]# 3. 将hadoop配置修改为完全分布式 3.0 进入$HADOOP_HOME/etc/hadoop目录 [root@hadoop1 ~]# cd /opt/test/hadoop-2.6.5/etc/hadoop 3.1 修改core-site.xml配置 # 将$HADOOP_HOME/etc/hadoop/core-site.xml内容替换如下 [root@hadoop1 hadoop]# vim core-site.xml <configuration> <!-- 修改defaultFS为hadoop1--> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value> </property> <!-- 修改了临时文件存放位置--> <property> <name>hadoop.tmp.dir</name> <value>/var/test/hadoop/full</value> </property> </configuration> 3.2 修改hdfs-site.xml配置 # 将$HADOOP_HOME/etc/hadoop/hdfs-site.xml内容替换如下 [root@hadoop1 hadoop]# vim hdfs-site.xml <configuration> <!-- 将备份数修改为3,小于等于当前datanode数目即可--> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 将secondary namenode改为hadoop2--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop2:50090</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/dfs/name</value> </property> <property> <name>dfs.namenode.data.dir</name> <value>file://${hadoop.tmp.dir}/dfs/data</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration> 3.3 修改yarn-site.xml # 将$HADOOP_HOME/etc/hadoop/yarn-site.xml内容替换如下 [root@hadoop1 hadoop]# vim yarn-site.xml <configuration> <!-- 添加了yarn.resourcemanager.hostname 属性--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 添加了yarn.nodemanager.auxservices.mapreduce.shuffle.class属性--> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration> 3.4 配置salves文件 # 将$HADOOP_HOME/etc/hadoop/slaves内容替换如下 [root@hadoop1 hadoop]# vim slaves hadoop2 hadoop3 hadoop4 3.5 分发hadoop配置到所有节点 [root@hadoop1 hadoop]# scp core-site.xml hdfs-site.xml yarn-site.xml slaves hadoop2:`pwd` [root@hadoop1 hadoop]# scp core-site.xml hdfs-site.xml yarn-site.xml slaves hadoop3:`pwd` [root@hadoop1 hadoop]# scp core-site.xml hdfs-site.xml yarn-site.xml slaves hadoop4:`pwd` 3.6 分发hosts文件到所有节点 [root@hadoop1 hadoop]# scp /etc/hosts hadoop2:/etc/ [root@hadoop1 hadoop]# scp /etc/hosts hadoop3:/etc/ [root@hadoop1 hadoop]# scp /etc/hosts hadoop4:/etc/ 4. 启动完全分布式集群 4.1 在hadoop1上重新格式化namenode [root@hadoop1 ~]# hdfs namenode -format 4.2 在hadoop1上启动集群 [root@hadoop1 ~]# start-dfs.sh 4.3 在hadoop1上启动yarn [root@hadoop1 ~]# start-yarn.sh 4.4 在各节点上查看进程 4.4.1 节点hadoop1 [root@hadoop1 ~]# jps 1466 NameNode 1756 ResourceManager 2014 Jps 4.4.2 节点hadoop2 [root@hadoop2 ~]# jps 1663 Jps 1546 NodeManager 1397 DataNode 1454 SecondaryNameNode 4.4.3 节点hadoop3 [root@hadoop3 ~]# jps 1599 Jps 1457 NodeManager 1399 DataNode 4.4.4 节点hadoop4 [root@hadoop4 ~]# jps 1411 DataNode 1475 NodeManager 1613 Jps 5. 在完全分布式集群上测试wordcount程序 5.1 从hadoop1进入$HADOOP_HOME/share/hadoop/mapreduce/目录 [root@hadoop1 ~]# cd /opt/test/hadoop-2.6.5/share/hadoop/mapreduce/ 5.2上传test.txt文件到根目录 5.2.1 默认上传 [root@hadoop1 mapreduce]# hadoop fs -put test.txt / 5.2.2 也可以指定blocksize上传 [root@hadoop1 mapreduce]# hdfs dfs -D dfs.blocksize=1048576 -put test.txt / 5.3 运行wordcount测试程序,输出到/output [root@hadoop1 mapreduce]# hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /test.txt /output #运行时会首先看到如下信息 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032 5.4 查看mapreduce运行结果 [root@hadoop1 mapreduce]# hadoop dfs -text /output/part-* hello 100003 world 200002 “hello 100000 后续步骤: 3). 第三阶段:Hadoop高可用(HA) 4). 第四阶段:Hadoop高可用+联邦+视图文件系统(HA+Federation+ViewFs)