集群部署规划(Hadoop3.1.3)
hadoop1 | hadoop2 | hadoop3 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
(注意:1、NameNode和SecondaryNameNode不要安装在同一台服务器。2、ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台服务器。)
1.配置/etc/hosts集群名称(三台节点)
10.34.80.51 hadoop1
10.34.80.52 hadoop2
10.34.80.53 hadoop3
2.配置ssh免密登录(hadoop1)
切换到~家目录 cd ~
显示隐藏文件 ls -al
进入.ssh,执行下面命令:
ssh-keygen -t rsa
按3次回车
将hadoop1的公钥拷贝到hadoop1(自己也需要拷贝) hadoop2 hadoop3
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3
hadoop2 hadoop3执行上述两步操作
3.编写集群分发脚本(hadoop1)
cd到/usr/local/bin/目录下,新建文件xsync,增加下面内容:
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop1 hadoop2 hadoop3
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
4.安装hadoop和jdk(hadoop1)
下载jdk和hadoop安装包,上传到/opt/module/software/下
执行tar -zxvf hadoop安装包名 -C /opt/module/
执行tar -zxvf jdk安装包名 -C /opt/module/
5.使用脚本分发到hadoop2、hadoop3
cd到/opt/module/下,执行命令:
xsync /hadoop-3.1.3
xsync /jdk1.8.0_212
6.配置jdk和hadoop环境变量(hadoop1)
/etc/profile.d/下新建文件my_env.sh,增加下面内容:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
使用脚本分发到hadoop2、hadoop3
xsync /etc/profile.d/my_env.sh
在所有节点上执行命令使环境变量生效:
source /etc/profile.d/my_env.sh
7.hadoop配置文件说明
hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
其中自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径下,用户可以根据项目需求重新进行修改配置。
8.修改自定义配置文件(hadoop1)
配置core-site.xml
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
配置hdfs-site.xml
<configuration>
<!-- nn web端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:9870</value>
</property>
<!-- 2nn web端访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop3:9868</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
配置yarn-site.xml
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceMnager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop2</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
配置mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
9.配置workers(hadoop1)
切换到目录hadoop3.1.3/etc/hadoop
vi workers
hadoop1
hadoop2
hadoop3
10.分发到hadoop2、hadoop3
切换到目录hadoop3.1.3/etc/下,执行命令:
xsync hadoop
11.启动集群(hadoop1)
(注意:如果集群是第一次启动,需要在hadoop1节点格式化NameNode,格式化NameNode会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
切到hadoop3.1.3目录执行下面命令:
hdfs namenode -format
启动集群命令:
sbin/start-dfs.sh
启动历史服务器命令:
mapred --daemon start historyserver
12.启动yarn(hadoop2)
切到hadoop3.1.3目录执行下面命令:
sbin/start-yarn.sh
13.查看hadoop集群启动情况
1、通过jps命令查看
hadoop1节点:NameNode、NodeManager、DataNode
hadoop2节点:ResourceManager、NodeManager、DataNode
hadoop3节点:SecondaryNameNode、NodeManager、DataNode
2、通过前端界面查看
访问yarn界面:http://hadoop2:8088/
访问hdfs界面:http://hadoop1:9870/
14.hadoop集群启停脚本
cd到/usr/local/bin/目录下,新建hdp.sh
#! /bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo "==================启动hadoop集群==================="
echo "------------------启动hdfs------------------"
ssh hadoop1 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo "------------------启动yarn------------------"
ssh hadoop2 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
;;
"stop")
echo "==================关闭hadoop集群=================="
echo "------------------关闭yarn------------------"
ssh hadoop2 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo "------------------关闭hadoop----------------"
ssh hadoop1 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
启动hadoop集群:hdp.sh start
停止hadoop集群:hdp.sh stop