Hadoop2.8.1彻底分布式环境搭建

前言

 

本文搭建了一个由三节点(master、slave一、slave2)构成的Hadoop彻底分布式集群(区别单节点伪分布式集群),并经过Hadoop分布式计算的一个示例测试集群的正确性。java

本文集群三个节点基于三台虚拟机进行搭建,节点安装的操做系统为Centos7(yum源),Hadoop版本选取为2.8.0。做者也是初次搭建Hadoop集群,其间遇到了不少问题,故但愿经过该博客让读者避免。node

实验过程

一、基础集群的搭建

目的:得到一个能够互相通讯的三节点集群linux

下载并安装VMware WorkStation Pro(支持快照,方便对集群进行保存)下载地址,产品激活序列号网上自行查找。web

下载CentOS7镜像,下载地址apache

使用VMware安装master节点(稍后其余两个节点能够经过复制master节点的虚拟机文件建立)。vim

三个节点存储均为30G默认安装,master节点内存大小为2GB,双核,slave节点内存大小1GB,单核centos

二、集群网络配置

目的:为了使得集群既能互相之间进行通讯,又可以进行外网通讯,须要为节点添加两张网卡(能够在虚拟机启动的时候另外添加一张网卡,即网络适配器,也能够在节点建立以后,在VMware设置中添加)。浏览器

两张网卡上网方式均采用桥接模式,外网IP设置为自动获取(经过此网卡进行外网访问,配置应该按照你当前主机的上网方式进行合理配置,若是不与主机通讯的话能够采用NAT上网方式,这样选取默认配置就行),内网IP设置为静态IP。bash

本文中的集群网络环境配置以下:网络

master内网IP:192.168.1.100

slave1内网IP:192.168.1.101

slave2内网IP:192.168.1.102

设置完后,能够经过ping进行网络测试

注意事项:经过虚拟机文件复制,在VMware更名快速建立slave1和slave2后,可能会产生网卡MAC地址重复的问题,须要在VMware网卡设置中从新生成MAC,在虚拟机复制后须要更改内网网卡的IP。

每次虚拟机重启后,网卡可能没有自动启动,须要手动从新链接。

 三、集群SSH免密登录设置

目的:建立一个能够ssh免密登录的集群

3.1  建立hadoop用户

为三个节点分别建立相同的用户hadoop,并在之后的操做均在此用户下操做,操做以下:

$su -

#useradd -m hadoop

#passwd hadoop

为hadoop添加sudo权限

#visudo

在该行root ALL=(ALL) ALL下添加hadoop ALL=(ALL) ALL保存后退出,并切换回hadoop用户

#su hadoop

注意事项:三个节点的用户名必须相同,否则之后会对后面ssh及hadoop集群搭建产生巨大影响

3.2  hosts文件设置

为了避免直接使用IP,能够经过设置hosts文件达到ssh  slave1这样的的效果(三个节点设置相同)

$sudo vim /etc/hosts

在文件尾部添加以下行,保存后退出:

192.168.1.100  master

192.168.1.101  slave1

192.168.1.102  slave2

注意事项:不要在127.0.0.1后面添加主机名,若是加了master,会形成后面hadoop的一个很坑的问题,在slave节点应该解析出masterIP的时候解析出127.0.0.1,形成hadoop搭建彻底正确,可是系统显示可用节点一直为0。

3.3  hostname修改

centos7默认的hostname是localhost,为了方便将每一个节点hostname分别修改成master、slave一、slave2(如下以master节点为例)。

$sudo hostnamectl set-hostname master

重启terminal,而后查看:$hostname

3.3  ssh设置

设置master节点和两个slave节点之间的双向ssh免密通讯,下面以master节点ssh免密登录slave节点设置为例,进行ssh设置介绍(如下操做均在master机器上操做):

首先生成master的rsa密钥:$ssh-keygen -t rsa 

设置所有采用默认值进行回车

将生成的rsa追加写入受权文件:$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

给受权文件权限:$chmod 600  ~/.ssh/authorized_keys

