Hadoop 2.7.3 完全分布式集群系统搭建

时间:2021-08-27 08:22:26

hadoop完全分布式集群系统搭建过程记录

0 环境配置

仅是实验用途,这里在虚拟机上来搭建,仅有三个结点:master、node1、node2。使用的虚拟机和操作系统如下:

虚拟机:VMware Workstation 11.1
操作系统:Ubuntu 14.04 LTS 64位

1 准备工作

1.1 vmware中安装ubuntu系统

这里先安装一台,其他结点等安装好各种常用软件并且配置好系统环境之后,使用vmware的克隆功能,克隆即可。安装过程略

1.2 安装常用软件

  1. 修改软件源
  2. 安装vim、ssh、python的各种工具包(numpy、scipy、sklearn等)等
  3. 安装和配置JDK
  4. 安装和配置maven3(用于编译hadoop源码)

1.3 下载并编译hadoop 2.7.3

详细过程请点击:Ubuntu 14.04 64位编译hadoop 2.7.3

2 克隆虚拟机并修改主机名

2.1 克隆虚拟机

使用vm中的克隆功能,克隆上述配置好的ubuntu虚拟机,步骤:虚拟机–>管理–>克隆(关闭虚拟机再克隆)。

2.2 修改主机名

为了后续hadoop配置与管理,这里将三台虚拟机的主机名进行修改,分别为master、node1以及node2,三台虚拟机的ip分配情况如下:

192.168.220.140 master
192.168.220.141 node1
192.168.220.142 node2

以master为例,修改主机名步骤:
1. 修改/etc/hostname文件,将文件内容修改为master
2. 修改/etc/hosts文件将如下内容添加到该文件结尾:

192.168.220.140 master
192.168.220.141 node1
192.168.220.142 node2

特别注意:最好将127.0.1.1这一行注释掉,一定不要将它的主机名也修改为master(一不小心掉进了这个坑里)

在node1以及node2主机上的修改类似。

3 配置ssh,集群免密登录

3.1 免密登录localhost

在三台虚拟机中分别执行如下指令:

$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

执行上述指令之后,就可以实现使用ssh localhost指令免密登录localhost(也就是登录自己主机),第一次登录可能需要输入yes进行确认。

3.2 免密登录集群中其他主机

按照如下步骤进行设置:
1、master主机执行如下指令:

$ scp hadoop@node1:~/.ssh/id_rsa.pub ~/.ssh/node1
$ scp hadoop@node2:~/.ssh/id_rsa.pub ~/.ssh/node2
$ cat ~/.ssh/node1 ~/.ssh/node2 >> ~/.ssh/authorized_keys
$ rm ~/.ssh/node1 ~/.ssh/node2

执行上述指令之后,node1和node2主机就可以免密登录master主机了(第一次登录需要输入yes确定)

2、master主机上继续执行如下指令:

$ scp ~/.ssh/authorized_keys hadoop@node1:~/.ssh/
$ scp ~/.ssh/authorized_keys hadoop@node2:~/.ssh/

使用上述指令,用master下的authorized_keys文件替换node1和node2中的相应文件,这样这三个虚拟机结点就可以相互免密登录了。

4 修改hadoop配置文件

hadoop所有的配置文件都在hadoop根目录下的etc/hadoop/目录下。
需要注意的是,各个结点主机上的hadoop配置必须是一样的,可以一个一个的进行配置,也可以在master中配置好,然后使用scp将配置文件拷贝的其他node中

4.1 配置hadoop环境变量

hadoop守护进程的环境变量由配置文件目录下的hadoop-env.sh以及可选的mapred-env.shyarn-env.sh脚本来定制。
其中,必须的对JAVA_HOME变量进行配置(使用当前系统中安装好的jdk安装目录即可)(其他变量配置可选,可参考官方文档),配置方法如下:
将如下指令添加到配置文件目录下的hadoop-env.shmapred-env.sh以及yarn-env.sh文件中

export JAVA_HOME=/usr/local/jdk/jdk1.8.0_65

4.2 修改hadoop配置文件

这里需要进行配置的有:core-site.xmlhdfs-site.xmlyarn-site.xml以及mapred-site.xml
以下是我的配置实例,更多详细参数配置以及参数的解释请参看官方文档
1、配置core-site.xml

configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/zhoushuo/hadoop/tmp</value>
</property>
</configuration>

