在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)

作为一个小小白,硬着头皮在安装部署这个分布式计算平台的过程中,虽然看到了很多博客,但是很多小坑也是令人十分头痛。这篇博客,从小小白的角度出发,来讲解如何在CentOS7中,来部署安装三个节点(一主两从)的完全分布的Hadoop2.7.3。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


第一步:安装虚拟机以及Linux系统 Hadoop官网上推荐使用Linux系统作为开发测试和生产环境的平台。
因此,首先安装VMware软件并进行破解,直接搜索下载破解即可。
其次,下载Linux镜像系统,一般有Ubuntu和CentOS,笔者使用的是CentOS7。博客[1]提供了对各类版本的说明,直接在官网下载对应版本即可,笔者使用的是CenOS7-x86_64-DVD-1804.iso。在安装过程中,会有很多选项,博客[2]给出了一个很好的参考。笔者使用的是GOME。在Master主机上完成以上操作。并进行克隆操作,保存到移动硬盘或U盘,以对Slave节点上进行配置。
接下来,在Slave节点上安装VMware,然后将克隆好的直接导入。此时,要注意的是,由于克隆操作MAC地址不变,所以要进行重新生成。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


第二步:集群网络配置 为了使得集群既能互相之间进行通信,又能够进行外网通信,在编辑->虚拟机网络编辑器中,网络适配器均采用桥接模式。桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


本文中的集群网络环境配置如下(主要参考主机IP地址,在同一子段内,即192.168.xxx必须相同):
master内网IP:192.168.137.1
slave1内网IP:192.168.137.2
slave2内网IP:192.168.137.3
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


然后在终端输入

su root
输入密码之后,输入
vi /etc/sysconfig/network-scripts/ifcfg-ens33
其中,ens33是虚拟机网络名称,通过查看网络的中的identity中MAC地址即可得到。
并按照以下修改
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


若出现问题,则可参考博客[3]进行修改。然后在终端调用ifconfig命令,进行查看。

设置完后,在终端Terminal通过ping对应的IP地址进行网络测试,若有返回值则网络设置成功。
第三步:创建Hadoop用户组 这一步是为了新建一个用户,专门用于Hadoop平台的操作,以免对整个虚拟机造成影响。是可选择的。在三个节点下,都创建同样的用户,是为了下一步的免秘钥登陆等操作做铺垫。
在root权限下进行以下操作。
$su root

#useradd -m hadoop
#passwd hadoop
为hadoop添加sudo权限
#visudo
在该行root ALL=(ALL) ALL下添加hadoop ALL=(ALL) ALL保存后退出,并切换回hadoop用户
第四步:配置Host文件,防火墙等 在root权限下,进行以下操作。
1.修改计算机名,方便识别 centos7默认的hostname是localhost,为了方便将每个节点hostname分别修改为master、slave0、slave1
vi /etc/hostname
在文件中删除原有的,并输入对应主机的名称master、slave0、slave1即可。

2.能使用计算机名进行通信,而不再通过IP地址 # vi /etc/hosts
在文件下添加以下代码:
192.169.137.1 master
192.168.137.2 slave0
192.168.137.3 slave1
保存即可

3.关闭防火墙 由于大数据平台中各节点之间通信频繁,且是内部网络,因此一般要关闭防火墙,以避免数据包被过滤和限制。
在root权限下,
查看防火墙的状态;

# systemctl status firewalld.service
关闭防火墙

# systemctl stop firewalld.service
终止防火墙服务,以防重启后会再次开启
# systemctl disable firewalld.service

最后,查看防火墙状态,显示以下情况即可。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


第五步:配置SSH免密钥登陆 集群中,各节点之间通信时,需要确认用户身份,规模较大时,会大大降低工作效率。因此,要进行Master和Slave进行双向的免密钥登陆配置。下面,以master登陆slave0为例。
第四步的操作都是在root权限下,本步是在hadoop用户下,要进行切换。
1.master节点上 # su hadoop
$ ssh-keygen -t rsa ,然后一路回车。之后,对生成的密钥文件进行查看。
$ cd .ssh
$ ls -l
之后,将其中的公钥文件追加写入授权文件,并给授权文件权限:
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600~/.ssh/authorized_keys
接下来,查看文件列表情况,如下所示即可。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


