![Hadoop大数据技术开发实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/392/27563392/b_27563392.jpg)
3.5 搭建Hadoop 2.x分布式集群
本例的搭建思路是,在节点centos01中安装Hadoop并修改配置文件,然后将配置好的Hadoop安装文件远程复制到集群中的其他节点。集群各节点的角色分配如表3-1所示。
表3-1 Hadoop集群角色分配
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-T54_6123.jpg?sign=1739382690-JSBSiXZPhYMx9EJyuiBK8gol3beJ72kN-0-ac2df4101b4488ad6762a959ae9c7111)
表3-1中的角色指的是Hadoop集群各节点所启动的守护进程,其中的NameNode、DataNode和SecondaryNameNode是HDFS集群所启动的进程(HDFS将在第4章进行详细讲解);ResourceManager和NodeManager是YARN集群所启动的进程。
Hadoop集群搭建的操作步骤如下。
1. 上传Hadoop并解压
在centos01节点中,将Hadoop安装文件hadoop-2.8.2.tar.gz上传到/opt/softwares/目录,然后进入该目录,解压安装文件到/opt/modules/,命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P54_6121.jpg?sign=1739382690-gpeCLlBsZYRJikxtkBfPIrgSq0JgzvnH-0-6e698901e0b30291f7d5c8242c8b2351)
2. 配置系统环境变量
为了可以方便地在任意目录下执行Hadoop命令,而不需要进入到Hadoop安装目录,需要配置Hadoop系统环境变量。此处只需要配置centos01节点即可。
执行以下命令,修改文件/etc/profile:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/54.jpg?sign=1739382690-TJl1DaA1ZMYwqNq2bAKN3kEjJOC0QqAg-0-2cd3332ed483604eeac21dc016044f6e)
在文件末尾加入以下内容:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P54_6119.jpg?sign=1739382690-A3sX4fu9ssfYAm06YXsSZ24b4fPWoDiR-0-dc7648cef07ba9fff4289ad5541ac625)
执行以下命令,刷新profile文件,使修改生效。
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P54_6120.jpg?sign=1739382690-zlPNkQDliSeEgk7c74onGE8QnGZnAjXx-0-159eca3f1206beccdfbcffcc9ed88470)
执行hadoop命令,若能成功输出以下返回信息,说明Hadoop系统变量配置成功:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P55_6318.jpg?sign=1739382690-hxhvVbWzyxAwzdKCZjVClOIWxq6eEfKr-0-901e5718a785a8c41119e6fd0db3c737)
3. 配置Hadoop环境变量
Hadoop所有的配置文件都存在于安装目录下的etc/hadoop中,进入该目录,修改以下配置文件:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P55_6317.jpg?sign=1739382690-JKvTD64X5k8NCIeU0TxIHLfXFw5jvYyp-0-94cebd607ce82378c78726f99ba274b1)
三个文件分别加入JAVA_HOME环境变量,如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P55_6319.jpg?sign=1739382690-1c5M8AdoQ6x22p8lT9rj1BnXSobwMf5R-0-216b2d3c41c664555a5e64e45fdbec0d)
4. 配置HDFS
(1)修改配置文件core-site.xml,加入以下内容:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P55_6316.jpg?sign=1739382690-hLeawEaUrqEcPx6zMg4fWfJs8FXtMbpy-0-16bd990ac8f2131c3144f2fd1eaf108e)
上述配置属性解析如下:
- fs.defaultFS:HDFS的默认访问路径,也是NameNode的访问地址。
- hadoop.tmp.dir:Hadoop数据文件的存放目录。该参数如果不配置,默认指向/tmp目录,而/tmp目录在系统重启后会自动被清空,从而导致Hadoop的文件系统数据丢失。
(2)修改配置文件hdfs-site.xml,加入以下内容:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P55_6315.jpg?sign=1739382690-DjylgjYJRVmtRZTyzduH2a87wUNZ7ftY-0-da251322ddc4fb1b393f4586063f8ae6)
上述配置属性解析如下:
- dfs.replication:文件在HDFS系统中的副本数。
- dfs.namenode.name.dir:NameNode节点数据在本地文件系统的存放位置。
- dfs.datanode.data.dir:DataNode节点数据在本地文件系统的存放位置。
(3)修改slaves文件,配置DataNode节点。slaves文件原本无任何内容,需要将所有DataNode节点的主机名都添加进去,每个主机名占一整行(注意不要有空格)。本例中,DataNode为三个节点,配置信息如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P56_6485.jpg?sign=1739382690-JqSXGcHEJM6XAT4zYk1e9HexnHfasV4s-0-de496ae3f6c3e9e5dd6b4cabc4c46a19)
5. 配置YARN
(1)重命名mapred-site.xml.template文件为mapred-site.xml,修改mapred-site.xml文件,添加以下内容,指定任务执行框架为YARN。
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P56_6481.jpg?sign=1739382690-Zeqb1IQXNkJbRbY0MRpL7Scx2SUZ8zuC-0-d10fe963996dff360abd106dc97d4391)
(2)修改yarn-site.xml文件,添加以下内容:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P56_6482.jpg?sign=1739382690-KTI7iJDQnBhWgBvmE7dBZ2xCemFqUP6e-0-fbe21fb658aa7ade9c35c09850e935d4)
上述配置属性解析如下:
- yarn.nodemanager.aux-services:NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可运行MapReduce程序。YARN提供了该配置项用于在NodeManager上扩展自定义服务,MapReduce的Shuffle功能正是一种扩展服务。
也可以继续在yarn-site.xml文件中添加以下属性内容,指定ResourceManager所在的节点与访问端口(默认端口为8032),此处指定ResourceManager运行在centos01节点:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P57_6565.jpg?sign=1739382690-iYjBmPCiibvWLpi7SJefHp0SmfORx9GW-0-0d2359e58e80fc4769b808aa0e7448ea)
若不添加上述内容,ResourceManager将默认在执行YARN启动命令(start-yarn.sh)的节点上启动。
6. 复制Hadoop安装文件到其他主机
在centos01节点上,将配置好的整个Hadoop安装目录复制到其他节点(centos02和centos03),命令如下:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P57_6566.jpg?sign=1739382690-li2M233RQX3ciLgsw1QX2nfciOUbfr6j-0-aa047467909ac6c5fe464f7036a29d47)
7. 格式化NameNode
启动Hadoop之前,需要先格式化NameNode。格式化NameNode可以初始化HDFS文件系统的一些目录和文件,在centos01节点上执行以下命令,进行格式化操作:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P57_6567.jpg?sign=1739382690-Uaw8gjtMyOmyIAC5Zg8Xkamh7lAozxxL-0-c63f06597b2560f57d59dfa3a81afc25)
若能输出以下信息,说明格式化成功:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P57_6568.jpg?sign=1739382690-rqzNGD4jeI2mCFHSlEjvkdg3zZH0aCbA-0-14cdd2c4bdf9b037f458ffa79a7d620d)
格式化成功后,会在当前节点的Hadoop安装目录中生成tmp/dfs/name/current目录,该目录中则生成了用于存储HDFS文件系统元数据信息的文件fsimage(关于元数据文件将在下一章进行详细讲解),如图3-8所示。
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P57_6548.jpg?sign=1739382690-SfFnzXgE1eT0PbxWXsh3hTh9XLSg8kaR-0-b7583d91213d346fb61eeca7565bd401)
图3-8 格式化NameNode后生成的相关文件
需要注意的是,必须在NameNode所在节点上进行格式化操作。
8. 启动Hadoop
在centos01节点上执行以下命令,启动Hadoop集群:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P57_6570.jpg?sign=1739382690-thzGbaWDzE4WeCjw8EUbZw7LrKAxROBv-0-c87c51e0683ee130d2dd9206d0b98330)
也可以执行start-dfs.sh和start-yarn.sh分别启动HDFS集群和YARN集群。
Hadoop安装目录下的sbin目录中存放了很多启动脚本,若由于内存等原因使集群中的某个守护进程宕掉了,可以执行该目录中的脚本对相应的守护进程进行启动。常用的启动和停止脚本及说明如表3-2所示。
表3-2 Hadoop启动和停止脚本及说明
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-T58_6826.jpg?sign=1739382690-3Qh65b9mptVD5GXmnkr3dTBWcRqQiRYV-0-7e1e92e17416449e8457f3ff71f4bd57)
注意
①若不配置SecondaryNameNode所在的节点,将默认在执行HDFS启动命令(start-dfs.sh)的节点上启动;②若不配置ResourceManager所在的节点,将默认在执行YARN启动命令(start-yarn.sh)的节点上启动;若配置了ResourceManager所在的节点,则必须在所配置的节点启动YARN,否则在其他节点启动时将抛出异常;③NodeManager无须配置,会与DataNode在同一个节点上,以获取任务执行时的数据本地性优势,即有DataNode的节点就会有NodeManager。
9. 查看各节点启动进程
集群启动成功后,分别在各个节点上执行jps命令,查看启动的Java进程。可以看到,各节点的Java进程如下。
centos01节点的进程:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P58_6823.jpg?sign=1739382690-hABH250rD1XJUQwlu3RjV419vj9ApohL-0-52514418793da4a95a300b6825f6e6ae)
centos02节点的进程:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P59_6911.jpg?sign=1739382690-xdYG6eDlO1fqina5lBIWUGwSosB7frzT-0-7221cf4b76063375641686e2a7a473f8)
centos03节点的进程:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P59_6912.jpg?sign=1739382690-SeeemV1Xyq4rIJ5q0lpsSonPI51lXePA-0-3862a368ba7c188ad7e5354a01392dfb)
10. 测试HDFS
在centos01节点中执行以下命令,在HDFS根目录创建文件夹input,并将Hadoop安装目录下的文件README.txt上传到新建的input文件夹中:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P59_6913.jpg?sign=1739382690-PpmbgcU1vKQ5m11vIT6LtWH6vnZteCeQ-0-c1fc9d2282df5edbb858ca8b970fa90a)
浏览器访问网址http://centos01:50070(需要在本地配置好域名IP映射,域名为NameNode所在节点的主机名,关于NameNode将在第4章进行详细讲解)可以查看HDFS的NameNode信息并浏览HDFS系统中的文件,如图3-9所示。
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P59_6894.jpg?sign=1739382690-Xv9SgZuCXtqQYXOhBe5RKM4c1dmapZYx-0-eb0a10208e4cf48eee965e153c8d3fea)
图3-9 HDFS Web主界面
11. 测试MapReduce
在centos01节点中执行以下命令,运行Hadoop自带的MapReduce单词计数程序,统计/input文件夹中的所有文件的单词数量:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P59_6916.jpg?sign=1739382690-etQpCn8ZSudejAofbZVYBye2VgbAaaRa-0-f54d6ff9434a2cdda2ffdffaa2d4315f)
统计完成后,执行以下命令,查看MapReduce执行结果:
![](https://epubservercos.yuewen.com/B7D09D/15825993105224906/epubprivate/OEBPS/Images/Figure-P60_6929.jpg?sign=1739382690-6dn6IgrRiSaOAGf2LqGUbvowUQWBrFQq-0-1eee066634d1d3c59dda7bec848700db)
如果以上测试没有问题,则Hadoop集群搭建成功。
本书第4、5章将对HDFS和MapReduce做出详细讲解。