集群设置文档
单节点集群
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html#Fully-Distributed_Operation
全分部式
https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html#Purpose
Hadoop组成部分
1.HDFS
2.YARN
3.MapReduce
集群文件分发脚本
echo $PATH
环境变量目录下的脚本可全局访问
赋予执行权限命令: chmod 777 $文件名
#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2.遍)历集群所有机器
for host in hadoop102 hadoop103 hadoop104
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
SHH免密登录配置
原理
#创建密钥
进入用户目录
cd /home/用户名/.ssh
#生成公钥和私钥
ssh-keygen -t rsa
然后连续三个回车,生成公钥(id_rsa.pub)和私钥(id_rsa)
#给需要无密登录的服务器发送公钥
ssh-copy-id $服务器地址
输入密码
集群规划
环境变量
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_271
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
一.HDFS概述
1.NameNode 目录,索引,记录文件块存储位置,存储元数据,文件名,目录结构,属性
2.DataNode 数据具体存放位置,存储文件块数据,和块数据的校验和
3.Secondary NameNode(2NN) NameNode的秘书,辅助NameNode工作,NameNode元数据备份
二.YARN 架构概述(资源管理:CPU,内存等)
1.ResourceManage(RM) 集群资源管理
2.NodeManage(NM) 单节点资源管理
3.ApplicationMaster(AM) 单个任务管理
4.Container:容器,相当于一台独立服务器,里面封装了任务运行所需要的资源,如内存,CPU,磁盘,网络等
三.集群配置
默认配置文件
1.核心配置文件
core-size.xml
<configuration>
<!--nameNode地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!--hadoop数据存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.3.1/data</value>
</property>
<!--配置HDFS网页登录使用的静态用户,会影响网页上操作文件删除的权限,不配置无删除权限-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
2.hdfs配置文件
hdfs-site.xml
<configuration>
<!--nameNode web访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!--2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
3.YARN配置文件
yarn-site.xml
<configuration>
<!--指定MR走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定resourceManage地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!--环境变量继承,3.2以上的版本不需要 HADOOP_MAPRED_HOME-->
<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>
4.MapReduce配置文件
mapred-site.xml
<configuration>
<!--指定MapReduce 程序运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
四.启动集群
1.格式化NameNoded
hdfs namenode -format
如果集群是第一次启动,需要在 hadoop102节点格式化 NameNode
注意:格式NameNode,会产生新的集群id,导致NameNode,和 DataNode的集群id不一致,集群找到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停namenode和 datanode进程,并且要删除所有机器的data和 logs目录,然后再进行格式
2.启动停止hdfs
cd /opt/module/hadoop-3.3.1/sbin
#启动
start-hdfs.sh
#停止
stop-hdfs.sh
3.启动停止yarn
注意在配置ResourceManage的节点(hadoop103) 启动yarn
cd /opt/module/hadoop-3.3.1/sbin
#启动
start-yarn.sh
#停止
stop-yarn.sh
五.集群测试
1.上传文件到集群
上传文件
#创建目录 (根目录仓建 input文件夹)
hadoop fs -mkdir /input
#上传文件
hadoop fs -put $文件 $路径
例
hadoop fs -put word.txt /input
word.txt
liwei zhangsan
zhangsan liwei
lisi
lisi
wangwu
大文件被分片,分片后的文件进行整合
#恢复文件
[root@hadoop102 subdir0]# cat blk_1073741826 >> tmp.tar.gz
[root@hadoop102 subdir0]# cat blk_1073741827 >> tmp.tar.gz
#解压文件
tar -zxvf tmp.tar.gz
2.执行wordcount程序
计算word.txt名字出现的次数
#命令
hadoop jar $执行程序路径 $程序入口名称 $输入路径 $输出路径
例:
hadoop jar /opt/module/hadoop-3.3.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input/word.txt /output
3.配置历史服务器
- 1 配置mapred-site.xml
<configuration>
<!--指定MapReduce 程序运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--MapReduce JobHistory 服务器主机:端口(内部通信)-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!--MapReduce JobHistory UI服务器主机:端口(UI访问)-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
3.2 分发配置文件,并重启yarn,启动服务在102上
$HADOOP_HOME/bin/mapred --daemon start historyserver
4.配置日志聚集
4.1.配置yarn-site.xml
日志聚集服务器(发现3.3.1版本不用配置也可以)
<!--开启日志聚集功能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--设置日志聚集服务器(发现3.3.1版本不用配置也可以)-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!--设置日志保留时间为7天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
4.2 同步配置文件,重启historyserver和yarn即可
5.常用端口号
6.集群时间同步
7.常用脚本
myhadoop.sh stop/start
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input. . ."
exit ;
fi
case $1 in
"start")
echo " =============启动集群================"
echo " ---------—-----启动hdfs —-—-——--——--——-"
ssh hadoop102 "/opt/module/hadoop-3.3.1/sbin/start-dfs.sh"
echo "—————----————-—-启动yarn----------------"
ssh hadoop103 "/opt/module/hadoop-3.3.1/sbin/start-yarn.sh"
echo " ------—--——----启动historyserver -———-——--------"
ssh hadoop102 "/opt/module/hadoop-3.3.1/bin/mapred --daemon start historyserver"
;;
"stop")
echo "=============关闭集群================"
echo "——-—------—----关闭historyserver ——-—------—----"
ssh hadoop102 "/opt/module/hadoop-3.3.1/bin/mapred --daemon stop historyserver"
echo " ---------------关闭yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.3.1/sbin/stop-yarn.sh"
echo " ---------------关闭HDFS ---------------"
ssh hadoop102 "/opt/module/hadoop-3.3.1/sbin/stop-dfs.sh"
;;
*)
echo " Input Arqs Error. . ."
;;
esac
jpsall.sh
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ============= $host =================
ssh $host jps
done