再 Hadoop 的使用过程中,无论是服务期间传输数据,还是快速启动集群的各个模块,都需要用到SSH协议,若是每次使用都输入密码,将大大降低效率。所以必须配置 SSH 无密登录。
SSH 基本语法:
ssh [另一台服务器的IP地址]
免密登录原理
1、生成公钥和私钥
ssh-keygen -t rsa
如果不做其他配置,将会在用户目录的 .ssh 文件夹下生成两个文件
id_rsa(私钥)和id_rsa.pub(公钥)
2、将公钥拷贝到需要免密登录的目标机器上
ssh-copy-id [目标机器IP]
注意:这样做只是可以在当前机器远程连接目标机器时可以免密登录,所以还需要在目标机器上在操作一遍,但是将目标 IP 换成现在操作的机器。需要免密登录的多台机器,需要每台机器上的公钥。
拷贝后,目标机器会出现一个 authorized_keys 文件。里面存着所有的公钥。
二、服务器间传输文件的命令 1、scp (secure copy) 安全拷贝scp 定义:scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
基本语法:
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
实际操作:
将hadoop101的 /opt/module 中的文件拷贝给 hadoop102中的/opt/module目录
scp -r /opt/module [用户名]@hadoop102:/opt/module
也可以反向操作
在hadoop103上,将hadoop101服务器上的/opt/module目录下的软件拷贝到hadoop103上。
sudo scp -r [用户名]@hadoop101:/opt/module root@hadoop103:/opt/module
还可以将对除自身外的两台机器做拷贝操作
在hadoop103上操作将hadoop101中/opt/module目录下的软件拷贝到hadoop104上。
scp -r [用户名]@hadoop101:/opt/module [用户名]@hadoop104:/opt/module2、rsync 远程同步工具
rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:用rsync做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
基本语法:
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
| 选项 | 功能 |
|---|---|
| -a | 归档拷贝 |
| -v | 显示复制过程 |
实际操作:
把hadoop101机器上的 /opt/software 目录同步到 hadoop102 服务器的 root 用户下的/opt/目录
rsync -av /opt/software/ hadoop102:/opt/software
注意:在语法中
** u s e r ∗ ∗ @ h a d o o p user**@hadoop user∗∗@hadoophost: p d i r / pdir/ pdir/fname
可以省略用户名信息,这样的话将会以当前用户名进行连接。
2.1 使用rsync编写集群分发脚本创建xsync文件,并编写脚本
vim xsync
#!/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
修改脚本 xsync 具有执行权限
chmod +x xsync
将脚本移动到/bin中,以便全局调用
sudo mv xsync /bin/三、集群配置 1、集群部署规划
注意:NameNode 和 SecondaryNameNode 不要安装在同一台服务器
注意:ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。
| hadoop102 | hadoop103 | hadoop104 | |
|---|---|---|---|
| HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
| YARN | NodeManager | ResourceManager NodeManager | NodeManager |
位置在Hadoop根目录的 etc/hadoop中
文件内容添加以下属性:
2.2 配置hdfs-site.xmlfs.defaultFS hdfs://hadoop102:8020 hadoop.tmp.dir /opt/module/hadoop-3.1.3/data hadoop.http.staticuser.user [用户名]
位置在Hadoop根目录的 etc/hadoop中。
文件内容添加以下属性:
2.3 配置yarn-site.xmldfs.namenode.secondary.http-address hadoop104:9868
位置在Hadoop根目录的 etc/hadoop中。
文件内容添加以下属性:
2.4 配置 mapred-site.xmlyarn.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 yarn.nodemanager.pmem-check-enabled false yarn.nodemanager.vmem-check-enabled false yarn.scheduler.minimum-allocation-mb 512 yarn.scheduler.maximum-allocation-mb 4096 yarn.nodemanager.resource.memory-mb 4096
位置在Hadoop根目录的 etc/hadoop中。
文件内容添加以下属性:
2.5 配置workersmapreduce.framework.name yarn
位置在Hadoop根目录的 etc/hadoop中。
该文件包括集群中的所有机器的IP。我是因为已经改过hosts。workers 文件影响群起时有哪些服务器会启动。
记得删除文件中原来的localhost
文件内容添加以下属性:
hadoop102 hadoop103 hadoop104
将配置好的5个文件通过编写好的脚本程序xsync分发到集群所有机器上。
四、群起集群 1、格式化(仅第一次启动)如果集群是第一次启动,需要在 hadoop102 节点(配置NameNode的节点)格式化 NameNode(注意格式化之前,一定要先停止上次启动的所有 NameNode 和 DataDode 进程,然后再删除data和log文件夹。
hdfs namenode -format2、启动HDFS
start-dfs.sh
若没有自动提示,记得配置 HADOOP_HOME
3、启动YARN在配置了ResourceManager的节点(hadoop103) 启动YARN
start-yarn.sh
打开浏览器跳转至 http://hadoop104:9868/status.html(hadoop104 为你配置SecondaryNameNode 的机器的IP地址)
若页面信息缺失
查看路径:$HADOOP_HOME/share/hadoop/hdfs/webapps/static
查看dfs-dust.js的第61行
'date_tostring' : function (v) {
return moment(Number(v)).format('ddd MMM DD HH:mm:ss ZZ YYYY');
},
并修改函数返回值如下:
'date_tostring' : function (v) {
return new Date(Number(v)).toLocaleString();
},
五、集群启动/停止方式总结
### 1、分别启动/停止 HDFS 组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
### 2、启动/停止 YARN
yarn --daemon start/stop resourcemanager/nodemanager3、各个模块分开启动/停止(配置 ssh无密登录是前提)
#### 3.1 整体启动/停止 HDFS
start-dfs.sh/stop-dfs.sh3.2 整体启动/停止 YARN
start-yarn.sh/stop-yarn.sh4、群起/停止脚本和查看启动状态脚本
群起/停止脚本mycluster
#!/bin/bash if [ $# -ne 1 ] then echo "args number error!!!" exit fi case $1 in "start") ssh hadoop102 start-dfs.sh ssh hadoop103 start-yarn.sh ;; "stop") ssh hadoop102 stop-dfs.sh ssh hadoop103 stop-yarn.sh ;; *) echo "args info error!!!" exit ;; esac
查看启动状态脚本 jpsall
#!/bin/bash for host in hadoop102 hadoop103 hadoop104 do echo "====================$host=======================" ssh $host jps done六、配置历史服务器
为了查看程序的历史运行情况,需要配置历史服务器。具体配置步骤如下:
1、配置mapred-site.xml位置:Hadoop根目录的 etc/hadoop中。
在该文件里面增加如下配置。
2、分发配置mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml3、在hadoop102启动历史服务器
mapred --daemon start historyserver4、查看历史服务器是否启动
jps5、查看JobHistory
使用浏览器跳转至 http://hadoop102:19888/jobhistory 查看是否启动成功
七、配置日志的聚集日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryManager。
1、配置yarn-site.xml在该文件里面增加如下配置。2、分发配置yarn.log-aggregation-enable true yarn.log.server.url http://hadoop102:19888/jobhistory/logs yarn.log-aggregation.retain-seconds 604800
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml3、关闭NodeManager 、ResourceManager和HistoryServer
在配置了Yarn的节点上执行: stop-yarn.sh 在配置了历史服务器的节点上执行: mapred --daemon stop historyserver4、启动NodeManager 、ResourceManage、Timelineserver和HistoryServer
在配置了Yarn的节点上执行:start-yarn.sh 在配置了Yarn的节点上执行:yarn --daemon start timelineserver 在配置了历史服务器的节点上执行:mapred --daemon start historyserver八、集群时间同步(NTP)
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
8.1、时间服务器配置(必须root用户) 8.1.1 在NTP服务器上关闭ntp服务和自启动sudo systemctl stop ntpd sudo systemctl disable ntpd8.1.2修改ntp配置文件
sudo vim /etc/ntp.conf
修改内容如下
1、修改1(授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
改为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
2、修改2(集群在局域网中,不使用其他互联网上的时间)
server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst
为
#server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst
并在/etc/ntp.conf中添加以下内容(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0 fudge 127.127.1.0 stratum 10
3、修改/etc/sysconfig/ntpd文件
sudo vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
4、重新启动ntpd服务
systemctl start ntpd
5、设置ntpd服务开机启动
systemctl enable ntpd
6、其他机器配置(必须root用户)
在其他机器配置10分钟与时间服务器同步一次
编写定时任务如下:
crontab -e */10 * * * * /usr/sbin/ntpdate hadoop102



