前言
当Hadoop采用分布式模式部署和运行时,存储采用分布式文件系统HDFS,而且,HDFS的名称节点和数据节点位于不同机器上。这时,数据就可以分布到多个节点上,不同数据节点上的数据计算可以并行执行,这时的MapReduce分布式计算能力才能真正发挥作用。
集群规划
我们使用三个虚拟机节点来搭建集群环境:
ip | 主机名 | 功能 |
192.168.36.121 | hadoop1 | NameNode DataNode ResourceManager NodeManager |
192.168.36.122 | hadoop2 | DataNode NodeManager |
192.168.36.123 | hadoop3 | SecondryNameNode DataNode NodeManager |
分别在上述的节点上修改hosts文件,增加IP和主机名的映射关系:
# 打开hosts文件 vim /etc/hosts # 添加如下内容 192.168.36.121 hadoop1 192.168.36.122 hadoop2 192.168.36.123 hadoop3
另外,Hadoop
集群运行需要 Java
运行环境,所以,在各个节点上需要安装 JDK
!
集群搭建具体步骤
注意:以下步骤均在hadoop1节点上进行操作,特殊说明除外!
1、下载hadoop-3.1.3.tar.gz
hadoop官网下载:https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz
2、上传并解压
将下载好的 hadoop-3.1.3.tar.gz
上传到 hadoop1
虚拟机节点 /opt/module
目录下。
cd /opt/module # 解压 tar -zxvf hadoop-3.1.3.tar.gz # 修改目录名 mv hadoop-3.1.3 hadoop
3、配置path
变量
vim ~/.bashrc # 添加如下内容: export PATH=$PATH:/opt/module/hadoop/bin:/opt/module/hadoop/sbin # :wq! 保存退出后执行如下命令,使配置生效 source ~/.bashrc
4、修改配置文件
cd /opt/module/hadoop/etc/hadoop
4.1 修改文件hadoop-env.sh
vim hadoop-env.sh # 添加如下内容 export JAVA_HOME=/usr/java/jdk1.8.0_131
4.2 修改文件workers
vim workers # 将localhost去掉添加如下内容 hadoop1 hadoop2 hadoop3
注意:需要把所有数据节点的主机名写入该文件,每行一个,默认为
localhost
(即把本机作为数据节点),所以,在伪分布式配置时,就采用了这种默认的配置,使得节点既作为名称节点也作为数据节点。在进行分布式配置时,可以保留localhost
,让hadoop1
节点同时充当名称节点和数据节点,或者也可以删掉localhost
这行,让hadoop1
节点仅作为名称节点使用。
4.3 修改文件core-site.xml
<!--修改为如下内容:--> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/opt/module/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> </configuration>
4.4 修改文件hdfs-site.xml
dfs.replication
的值还是设置为 3
, 也就是说,一份数据保存三份副本,Hadoop
的分布式文件系统HDFS
一般都是采用冗余存储。
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop1:50090</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/module/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/module/hadoop/tmp/dfs/data</value> </property> </configuration>
4.5 修改文件mapred-site.xml
<!--修改为如下内容:--> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop1:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/opt/module/hadoop</value> </property> </configuration>
4.6 修改文件 yarn-site.xml
<!--修改为如下内容:--> <configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
5、把/opt/module/hadoop
复制到其他节点上
cd /opt/module rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 rm -r ./hadoop/logs/* # 删除日志文件 tar -zxcf hadoop.tar.gz ./hadoop # 先压缩再复制 scp ./hadoop.tar.gz hadoop2:/opt/module scp ./hadoop.tar.gz hadoop3:/opt/module
6、在其他节点上操作
cd /opt/module rm -r ./hadoop # 删掉旧的(如果存在) tar -zxvf hadoop.tar.gz
7、名称节点的格式化
首次启动Hadoop
集群时,需要先在hadoop1
节点执行名称节点的格式化(只需要执行这一次,后面再启动Hadoop
时,不要再次格式化名称节点)
hdfs namenode -format
8、启动Hadoop
集群
需要在hadoop1
节点上进行
# 启动hdfs start-dfs.sh # 启动yarn start-yarn.sh # 启动历史服务 mr-jobhistory-daemon.sh start historyserver
9、验证是否启动成功
通过命令jps
可以查看各个节点所启动的进程。如果已经正确启动,则在hadoop1
节点上可以看到NameNode
、ResourceManager
、和JobHistoryServer
以及DataNode
和NodeManager
进程
在其他两个节点可以看到DataNode
和NodeManager
进程,在hadoop3
节点上还可以看到SecondryNameNode
进程
缺少任一进程都表示出错。
10、查看运行实例
在执行过程中,可以在Linux
系统中打开浏览器,在地址栏输入http://hadoop1:8088/cluster
,通过Web
界面查看任务进度,在Web
界面点击 Tracking UI
这一列的History
连接,可以看到任务的运行信息。
11、关闭Hadoop
集群
关闭Hadoop
集群,需要在hadoop1
节点执行如下命令:
stop-yarn.sh stop-dfs.sh mr-jobhistory-daemon.sh stop historyserver
至此,就顺利完成了Hadoop集群搭建。