再 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 文件。里面存着所有的公钥。
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/module
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
可以省略用户名信息,这样的话将会以当前用户名进行连接。
创建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/
注意:NameNode 和 SecondaryNameNode 不要安装在同一台服务器
注意:ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
core-site.xml
位置在Hadoop根目录的 etc/hadoop
中
文件内容添加以下属性:
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://hadoop102:8020value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/module/hadoop-3.1.3/datavalue>
property>
<property>
<name>hadoop.http.staticuser.username>
<value>[用户名]value>
property>
configuration>
hdfs-site.xml
位置在Hadoop根目录的 etc/hadoop
中。
文件内容添加以下属性:
<configuration>
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>hadoop104:9868value>
property>
configuration>
yarn-site.xml
位置在Hadoop根目录的 etc/hadoop
中。
文件内容添加以下属性:
<configuration>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.resourcemanager.hostnamename>
<value>hadoop103value>
property>
<property>
<name>yarn.nodemanager.env-whitelistname>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOMEvalue>
property>
<property>
<name>yarn.nodemanager.pmem-check-enabledname>
<value>falsevalue>
property>
<property>
<name>yarn.nodemanager.vmem-check-enabledname>
<value>falsevalue>
property>
<property>
<name>yarn.scheduler.minimum-allocation-mbname>
<value>512value>
property>
<property>
<name>yarn.scheduler.maximum-allocation-mbname>
<value>4096value>
property>
<property>
<name>yarn.nodemanager.resource.memory-mbname>
<value>4096value>
property>
configuration>
mapred-site.xml
位置在Hadoop根目录的 etc/hadoop
中。
文件内容添加以下属性:
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
configuration>
workers
位置在Hadoop根目录的 etc/hadoop
中。
该文件包括集群中的所有机器的IP。我是因为已经改过hosts。workers
文件影响群起时有哪些服务器会启动。
记得删除文件中原来的localhost
文件内容添加以下属性:
hadoop102
hadoop103
hadoop104
将配置好的5个文件通过编写好的脚本程序xsync分发到集群所有机器上。
如果集群是第一次启动,需要在 hadoop102 节点(配置NameNode的节点)格式化 NameNode(注意格式化之前,一定要先停止上次启动的所有 NameNode 和 DataDode 进程,然后再删除data
和log
文件夹。
hdfs namenode -format
start-dfs.sh
若没有自动提示,记得配置 HADOOP_HOME
在配置了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();
},
hdfs --daemon start/stop namenode/datanode/secondarynamenode
yarn --daemon start/stop resourcemanager/nodemanager
start-dfs.sh/stop-dfs.sh
start-yarn.sh/stop-yarn.sh
群起/停止脚本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
为了查看程序的历史运行情况,需要配置历史服务器。具体配置步骤如下:
mapred-site.xml
位置:Hadoop根目录的 etc/hadoop
中。
在该文件里面增加如下配置。
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop102:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop102:19888value>
property>
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
mapred --daemon start historyserver
jps
使用浏览器跳转至 http://hadoop102:19888/jobhistory 查看是否启动成功
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryManager。
在该文件里面增加如下配置。
<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>
<property>
<name>yarn.log.server.urlname>
<value>http://hadoop102:19888/jobhistory/logsvalue>
property>
<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
在配置了Yarn的节点上执行: stop-yarn.sh
在配置了历史服务器的节点上执行: mapred --daemon stop historyserver
在配置了Yarn的节点上执行:start-yarn.sh
在配置了Yarn的节点上执行:yarn --daemon start timelineserver
在配置了历史服务器的节点上执行:mapred --daemon start historyserver
时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
sudo systemctl stop ntpd
sudo systemctl disable ntpd
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