特别注意:最好对hadoop.tmp.dir进行配置,因为默认的是系统下的/tmp,主机重启其中的内容就会被删除,最好将其配置在一个空间较大的目录
2、配置hdfs-size.xml

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/zhoushuo/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/zhoushuo/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>

3、配置mapred-site.xml

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>

</configuration>

4、配置yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>

5 为hadoop添加系统环境变量

为hadoop运行配置系统环境变量,这里主要添加如下三个系统环境变量:
1. HADOOP_HOME
2. HADOOP_CONF_DIR
3. 添加hadoop/bin以及hadoop/sbin到PATH变量中
配置方法是在/etc/profile.d/目录下编辑文件hadoop-2.7.3.sh

#!/bin/bash
# environment for hadoop
# added by zs at 20161116
export HADOOP_HOME=/home/zhoushuo/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

特别说明:/etc/profile.d/以及/etc/profile配置环境变量的区别
1. 两个都是用于配置环境变量的,但是在/etc/profile.d/目录下的配置对包括root用户的所有用户均有效,而/etc/profile文件中的配置对root用户无效
2. 使用/etc/profile.d/配置环境变量更加方便,当新安装了例如java、maven等软件后,只需要在/etc/profile.d/目录下编写用于配置环境变量的shell脚本即可,比如上述编写的hadoop-2.7.3.sh文件,当不在需要这些配置环境变量时,只需删除对应的shell脚本即可。

6 启动hadoop集群

6.1 格式化HDFS

使用如下命令格式化HDFS

$ bin/hdfs namenode -format

当退出状态码为0,且出现successfully formatted提示时,表示格式化成功

6.2 启动hadoop集群

启动hadoop集群使用如下指令:

$ sbin/start-all.sh

而后使用jps查看namenode以及datanode上有如下进程被执行起来,表示hadoop集群启动成功:
namenode:

4225 SecondaryNameNode
4370 ResourceManager
4004 NameNode
4628 Jps

datanode:

8258 NodeManager
8119 DataNode
8429 Jps

7 提交mapreduce任务进行测试

按照如下步骤提交一个mapreduce任务:

$ bin/hdfs dfs -mkdir /tmp #在分布式文件系统中新建一个测试目录
$ bin/hdfs dfs -put ./README.txt /tmp #将本地的README.txt文件复制到分布式文件系统中
$ bin/hdfs dfs -ls /tmp/ #查看复制是否成功
Found 1 items
-rw-r--r-- 2 zhoushuo supergroup 1366 2016-11-16 17:13 /tmp/README.txt
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /tmp/README.txt /tmp-output #提交mapreduce任务

最后有如下输出

......
16/11/16 17:15:08 INFO mapreduce.Job: map 0% reduce 0%
16/11/16 17:15:17 INFO mapreduce.Job: map 100% reduce 0%
16/11/16 17:15:23 INFO mapreduce.Job: map 100% reduce 100%
16/11/16 17:15:24 INFO mapreduce.Job: Job job_1479287472190_0001 completed successfully
16/11/16 17:15:24 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=1836
FILE: Number of bytes written=240647
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=1464
HDFS: Number of bytes written=1306
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=6012
Total time spent by all reduces in occupied slots (ms)=4377
Total time spent by all map tasks (ms)=6012
Total time spent by all reduce tasks (ms)=4377
Total vcore-milliseconds taken by all map tasks=6012
Total vcore-milliseconds taken by all reduce tasks=4377
Total megabyte-milliseconds taken by all map tasks=6156288
Total megabyte-milliseconds taken by all reduce tasks=4482048
Map-Reduce Framework
Map input records=31
Map output records=179
Map output bytes=2055
Map output materialized bytes=1836
Input split bytes=98
Combine input records=179
Combine output records=131
Reduce input groups=131
Reduce shuffle bytes=1836
Reduce input records=131
Reduce output records=131
Spilled Records=262
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=159
CPU time spent (ms)=1130
Physical memory (bytes) snapshot=318713856
Virtual memory (bytes) snapshot=3774537728
Total committed heap usage (bytes)=170004480
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=1366
File Output Format Counters
Bytes Written=1306

使用如下命令可以只可查看分布式系统中保存的运行结果:

$ bin/hdfs dfs -cat /tmp-output/*

可以在浏览器中使用如下http地址查看集群系统的运行情况,如:

master:8088 #显示集群状态
master:50070 #查看与管理各个结点

到此,hadoop 2.7.3 完全分布式集群系统就搭建完成了。