【大数据环境搭建(三)】在Centos7上搭建Hadoop集群(完全分布式)


集群配置

使用三节点,master、slave1、slave2,
jdk1.8.0_171
zookeeper-3.4.10
hadoop-2.7.3


一、基础配置

首先使用Xshell连接虚拟机,不知道怎么连接的同学可以参考文章底下的系列文章链接。

更改主机名

hostnamectl set-hostname master(在master执行)
hostnamectl set-hostname slave1(在slave1执行)
hostnamectl set-hostname slave2(在slave2执行)

更改完后输入bash进行生效

下载Vim(三台机器都执行)

yum -y install vim

配置hosts文件(三台机器都执行)

使用ifconfigip addr查看ip地址,接着将ip及其对应的主机名填入hosts文件中。

vim /etc/hosts

注意:使用tab间隔

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_大数据

无网络,无ip信息?

如果在正常开启网络后输入ip addr命令看不到本机ip时,

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_02

修改网卡的配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33

(网卡名ens33可能会不一样,按上图框框里面的网卡名为准)

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_hadoop_03

将ONBOOT从no改为yes后保存退出,

重启network服务
service network restart

最后再次输入ip addr即可获取ip信息。

关闭防火墙(三台机器都执行)

关闭防火墙:

systemctl stop firewalld

查看状态:

systemctl status firewalld

永久关闭防火墙:

systemctl disable firewalld

SSH免密(master节点执行)

生成 sshkey

ssh-keygen -t rsa

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_04

分发密钥

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_大数据_05

时间同步

下载ntp(三台机器都执行)

yum install -y ntp

修改ntp配置文件(master节点执行)

vim /etc/ntp.conf

在文件末尾添加:

server 	127.127.1.0
fudge	127.127.1.0	stratum	10

注意:使用tab间隔

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_06

重启ntp服务

systemctl restart ntpd

同步master时间(在slave1,slave2中执行)

ntpdate master

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_hadoop_07


centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_linux_08

二、JDK安装及配置(在master执行)

创建工作路径

mkdir /usr/java

解压JDK

tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/java/

注意:jdk文件名以自己下载的为准

配置环境变量

vim /etc/profile

在文件末尾添加:

export JAVA_HOME=/usr/java/jdk1.8.0_171
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

保存退出

分发jdk

scp -r /usr/java root@slave1:/usr/
scp -r /usr/java root@slave2:/usr/

分发/etc/profile文件

scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/

生效环境变量(三台机器都执行)

source /etc/profile

检验安装是否成功

java -version

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_大数据_09


能看到版本信息说明安装配置成功

三、zookeeper安装及配置(在master执行)

创建工作路径

mkdir /usr/zookeeper

解压zookeeper

tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/zookeeper

创建zkdata和zkdatalog

在zookeeper的目录中,创建zkdata和zkdatalog两个文件夹

cd /usr/zookeeper/zookeeper-3.4.10
mkdir zkdata zkdatalog

配置zoo.cfg文件

cd /usr/zookeeper/zookeeper-3.4.10/conf/
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg

修改如下:

dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata
dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_10

配置环境变量

vim /etc/profile

在文件末尾添加:

export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10 
export PATH=$PATH:$ZOOKEEPER_HOME/bin

分发zookeeper

scp -r /usr/zookeeper root@slave1:/usr/
scp -r /usr/zookeeper root@slave2:/usr/

创建myid文件

echo '1' > /usr/zookeeper/zookeeper-3.4.10/zkdata/myid(在master执行)
echo '2' > /usr/zookeeper/zookeeper-3.4.10/zkdata/myid(在slave1执行)
echo '3' > /usr/zookeeper/zookeeper-3.4.10/zkdata/myid(在slave2执行)

分发/etc/profile文件

scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/

生效环境变量(三台机器都执行)

source /etc/profile

检验安装是否成功

启动zookeeper(三台机器都执行)

zkServer.sh start

查看zookeeper状态(三台机器都执行)

zkServer.sh status

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_11


centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_linux_12


centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_centos6 配置hadoop集群_13


可以看到有follower和leader,说明安装配置成功。

四、hadoop安装及配置(在master执行)

创建工作路径

mkdir /usr/hadoop

解压hadoop

tar -zxvf hadoop-2.7.3.tar.gz -C /usr/hadoop

修改配置文件

文件列表如下:

hadoop-env.sh
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
master
slaves

进入配置文件所在目录:

cd /usr/hadoop/hadoop-2.7.3/etc/hadoop

