一. SSH无密登录配置
一般情况下, 从一台主机访问另一台未配置过SSH的主机时, 需要输入root账号的密码, 这会在进行集群操作时造成很大的不便. 这时, 便需要对主机进行SSH无密登录配置.
ssh连接另一主机语法:
[atguigu@hadoop102 ~]$ ssh @hostname
免密登录原理
如下所示, 如果需要从A无密访问B, 则需要在A上对B进行ssh免密配置. 此时, A会生成一对密钥, 分别是公钥和密钥. 公钥会分发给外部主机, 也即B服务器, 用于给外部服务器B对A发送的数据进行加密和解密. 私钥则会保存在A服务器内部, 用于对外部服务器发送的加密数据的解密.
具体操作方法
此时, 我们需要从hadoop102无密访问hadoop103, 则我们在hadoop102上进行如下操作:
[atguigu@hadoop102 .ssh]$ cd /home/atguigu/.ssh [atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
系统会生成两个文件, 即公钥(id_rsa.pub)和私钥(id_rsa).
然后, 我们需要将公钥拷贝到需要免密登录的目标机器*上:
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104
*注: 此处对hadoop102本机也进行公钥的复制是因为从本机ssh访问本机同样需要输入密码.
.ssh文件夹下的文件功能解释
| known_hosts | 记录ssh访问过本计算机的公钥 |
| id_rsa | 生成的私钥 |
| id_ras.pub | 生成的公钥 |
| autorized_keys | 存放授权过无密登录本服务器的公钥 |
二. 集群配置
*在本伪分布式服务器的情况下, 一共有hadoop102, hadoop103, hadoop104三台服务器
集群部署规划原则
> NameNode 和 SecondaryNameNode 不能安装在同一台服务器上
> ResourceManager 也很消耗内存, 不要和 NameNode, SecondaryNameNode 配置在同一台机器上
配置方案如下:
| hadoop102 | hadoop103 | hadoop104 | |
| HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
| YARN | Nodemanager | ResourceManager Nodemanager | NodeManager |
配置文件的说明
1) 默认配置文件
| 需要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 |
| [core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
| [hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.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 |
2) 自定义配置文件
core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml 四个自定义配置文件放置在$HADOOP_HOME/etc/hadoop 这个路径上, 用户可以根据需求进行重新修改.
集群的配置
1) 配置core-site.xml
fs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop-3.1.3/data hadoop.http.staticuser.user atguigu
*hdfs内部通讯地址 - 8020; hdfsweb端访问地址 - 9870
2) 配置hdfs-site.xml
dfs.namenode.http-address hadoop102:9870 dfs.namenode.secondary.http-address hadoop104:9868
3) 配置yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.hostname hadoop103 yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
4) 配置mapred-site.xml
mapreduce.framework.name yarn
在hadoop102上配置完成后, 则需要分发至各个主机
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-3.1.3/etc/hadoop/
三. 启动集群
配置workers
[atguigu@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
在文件中增加如下内容
hadoop102 hadoop103 hadoop104
*注意: 该文件中不允许内容结尾有空格, 文件中也不允许有空行, 否则会将主机名称识别错误, 或空行也会被识别为主机名称
配置完成后需要同步至集群内各个节点
启动集群
> 若是第一次启动集群, 则需要在hadoop102节点格式化NameNode.
> 格式化NameNode会产生新的集群id, 若此时DataNode仍在运行, 则会导致DataNode的现有集群id和NameNode的集群id不匹配. 因此, 如果需要重新格式化NameNode的话, 一定要先停止NameNode和DataNode进程, 同时删除所有机器上的data, logs目录, 然后再进行格式化.
[atguigu@hadoop102 hadoop-3.1.3]$ hdfs namenode -format
启动HDFS
[atguigu@hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
在配置了ResourceManager的hadoop103节点启动YARN
[atguigu@hadoop103 hadoop-3.1.3]$ sbin/start-yarn.sh
此时, 则可以在web端查看HDFS的NameNode和YARN的ResourceManager
HDFS: http://hadoop102:9870
YARN: http://hadoop103:8088
集群基本测试
> 上传文件
[atguigu@hadoop102 ~]$ hadoop fs -mkdir /input [atguigu@hadoop102 ~]$ hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
*hadoop命令行操作前缀可用"hadoop fs"或"hdfs dfs"皆可.
> hdfs文件存储路径
[atguigu@hadoop102 subdir0]$ pwd /opt/module/hadoop-3.1.3/data/dfs/data/current/BP-1436128598-192.168.10.102-1610603650062/current/finalized/subdir0/subdir0
> 下载
第一个参数是需要下载的文件在HDFS上的路径, 第二个参数是下载文件存放的目标路径
[atguigu@hadoop104 software]$ hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
四. 配置历史服务器
配置mapred-site.xml
mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888
*配置完成后同样需要分发配置至各个节点
启动历史服务器
[atguigu@hadoop102 hadoop]$ mapred --daemon start historyserver
JobHistory的web端访问地址: http://hadoop102:19888/jobhistory
五. 集群启动/停止方式总结
1) 各个模块分开启动/停止(常用)
> 整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
> 整体停止/启动YARN
start-yarn.sh/stop-yarn.sh
2) 各个服务组件逐一启动/停止
分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
编写Hadoop集群常用脚本
1) 集群启动/停止脚本(包含HDFS, YARN, Historyserver)
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin [atguigu@hadoop102 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 hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
编写完成后需要赋予脚本执行权限:
[atguigu@hadoop102 bin]$ chmod +x myhadoop.sh
2) 查看所有服务器进程脚本
[atguigu@hadoop102 ~]$ cd /home/atguigu/bin [atguigu@hadoop102 bin]$ vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
编写完成后同样需要赋予权限
[atguigu@hadoop102 bin]$ chmod +x myhadoop.sh
六. 常用端口号(重要)
| 端口名称 | Hadoop2.x | Hadoop3.x |
| NameNode内部通信端口 | 8020/9000 | 8020/9000/9820 |
| NameNode HTTP UI | 50070 | 9870 |
| Mapreduce 查看执行任务端口 | 8088 | 8088 |
| 历史服务器通信端口 | 19888 | 19888 |



