Hadoop分布式集群搭建
一.分布式环境搭建之环境介绍
之前的博客我已经介绍了如何在单机上搭建伪分布式的Hadoop环境,而在实际情况中,肯定都是多机器多节点的分布式集群环境,所以本文将简单介绍一下如何在多台机器上搭建Hadoop的分布式环境。
2.修改三台服务器主机名为hadoop01、hadoop02、hadoop03
vim /etc/hostname
3.配置三台主机名与地址映射
在三台机器上编辑/etc/hosts
配置文件
vim /etc/hosts
三台机器重新启动 reboot。
二.安装集群
1.三台机子关闭防火墙
2.三台机子设置免密登陆ssh
[root@hadoop01 ~]# ssh-keygen -t rsa #每台机子执行这个命令生成密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:U+9QBLLSEZkUQfviVwLNXHHRwAlT3C3CXzZZHObn33A root@hadoop01
The key's randomart image is:
+---[RSA 2048]----+
| oO*.o**=X*|
| .oO oooBoB|
| . = = .o =o|
| . + o ...|
| S + o . E|
| . o = oo|
| . . . o|
| . |
| |
+----[SHA256]-----+
[root@hadoop01 ~]#
三台机子都执行如下代码
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop01
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop02
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop03
测试三台机子能否互相免密登陆
3.三台机子下载远程同步工具
# 远程同步工具
yum install -y rsync
systemctl start rsyncd # 启动服务
systemctl enable rsyncd # 开机自启
4.编辑分发文件脚本xsync
在hadoop01的/usr/local/bin路径下
vim xsync
脚本内容
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
#echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
#echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#echo iam=$user
#5 循环
for((host=2; host<=3; host++)); do
echo ------------------- hadoop0$host --------------
rsync -rvl $pdir/$fname $user@hadoop0$host:$pdir
done
添加执行权限
chmod 777 xsync
三.安装与配置
在hadoop01上安装,在分发到各个机子上。
1.解压hadoop与jdk
tar -zxvf jdk1.8.0_111.tar.gz -C /usr/local/
tar -zxvf hadoop-3.2.0.tar.gz -C /usr/local/
2.重命名
mv /usr/local/hadoop-3.2.0 /usr/local/hadoop
mv /usr/local/jdk1.8.0_111 /usr/local/jdk1.8
分发安装包
xsync jdk1.8
xsync hadoop
3.配置环境变量(三台都配)
cd ~
vim ~/.bashrc
在文件底部添加如下代码
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4.修改配置文件
修改配置文件core-site.xml
vim /usr/local/hadoop/etc/hadoop/core-site.xml
# 增加以下内容
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/tmp</value>
</property>
修改配置文件hadoop-env.sh
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
#配置Java路径
export JAVA_HOME=/usr/local/jdk1.8
修改配置文件hdfs-site.xml
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
# 增加以下内容
<property>
<name>dfs.namenode.http-address</name>
<value>192.168.150.10:50070</value>
</property>
<!-- 副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop02:50090</value>
</property>
修改配置文件yarn-env.sh
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
#配置Java路径
export JAVA_HOME=/usr/local/jdk1.8
修改配置文件yarn-site.xml
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
# 增加以下内容
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop02</value>
</property>
修改配置文件mapred-env.sh
vim /usr/local/hadoop/etc/hadoop/mapred-env.sh
# 配置Java
export JAVA_HOME=/usr/local/jdk1.8
修改配置文件mapred-site.xml
vim /usr/local/hadoop/etc/hadoop/mapred-site.xml
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
修改slaves文件 (这是Hadoop2.X的版本),在Hadoop3.X的版本中有workers文件,修改与slaves一样。
vim /usr/local/hadoop/etc/hadoop/slaves
# 修改为以下内容
hadoop01
hadoop02
hadoop03
5.分发配置文件
xsync /usr/local/hadoop/etc/hadoop/
6.第一次启动,需要格式化NameNode
如果不是第一次启动,注意格式化之前,一定要先停止上次启动的所有 namenode和datanode进程,然后再删除data和log数据
hdfs namenode -format
在 hadoop01上启动dfs
start-dfs.sh
在hadoop02上启动yarn
start-yarn.sh
如果报如下错误(好像只有Hadoop3.X的会报)
1.在start-dfs.sh和stop-dfs.sh的顶部添加如下代码
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
2.在start-yarn.sh和stop-yarn.sh顶部添加如下代码
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
再次启动
7.同步执行脚本
在/usr/local/bin文件下创建脚本文件xcall.sh
#! /bin/bash
for i in hadoop01 hadoop02 hadoop03
do
echo -------- $i ----------
ssh $i "$*"
done
授权
chmod 777 xcall.sh
启动后查看运行结果
到此,集群搭建完成。
8.Hadoop启动、停止脚本
在/usr/local/bin目录下创建hd.sh脚本文件
脚本代码
#! /bin/bash
case $1 in
"start"){
echo --------- hadoop01 ----------
ssh hadoop01 "/usr/local/hadoop/sbin/start-dfs.sh"
echo --------- hadoop02 ----------
ssh hadoop02 "/usr/local/hadoop/sbin/start-yarn.sh"
};;
"stop"){
echo --------- hadoop01 ----------
ssh hadoop01 "/usr/local/hadoop/sbin/stop-dfs.sh"
echo --------- hadoop02 ----------
ssh hadoop02 "/usr/local/hadoop/sbin/stop-yarn.sh"
};;
esac
授权
chmod 777 hd.sh
hd.sh start #启动集群
hd.sh stop #关闭集群