将master上的authorized_keys传到slave0,完成后,master节点的工作将完成。
$ scp ~/.ssh/authorized_keys hadoop@slave0:~/

2.slave0节点 对其进行ssh配置,同样需要在hadoop用户下。
$ ssh-keygen -t rsa 这一步是在master节点向slave9发送文件之前完成的
然后将发送文件拷贝到slave0节点的对应文件夹中进行替换
$ mv authorized_keys ~/.ssh/
最后,修改authorized_keys权限
$ chmod 600 authorized_keys

以上,完成了对slave0节点上的SSH配置。
3.验证
通过master对slave0免密钥登陆验证,在master节点上,切换到hadoop用户
$ ssh slave0
第一次使用时需要输入密码,退出 $ exit后,再次登陆验证即可。
第六步:安装JDK
hadoop是基于Java的,所以要安装配置Java环境(三个节点均需要操作,以下以master节点为例)。
1.下载安装
由于hadoop本身带有OpenJDK,所以要先卸载。卸载过程可参考博客[5]。
卸载之后,在官网上进行jdk-7u79-linux-x64.tar.gz的下载,可参考博客[6]进行。
之后,在hadoop用户下,在home目录下新建一个resource文件夹,将下载到的jdk安装包放到里面。
打开终端,切换到root权限,在usr目录下创建java文件夹,并将jdk移动到该文件夹下
# mkdir /usr/java
# mv /home/hadoop/resource/jdk-7u79-linux-x64.tar.gz /usr/java
# cd /usr/java
【在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)】# tar -zxvf jdk-7u79-linux-x64.tar.gz
回车后进行解压缩。

2.环境配置
安装好后需要对java环境进行配置。在root权限下进行以下操作:
# vi /home/hadoop/.bash_profile
在打开文件中,在文件末尾加入以下命令:
export JAVA_HOME=/usr/java/jdk1.7.0_79/
export PATH=$JAVA_HOME/bin:$$PATH
保存退出后,执行
# source .bash_profile
为验证是否配置成功,输入
# java -version
显示以下结果则成功。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


第七步:安装hadoop
1.Hadoop下载安装 下载hadoop2.7.3,可参考博客[7]。
下载好后,在hadoop用户中,在home目录下,新建文件夹hadoop,并将安装包解压到该文件夹下。出现以下则安装成功
$ cd hadoop
$ ls -l
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


2.配置环境变量 Hadoop的配置文件是hadoop-env.sh,位于~/hadoop/etc/hadoop/,可以通过文件夹一层一层地找,然后进行准确修改

$ vi /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh
在文件中,配置JDK安装路径:export JAVA_HOME=/usr/java/jdk1.7.0_79/
保存退出后,对yarn进行环境配置。
$ vi /home/hadoop/hadoop/etc/hadoop/yarn-env.sh
在文件中,配置JDK安装路径:export JAVA_HOME=/usr/java/jdk1.7.0_79/
3.配置核心组件
hadoop在工作时,会产生临时数据等,因此要有一个地方能够存储这些文件。
首先,在hadoop文件夹下新建两个文件temp和hdfs,并在hdfs文件夹下新建name、tmp和data
$ mkdir temp
$ mkdir hdfs
$ cd hdfs
$ mkdir name
$ mkdir data
$ mkdir tmp

然后配置核心文件core-site.xml文件,在/usr/hadoop/etc/hadoop”目录下。这里配置的是HDFS master(即namenode)的地址和端口号。

$ vi /home/hadoop/hadoop/etc/hadoop/core-site.xml

并进行如下配置:


fs.default.name
hdfs://master:9000


hadoop.tmp.dir
/home/hadoop/hadoop/tmp



4.配置文件系统 $ vi /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml
打开文件后,进行如下配置



dfs.replication
2


dfs.namenode.name.dir
/home/hadoop/hadoop/hdfs/name


dfs.datanode.data.dir
/home/hadoop/hadoop/hdfs/data


dfs.namenode.secondary.http-address
master:9001



5.配置yarn-site.xml核心文件 $ vi /home/hadoop/hadoop/etc/hadoop/yarn-site.xml
打开文件后,进行如下配置