hadoop-env.sh

vim hadoop-env.sh

修改java环境变量

export JAVA_HOME=/usr/java/jdk1.8.0_171

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_大数据_14

core-site.xml

vim core-site.xml

<configuration></configuration>中加入以下代码:

<property>
	<name>fs.default.name</name>
	<value>hdfs://master:9000</value>
</property>
<property>
	<name>hadoop.tmp.dir</name>
	<value>/usr/hadoop/hadoop-2.7.3/hdfs/tmp</value>
</property>

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_大数据_15

hdfs-site.xml

vim hdfs-site.xml

<configuration></configuration>中加入以下代码:

<property>
	<name>dfs.replication</name>
	<value>2</value>
 </property>
 <property>
	<name>dfs.namenode.name.dir</name>
	<value>file:/usr/hadoop/hadoop-2.7.3/hdfs/name</value>
	<final>true</final>
</property>
<property>
	<name>dfs.datanode.data.dir</name>
	<value>file:/usr/hadoop/hadoop-2.7.3/hdfs/data</value>
	<final>true</final>
</property>
<property>
	<name>dfs.namenode.secondary.http-address</name>
	<value>master:9001</value>
</property>
<property>
	<name>dfs.webhdfs.enabled</name>
	<value>true</value>
</property>
<property>
	<name>dfs.permissions</name>
	<value>false</value>
</property>

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_大数据_16

yarn-site.xml

vim yarn-site.xml

<configuration></configuration>中加入以下代码:

<property>
	<name>yarn.resourcemanager.address</name>
	<value>master:18040</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address</name>
	<value>master:18030</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>master:18088</value>
</property>
<property>
	<name>yarn.resourcemanager.resource-tracker.address</name>
	<value>master:18025</value>
</property>
<property>
	<name>yarn.resourcemanager.admin.address</name>
	<value>master:18141</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
	<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_linux_17

mapred-site.xml

mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

<configuration></configuration>中加入以下代码:

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

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_18

master

vim master

输入:

master

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_19

slaves

vim slaves

清空原来的localhost,重新输入:

slave1
slave2

分发hadoop

scp -r /usr/hadoop root@slave1:/usr/
scp -r /usr/hadoop root@slave2:/usr/

配置环境变量

vim /etc/profile

在文件末尾添加:

export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3
export CLASSPATH=$CLASSPATH:$HADOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

保存退出

分发/etc/profile文件

scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/

生效环境变量(三台机器都执行)

source /etc/profile

检验安装是否成功(在master执行)

格式化hadoop

注意:首次搭建集群时才需格式化,下次使用时无需再次格式化,切勿多次格式化!

hadoop namenode -format

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_centos6 配置hadoop集群_20


返回0时,说明格式化成功。

启动hadoop集群

start-all.sh

查看状态(三台机器都执行)

jps

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_linux_21


centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_分布式_22


centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_centos6 配置hadoop集群_23


当出现这些节点时,说明hadoop集群已经搭建成功了

五、运行hadoop官方实例–WordCount

本地创建数据文件

vim input.txt

输入一些单词,例如:

Hello World
Hello Hadoop
Hello zookeeper
I Love Hadoop
I Love BigData

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_linux_24

保存退出

上传input.txt到hdfs上

hdfs dfs -put input.txt /

运行wordcount

hadoop jar /usr/hadoop/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /input.txt /output

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_centos6 配置hadoop集群_25


可以看到已经成功了

打印结果

查看输出文件夹,其中的part-r-00000就是我们要的结果文件

hdfs dfs -ls -R /output

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_centos6 配置hadoop集群_26

hdfs dfs -cat /out*/part*

centos6 配置hadoop集群 centos7hadoop集群搭建完整教程_大数据_27


可以看到,词频统计运行成功了。

六、关闭集群

关闭hadoop

stop-all.sh(在master执行)

关闭zookeeper

zkServer.sh stop(三台机器都执行)

关闭虚拟机

shutdown -h now(三台机器都执行)

总结

需要注意的是,

1、以上所有路径如果要自定义的话,那么相同路径输入时应该保持一致。

2、xml中,一定要检查<configuration></configuration><property></property>是否是一一对应的,切勿多敲出一个或少敲一个。

3、切勿多次格式化hadoop。

4、如果格式化之后发现配置文件没配好的话,首先停掉hadoop,然后删除临时文件:

rm -rf /usr/hadoop/hadoop-2.7.3/hdfs

接着修改配置文件,最后重新格式化一遍。