进行本机ssh测试:$ssh maste r正常免密登录后全部的ssh第一次都须要密码,此后都不须要密码

将master上的authorized_keys传到slave1

sudo scp ~/.ssh/id_rsa.pub hadoop@slave1:~/   

登录到slave1操做:$ssh slave1输入密码登录  

$cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改authorized_keys权限:$chmod 600  ~/.ssh/authorized_keys

退出slave1:$exit

进行免密ssh登录测试:$ssh slave1

四、java安装

目的:hadoop是基于Java的,因此要安装配置Java环境(三个节点均须要操做,如下以master节点为例)

下载并安装:$sudo yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel

验证是否安装完成:$java -version

配置环境变量,修改~/.bashrc文件,添加行: export JAVA_HOME=/usr/lib/jvm/java-1.8.0

使环境变量生效:$source ~/.bashrc

五、Hadoop安装配置

目的:得到正确配置的彻底分布式Hadoop集群(如下操做均在master主机下操做)

安装前三台节点都须要须要关闭防火墙和selinux

$sudo systemctl stop firewalld.service

$sudo systemctl disable firewalld.service

$sudo vim /usr/sbin/sestatus 

将SELinux status参数设定为关闭状态

SELinux status:                 disabled

5.1  Hadoop安装

 首先在master节点进行hadoop安装配置,以后使用scp传到slave1和slave2。

下载Hadoop二进制源码至master,下载地址,并将其解压在~/ 主目录下

$tar -zxvf ~/hadoop-2.8.1.tar.gz -C ~/

$mv ~/hadoop-2.8.1/* ~/hadoop/

注意事项:hadoop有32位和64位之分,官网默认二进制安装文件是32位的,可是本文操做系统是64位,会在后面hadoop集群使用中产生一个warning可是不影响正常操做。

5.2  Hadoop的master节点配置

配置hadoop的配置文件core-site.xml  hdfs-site.xml  mapred-site.xml  yarn-site.xml  slaves(都在~/hadoop/etc/hadoop文件夹下)

$cd ~/hadoop/etc/hadoop

$vim core-site.xml其余文件相同,如下为配置文件内容:

1.core-site.xml  

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://master:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/home/hadoop/hadoop/tmp</value>
  </property>
</configuration>

2.hdfs-site.xml 

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

3.mapred-site.xml  

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

4.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>

5.slaves

slave1
slave2

5.3  Hadoop的其余节点配置

此步骤的全部操做仍然是在master节点上操做,以master节点在slave1节点上配置为例

复制hadoop文件至slave1:$scp -r ~/hadoop hadoop@slave1:~/

5.4  Hadoop环境变量配置

配置环境变量,修改~/.bashrc文件,添加行(每一个节点都须要此步操做,以master节点为例):

#hadoop environment vars
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 ~/.bashrc

六、Hadoop启动

格式化namenode:$hadoop namenode -format

启动hadoop:$start-all.sh

master节点查看启动状况:$jps

slave1节点查看启动状况:$jps

 

slave2节点查看启动状况:$jps

Web浏览器输入127.0.0.1:50070,查看管理界面

七、Hadoop集群测试

目的:验证当前hadoop集群正确安装配置

本次测试用例为利用MapReduce实现wordcount程序

生成文件testWordCount:$echo "My name is Xie PengCheng. This is a example program called WordCount, run by Xie PengCheng " >> testWordCount

建立hadoop文件夹wordCountInput:$hadoop fs -mkdir /wordCountInput

将文件testWordCount上传至wordCountInput文件夹:$hadoop fs -put testWordCount /wordCountInput

执行wordcount程序,并将结果放入wordCountOutput文件夹:$hadoop jar ~/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.1.jar wordcount /wordCountInput /wordCountOutput

注意事项:/wordCountOutput文件夹必须是没有建立过的文件夹

查看生成文件夹下的文件:$hadoop fs -ls /wordCountOutput

output/part-r-00000能够看到程序执行结果:$hadoop fs -cat /wordCountOutpart-r-00000

 

嗯嗯,做者就叫谢鹏程。

相关文章
相关标签/搜索