目录
三大模式:
完全分布式搭建:
分析:
编写集群分发脚本xsync:
1.scp(secure copy)安全拷贝:
2.rsync远程同步工具:
3.xsync集群分发脚本:
SSH无密登录配置:
配置SSH:
1.基本语法:
2.ssh连接时出现Host key verification failed的解决办法:
无密钥配置:
1.免密钥登录原理:
2.生成公钥和私钥:
3.将公钥拷贝到需要免密码登录的目标机器:
集群配置:
集群部署规划:
注意:
配置文件说明:
默认配置文件:
自定义配置文件:
配置集群:
核心配置文件:
HDFS配置文件:
YARN配置文件:
MapReduce配置文件:
在集群上分发配置好的Hadoop配置文件:
查看分发配置好的Hadoop文件:
群起集群:
配置workers
启动集群:
测试集群:
上传文件到集群:
上传文件后查看文件放在什么位置:
拼接:
下载:
执行:
集群启动/停止方式总结:
重新格式化集群操作:
配置历史服务器:
配置mapred-site.xml:
在hadoop02启动历史服务器:
配置日志的聚集:
配置yarn-site.xml
集群时间同步:
集群启动/停止脚本:
问题解决:
查看三台服务器Java进程:jpsall脚本
常用端口说明:
官网:Apache Hadoop
scp定义:
scp可以实现服务器和服务器之间恶的数据拷贝(from server1 to server2)
scp基本语法:
scp -r $pdir/$fname $user@host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
scp -r jdk1.8.0_212/ [email protected]:/opt/module/
scp -r [email protected]:/opt/module/hadoop-3.1.3 ./
scp -r root@hadoop02:/opt/module/* root@hadoop04:/opt/module/
基本语法:
rsync -av $pdir/$fname $user@host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
选项 |
功能 |
-a |
递归拷贝 |
-v |
显示复制过程 |
xsunc 要同步的文件名
进入/root/bin
目录:
在/root/bin
目录下创建脚本
脚本实现:
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop02 hadoop03 hadoop04
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
赋予脚本可执行权限:
chmod 777 xsync
分发脚本文件:
xsync bin/
分发配置文件:(同步环境变量)
xsync /etc/profile.d/my_env.sh
:
sudo ./bin/xsync /etc/profile.d/my_env.sh
source /etc/profile
:刷新资源
ssh 另外一台电脑的ip地址
Host key verification failed
的解决办法:The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established.
RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.
Are you sure you want to continue connecting (yes/no)?
直接输入yes
进入root家目录:cd /root
查看所有文件(包括隐藏文件):ll -a
进入cd .ssh
目录
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id rsa
(私钥)、id rsa.pub
(公钥)
ssh-copy-id hadoop02
ssh-copy-id hadoop03
ssh-copy-id hadoop04
注意:使用root账户(不同的账户)需要重新配置免密码登录
配置完成后,执行xsync
命令时,不需要再次输入密码:
Hadoop02 |
Hadoop03 |
Hadoop04 |
|
HDFS |
NameNode、DataNode |
DataNode |
SecondaryNameNode、DataNode |
YARN |
NodeManager |
ResourceManager、NodeManager |
NodeManager |
Hadoop配置文件分为两大类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改响应的属性。
文件名 |
文件存放在Hadoop的jar包中位置 |
【core-default.xml】 |
hadoop-common-3.1.3.jar/core-default.xml |
【hdfs-default.xml】 |
hadoop-hdfs-3.1.3.jar/hdfs-defalut.xml |
【yarn-default,xml】 |
hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
【mapred-default.xml】 |
hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop
这个路径上,用户可以根据项目需求重新进行修改配置。
配置core-site.xml
cd $HADOOP_HOME/etc/hadoop
vim core-site.xml
fs.defaultFS
hdfs://hadoop02:8020
hadoop.tmp.dir
/opt/module/hadoop-3.1.3/data
hadoop.proxyuser.atguigu.hosts
*
hadoop.proxyuser.atguigu.groups
*
hadoop.http.staticuser.user
atguigu
配置hdfs-site.xml
vim hdfs-site.xml
dfs.namenode.secondary.http-address
hadoop02:9870
dfs.namenode.secondary.http-address
hadoop04:9868
配置yarn-site.xml
vim yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop03
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
yarn.scheduler.minimum-allocation-mb
512
yarn.scheduler.maximum-allocation-mb
4096
yarn.nodemanager.resource.memory-mb
4096
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
配置Mapred-site.xml
vim mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hadoop02:10020
mapreduce.jobhistory.webapp.address
hadoop02:19888
/opt/module/hadoop-3.1.3/etc
:进入hadoop配置文件目录
xsync hadoop/
:分发文件
cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
注意:在编写配置这个配置文件时,不能有空格,或者空行!!!
hadoop02
hadoop03
hadoop04
cd /opt/module/hadoop-3.1.3/etc/hadoop
xsync workers
:分发配置文件,同步所有节点的配置文件
如果集群是第一次启动,需要在hadoop02节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止nameNode和dataNode进程,并且要删除所有机器的data和logs目录,然后再进行格式化)
/opt/module/hadoop-3.1.3
:进入hadoop目录
hdfs namenode -format
:格式化操作
格式化完成后会多出data、logs目录:
/opt/module/hadoop-3.1.3/sbin
sbin/star-dfs.sh
:启动HDFS
问题解决:
启动出现以下问题
[root@localhost sbin]# start-all.sh
Starting namenodes on [hadoop]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
2018-07-16 05:45:04,628 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.
vim /etc/profile
:进入配置文件
加入以下内容:
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
source /etc/profile
:刷新配置文件
jps
:查看运行
程序启动后,通过web浏览器访问:
http://192.168.10.101:9870/dfshealth.html#tab-overview
注意:
如果web浏览器不能访问页面,注意以下操作:
在配置了ResourceManager的节点(hadoop103)启动YARN
sbin/start-yarn.sh
问题解决:
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
出现以上报错信息需要到 sbin 目录下 更改 start-yarn.sh 和 stop-yarn.sh 信息,在两个配置文件的第一行添加:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
最后再输入命令 /sbin/start-yarn.sh 启动 yarn
使用web浏览器访问:http://192.168.10.102:8088/cluster
hadoop fs -mkdir /wcinput
:创建目录
hadoop fs -mkdir /wcinput(Hadoop目录)
:创建一个文件目录
hadoop fs -put wcinput/demo.txt(文件) /wcinput(Hadoop目录)
:上传文件到Hadoop
1.查看HDFS文件储存位置:
/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-433336804-192.168.10.101-1628733575726/current/finalized/subdir0/subdir0
2.使用cat命令可以查看文件内容
cat 文件名 >> 映射文件.jar
tar -zxvf 文件名.jar
/opt/module/hadoop-3.1.3
:进入hadoop主目录
bin/hadoop fs -get 文件名 存放路径
/opt/module/hadoop-3.1.3
:进入hadoop主目录
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput
jps
:查看当前hadoop进程
cd /opt/module/hadoop-3.1.3
:进入hadoop主目录
sbin/star-dfs.sh
:启动hdfs(在hdfs启动的那台服务器上执行)
sbin/start-yarn.sh
:启动yarn(在yarn启动的那台服务器上执行)
cd /opt/module/hadoop-3.1.3
:进入hadoop主目录
sbin/stop-yarn.sh
:停止yarn(在yarn启动的那台服务器上执行)
sbin/stop-dfs.sh
:停止hdfs(在hdfs启动的那台服务器上执行)
重新格式化的时候必须删除每一台服务器上的data和logs再进行格式化
/opt/module/hadoop-3.1.3
:进入hadoop目录
hdfs namenode -format
:格式化操作
1.删除所有节点的data和logs:
rm -rf 文件夹名称
:递归删除
2.停止所有节点上的服务:
3.重新格式化服务器:
4.重新启动服务:
为了查看程序的历史运行情况,需要配置一下历史服务器!
cd /opt/module/hadoop-3.1.3/etc/hadoop
:进入目录
vim mapred-site.xml
mapreduce.jobhistory.address
hadoop02:10020
mapreduce.jobhistory.webapp.address
hadoop02:19888
xsync mapred-site.xml
:分发配置好的文件到各个节点服务器上
重新启动yarn:
sbin/stop-yarn.sh
sbin/start-yarn.sh
cd /opt/module/hadoop-3.1.3
:进入hadoop主目录
bin/mapred --daemon start historyserver
:启动历史服务器
mapred --daemon stop historyserver
:停止历史服务器
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行情况,方便开发调试。
注意:开启日志聚集功能,需要重启NodeManager、ResourceManager、HistoryManager
yarn.log-aggregation-enable
true
yarn.log.server.url
http://${yarn.timeline-service.webapp.address}/applicationhistory/logs
yarn.log-aggregation.retain-seconds
604800
yarn.timeline-service.enabled
true
yarn.timeline-service.hostname
${yarn.resourcemanager.hostname}
yarn.timeline-service.http-cross-origin.enabled
true
yarn.resourcemanager.system-metrics-publisher.enabled
true
分发到各个节点上,重启服务!!!
如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准;
如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步。
找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,生产环境根据任务对时间的准确程度要求周期同步。测试环境为了尽快看到效果,采用1分钟同步一次。
cd root/bin
:进入bin目录
vim myhadoop.sh
:创建脚本文件
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop03 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop03 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop02 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
chmod 777 myhadoop.sh
:赋予脚本执行权限
[root@hadloop2 hadoop-3.3.0]# sbin/start-dfs.sh
Starting namenodes on [hadoop2]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
cd $HADOOP_HOME
:进入Hadoop主目录
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
#!/bin/bash
for host in hadoop02 hadoop03 hadoop04
do
echo =============== $host ===============
ssh $host jps
done
端口名称 |
Hadoop2.X |
Hadoop3.X |
NameNode内部通信端口 |
8020/9000 |
8020/9000/9820 |
NameNode HTTP UI(对用户的查询端口) |
50070 |
9870 |
MapReduce查看执行任务端口 |
8088 |
8088 |
历史服务器通信端口 |
19888 |
19888 |