目录
hadoop全分布式环境搭建
0. 环境介绍
CentOS7.4 + hadoop-2.7.6 + jdk1.8
1. 角色介绍
主机0: master ==> NameNode,SecondaryNameNode,ResourceManager
主机1-3: slave{1,2,3} ==> DataNode, NodeManager
2. 环境准备
2.0 主机环境:
只需要准备一台主机0: master, 配置好之后克隆三台即可,以下操作均在master上,创建一个用户hadoop用户,hadoop环境均安装到hadoop用户家目录下;
2.1 网络配置(用root操作):
这里可以采用桥接或者NAT或者HOST_ONLY,需要固定IP,我这里采用HOST_ONLY模式,四台机器都在VMNET1下;(具体IP无所谓,但是需要四台机器在同一个网段能通信)
(1) 在/etc/hosts中配置好映射关系:
[hadoop@master data]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.20.60 master
10.10.20.61 slave1
10.10.20.62 slave2
10.10.20.63 slave3
(2) systemctl set-hostname master # 设置主机名
2.2 关闭防火墙(用root操作)
systemctl stop firewalld; systemctl disable firewalld;
2.3 hadoop运行环境准备(用hadoop用户操作)
在/home/hadoop/ #家目录下
(1) 创建环境文件夹
mkdir app software; # app 存放安装的软件 software存放压缩包 mkdir app/tmp; # hdfs的文件数据存放
(2) 上传相关软件包到 software目录下
[hadoop@master ~]$ cd software/
[hadoop@master software]$ ls
hadoop-2.7.6.tar.gz jdk-8u151-linux-x64.tar.gz
(3) 解压软件到app目录:
tar xvf jdk-8u151-linux-x64.tar.gz -C../app/
tar xvf hadoop-2.7.6.tar.gz -C../app/
(4) 配置环境变量JAVA_HOME,HADOOP_HOME
vim ~/.bash_profile 添加如下字段
JAVA_HOME=/home/hadoop/app/jdk1.8.0_151
HADOOP_HOME=/home/hadoop/app/hadoop-2.7.6
PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
export PATH
(5) 测试配置
source ~/.bash_profile
java -version #查看java版本
hadoop version #查看hadoop版本
结果如下:
[hadoop@master software]$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
[hadoop@master software]$ hadoop version
Hadoop 2.7.6
Subversion https://shv@git-wip-us.apache.org/repos/asf/hadoop.git -r 085099c66cf28be31604560c376fa282e69282b8
Compiled by kshvachk on 2018-04-18T01:33Z
Compiled with protoc 2.5.0
From source with checksum 71e2695531cb3360ab74598755d036
This command was run using /home/hadoop/app/hadoop-2.7.6/share/hadoop/common/hadoop-common-2.7.6.jar
[hadoop@master software]$
(6) 如果hadoop version显示JAVA_HOME不存在,则需要在hadoop=env.sh中配置JAVA_HOME
vim ~/app/hadoop/hadoop-2.7.6/etc/hadoop/hadoop-env.sh
#--- 在hadoop-env.sh中
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_151
配置好后hadoop version可用
3. hadoop集群相关xml配置
# 进入到配置文件所在的文件夹
cd ~/app/hadoop/hadoop-2.7.6/etc/hadoop/
cat hdfs-site.xml
#-----------------------------------------
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
#--------------------------------------------
cat 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/hadoop/app/tmp</value>
</property>
</configuration>
#-----------------------------------------
cat 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>
</configuration>
#-----------------------------------------
cat mapred-site.xml
#-----------------------------------------
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
#-----------------------------------------
cat slaves
#-----------------------------------------
slave1
slave2
slave3
#-----------------------------------------
(7) 配置完上述五个文件后,OK,可以开始克隆虚拟机了;
克隆完成后,按照前文约定修改每台机器的IP以及主机名(用root用户操作)
[hadoop@master data]$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.10.20.60 master
10.10.20.61 slave1
10.10.20.62 slave2
10.10.20.63 slave3
这里我使用nmtui命令修改IP,使用hostnamectl 修改主机名
4. 初始化文件系统与测试
(1) 确保四台机器能相互通信上之后,做免密登陆处理
在master机器上用hadoop用户登陆操作:
ssh-keygen # 此处连续回车到结束 # 拷贝公钥到从机上, 过程中需要输入yes和密码
ssh-copy-id slave1
ssh-copy-id slave2
ssh-copy-id slave3
(2) 在master机器上格式化并启动集群
# 初始化文件系统,注意不要多次格式化
hadoop namenode -format
# 启动集群
# 启动DataNode NameNode SecondaryNameNode
$HADOOP_HOME/sbin/start-dfs.sh
# 启动ResourceManager,NodeManager
$HADOOP_HOME/sbin/start-yarn.sh
上述步骤如果出错需要去根据打印查看日志信息
查看数据:
Master机器上
[hadoop@master hadoop]$ jps
80329 Jps
8121 NameNode
8618 SecondaryNameNode
8940 ResourceManager
slave1机器上
[hadoop@slave1 ~]$ jps
75050 Jps
2540 NodeManager
1949 DataNode
slave2,slave3的信息同slave1
5. 运行一个测试用例
# 1. 先写词频统计源文件
cat test.txt
#------
hello world hello
hello BigData Hadoop
#------
# 2. 文件从本地拷贝到HDFS上
hadoop fs -put test.txt /
# 3. 运行词频统计任务
hadoop jar ~/app/hadoop-2.7.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /test.txt /output/wc
# 4. 最后去output下查看运行结果
hadoop fs -ls /output/