yarn.resourcemanager.hostname
master


yarn.nodemanager.aux-services
mapreduce_shuffle


yarn.log-aggregation-enable
true


yarn.log-aggregation.retain-seconds
604800



6.配置mapred-site.xml核心文件 在配置这个文件时,系统中不包含该文件,而是包含一个mapred-site.xml.template文件。将该文件复制并改名
$ cp /home/hadoop/hadoop/etc/hadoop/mapred-site.xml.template ~/home/hadoop/hadoop/etc/hadoop/mapred-site.xml
然后对文件进行编辑

$ vi /home/hadoop/hadoop/etc/hadoop/mapred-site.xml
打开文件后,进行如下配置


mapreduce.framework.name
yarn




7.配置slaves文件 该文件给出了Hadoop集群中的slave列表,不在列表内的节点便不会被视为计算节点。
$ vi /home/hadoop/hadoop/etc/hadoop/slaves
然后输入
slave0
slave1
8.对slave节点进行配置
对slave节点,通过复制master节点的即可。在master节点的hadoop用户下进行:
$ scp -r /home/hadoop/hadoop hadoop@slave0:~/
9.配置Hadoop集群环境变量 以下操作,对所有节点均要实现。在hadoop用户中,对环境变量进行配置
$ vi /home/hadoop.bash_profile
打开文件后,在文件尾添加以下内容:
#HADOOP

export HADOOP_HOME=/home/hadoop/hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
保存退出后,执行以下命令使配置生效。
$ source /home/hadoop/.bash_profile

第八步:启动Hadoop集群 1.格式化文件系统 在hadoop用户下,执行以下命令:
$ hdfs namenode -format
2.启动hadoop 在hadoop用户下,进入到hadoop安装目录,并执行以下命令
$ cd ~/hadoop
$ sbin/start-all.sh
输入yes之后,则可以启动。若提示,unable to load the native library
这是因为这是32位的native library,可以直接下载一个64位的进行替换,或者在编译的时候编译成64位。此外还需要修改环境变量。最后hadoop环境变量将如下所示。在配置环境变量时,务必注意=之后不要有空格。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


然后输入一下命令退出:
$ sbin/stop-all.sh
需要说明的是,Hadoop系统建议使用start-dfs.sh以及start-yarn.sh命令来开启hdfs和yarn。
3.验证 在master节点上输入jps,查看是否成功。
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


在slave节点上输入jps,查看是否成功。
另外,可以在浏览器中,
输入http://master:50070/来查看系统状态。
输入http://master:18088/来查看yarn状态。

第九步:程序测试
hadoop安装包中自带很多程序示例,其中包括单词计数,以空格为分隔符。
为进行测试,首先创建测试文件test。以下测试均在hadoop集群启动后进行。在输入命令时,务必注意空格的使用
$ echo "i am a boy . i love China . i love BMW-DSC" >> test

在hdfs文件系统中,创建input文件夹
$ hadoop fs -mkdir /input
然后将test文件放入hafs系统中
$ hadoop fs -put test /input
之后,调用wordcount函数进行单词计数
$ hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input /output
至此,完成计数,且将结果保存在了output文件夹中。
然后查看output文件夹中都有什么结果。
$ hadoop fs -ls /output
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


然后,查看计数结果
$ hadoop fs -cat /output/part-r-00000
在CentOS7上实现Hadoop2.7.3完全分布式的安装部署(小白版)
文章图片


需要说明的是,这些文件夹以及都是在hdfs上,因此无法在本地磁盘中找到。且在程序运行前,结果文件夹output必须是不存在的。若文件需要更改,然后重新运行程序,则需要将input和output都删除,重新生成。或者新建两个对应的文件夹。
删除输入文件夹:$ hadoop fs -rm -r /input
删除输出文件夹:$ hadoop fs -rm -r /output
----------------------------------------------------------------------------------------------------------------------------------

本篇博客参考了诸多博客以及书籍,其中需要特别感谢的是:
https://www.cnblogs.com/pcxie/p/7747317.html
https://blog.csdn.net/happy_wu/article/details/70240014

    推荐阅读