作为一个小小白,硬着头皮在安装部署这个分布式计算平台的过程中,虽然看到了很多博客,但是很多小坑也是令人十分头痛。这篇博客,从小小白的角度出发,来讲解如何在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地址不变,所以要进行重新生成。
第二步:集群网络配置
为了使得集群既能互相之间进行通信,又能够进行外网通信,在编辑->虚拟机网络编辑器中,网络适配器均采用桥接模式。桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。
本文中的集群网络环境配置如下(主要参考主机IP地址,在同一子段内,即192.168.xxx必须相同):
master内网IP:192.168.137.1
slave1内网IP:192.168.137.2
slave2内网IP:192.168.137.3
然后在终端输入
su root
输入密码之后,输入
vi /etc/sysconfig/network-scripts/ifcfg-ens33
其中,ens33是虚拟机网络名称,通过查看网络的中的identity中MAC地址即可得到。
并按照以下修改
若出现问题,则可参考博客[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
最后,查看防火墙状态,显示以下情况即可。
第五步:配置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
接下来,查看文件列表情况,如下所示即可。
将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
# 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
显示以下结果则成功。
第七步:安装hadoop
1.Hadoop下载安装
下载hadoop2.7.3,可参考博客[7]。
下载好后,在hadoop用户中,在home目录下,新建文件夹hadoop,并将安装包解压到该文件夹下。出现以下则安装成功
$ cd hadoop
$ ls -l
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
并进行如下配置:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/tmp</value>
</property>
</configuration>
4.配置文件系统
$ vi /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml
打开文件后,进行如下配置
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
</configuration>
5.配置yarn-site.xml核心文件
$ vi /home/hadoop/hadoop/etc/hadoop/yarn-site.xml
打开文件后,进行如下配置<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
</configuration>
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
打开文件后,进行如下配置
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
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环境变量将如下所示。在配置环境变量时,务必注意=之后不要有空格。
然后输入一下命令退出:
$ sbin/stop-all.sh
需要说明的是,Hadoop系统建议使用start-dfs.sh以及start-yarn.sh命令来开启hdfs和yarn。
3.验证
在master节点上输入jps,查看是否成功。
在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
然后,查看计数结果
$ hadoop fs -cat /output/part-r-00000
需要说明的是,这些文件夹以及都是在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