Hadoop学习笔记(二)完全分布式运行模式

Hadoop入门——完全分布式运行模式

一、SSH无密登录配置

​ 再 Hadoop 的使用过程中,无论是服务期间传输数据,还是快速启动集群的各个模块,都需要用到SSH协议,若是每次使用都输入密码,将大大降低效率。所以必须配置 SSH 无密登录。

​ SSH 基本语法:

ssh [另一台服务器的IP地址]

免密登录原理

Hadoop学习笔记(二)完全分布式运行模式_第1张图片

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/module

2、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

2、配置集群的核心配置文件

2.1 配置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>

2.2 配置hdfs-site.xml

位置在Hadoop根目录的 etc/hadoop中。

文件内容添加以下属性:




<configuration>
    <property>
        <name>dfs.namenode.secondary.http-addressname>
        <value>hadoop104:9868value>
    property>
configuration>

2.3 配置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>

2.4 配置 mapred-site.xml

位置在Hadoop根目录的 etc/hadoop中。

文件内容添加以下属性:



<configuration>

    <property>
        <name>mapreduce.framework.namename>
        <value>yarnvalue>
    property>
configuration>

2.5 配置workers

位置在Hadoop根目录的 etc/hadoop中。

该文件包括集群中的所有机器的IP。我是因为已经改过hosts。workers 文件影响群起时有哪些服务器会启动。

记得删除文件中原来的localhost

文件内容添加以下属性:

hadoop102
hadoop103
hadoop104

将配置好的5个文件通过编写好的脚本程序xsync分发到集群所有机器上。

四、群起集群

1、格式化(仅第一次启动)

如果集群是第一次启动,需要在 hadoop102 节点(配置NameNode的节点)格式化 NameNode(注意格式化之前,一定要先停止上次启动的所有 NameNode 和 DataDode 进程,然后再删除datalog文件夹。

hdfs namenode -format

2、启动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/nodemanager

3、各个模块分开启动/停止(配置 ssh无密登录是前提

3.1 整体启动/停止 HDFS
start-dfs.sh/stop-dfs.sh
3.2 整体启动/停止 YARN
start-yarn.sh/stop-yarn.sh

4、群起/停止脚本和查看启动状态脚本

群起/停止脚本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中。

在该文件里面增加如下配置。


<property>
  <name>mapreduce.jobhistory.addressname>
  <value>hadoop102:10020value>
property>


<property>
  <name>mapreduce.jobhistory.webapp.addressname>
  <value>hadoop102:19888value>
property>

2、分发配置

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

3、在hadoop102启动历史服务器

mapred --daemon start historyserver

4、查看历史服务器是否启动

jps

5、查看JobHistory

使用浏览器跳转至 http://hadoop102:19888/jobhistory 查看是否启动成功

七、配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动 NodeManager 、ResourceManager 和HistoryManager。

1、配置yarn-site.xml

在该文件里面增加如下配置。

<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>

2、分发配置

xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml

3、关闭NodeManager 、ResourceManager和HistoryServer

在配置了Yarn的节点上执行: stop-yarn.sh
在配置了历史服务器的节点上执行: mapred --daemon stop historyserver

4、启动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 ntpd
8.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

你可能感兴趣的:(Hadoop学习笔记,hadoop,分布式,big,data)