搭建一个hadoop完全分布式运行模式(3个组成集群)

目标在这里插入图片描述

运行环境配置

  1. 准备三台Linux虚拟机,并且配好ip,网关,子掩码等。原则互相通讯,也能外连Windows主机,并且在/opt目录下创建两个目录,一个是software,一个是module。
  2. 三台虚拟机关闭所有防火墙服务
  3. 利用工具将Windows下载的jdk与hadoop压缩包传送到Linux放到module目录下,保证software和module的属主和属组都是当前操作用户(即有操作权限)。
  4. 将jdk和hadoop解压到module。(安装前验证java是否已经安装)
 xx]$ rpm -qa | grep java
 xx]$ sudo rpm -e 软件包
  1. 在/etc/profile里面配置JAVA_HOME,HADOOP_HOME并且加入到PATH中
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

每次服务器更改了profile文件,一定要在/etc下面 source profile!!

再利用scp命令传到其他虚拟机

命令 递归 要拷贝的文件路径/名称 目的用户@主机: 目的路径/名称
scp -r $pdir/$fname $user@hadoop$host: $pdir/$fname
@hadoop101 /]$ scp -r /opt/module  root@hadoop107:/opt/module

或者

@hadoop101 opt]$ rsync -av /opt/software/ hadoop107:/opt/software
  1. 配置hosts
    /etc/hosts 中配置(根据自己的网关配置,Windows上面也配好方便查看8088和50070端口信息)
192.168.58.100 hadoop100
192.168.58.101 hadoop101
192.168.58.102 hadoop102
192.168.58.103 hadoop103
192.168.58.104 hadoop104
192.168.58.105 hadoop105
192.168.58.106 hadoop106
192.168.58.107 hadoop107
192.168.58.108 hadoop108

9.配置网络,我选择105到107段配置配置方法下面点击
添加链接描述

脚本分发

原理
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法

命令 递归 要拷贝的文件路径/名称 目的用户@主机: 目的路径/名称
rsync -av $pdir/$fname $user@hadoop$host: $pdir/$fname

命令使用案例

rsync  -av  $pdir/$fname   $user@hadoop$host:$pdir/$fname

参数说明

选项 功能
-a 归档拷贝
-v 显示复制过程

(2)案例实操
(a)把hadoop107机器上的/opt/software目录同步到hadoop105服务器的root用户下的/opt/目录
hadoop107 opt]$ rsync -av /opt/software/ hadoop105:/opt/software
3. xsync集群分发脚本
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a)rsync命令原始拷贝:
rsync -av /opt/module root@hadoop105:/opt/
(b)期望脚本:
xsync要同步的文件名称
(c)说明:在/home/zhengkw/bin这个目录下存放的脚本,zhengkw用户可以在系统任何地方直接执行。
(3)脚本实现
(a)在/home/zhengkw目录下创建bin目录,并在bin目录下xsync创建文件,文件内容如下:
hadoop107 ~]$ mkdir bin
hadoop107 ~]$ cd bin/
hadoop107 bin]$ vi xsync
在该文件中编写如下代码

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for host in hadoop105 hadoop106 hadoop107
do
    echo ------------------- $host --------------
    rsync -av $pdir/$fname $user@$host:$pdir
done

测试
修改脚本 xsync 具有执行权限

@hadoop107 bin]$ chmod 777 xsync

调用脚本形式:xsync 文件名称

hadoop107 bin]$ xsync /home/zhengkw/bin

搞定!!

SSH免密传输

生成密钥
ssh-keygen -t rsa
将密钥分发给需要免密的机器
将公钥拷贝到要免密登录的目标机器上

hadoop107 .ssh]$ ssh-copy-id hadoop107    #(内部通讯)
hadoop107 .ssh]$ ssh-copy-id hadoop106
hadoop107 .ssh]$ ssh-copy-id hadoop105

NameNode配置的服务器需要将公钥给别的机器
ResourceManager的服务器也是需要生成密钥分发给别的服务器公钥

集群环境准备

核心配置文件

核心文件 主要作用
core-site.xml 指定HDFS中NameNode的地址 ,Hadoop运行时产生文件的存储目录
hdfs-site.xml 指定副本数量 指定SN节点
hadoop-env.sh hadoop运行环境,配置hdfs必要环境
yarn-site.xml 指定Reducer获取数据的方式,ResourceManager的地址
yarn-env.sh yarn运行环境
mapred-env.sh mr运行环境
mapred-site.xml 将MR指定到yarn中配置历史服务器
slaves etc/hadoop/slaves 不能空行不能空格!! 配置集群

所有配置文件的路径如下

/opt/module/hadoop-2.7.2/etc/hadoop/
  1. 配置core-site.xml
    在该文件中编写如下配置
<!-- 指定HDFS中NameNode的地址 -->
<property>
		<name>fs.defaultFS</name>
      <value>hdfs://hadoop107:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
  1. HDFS配置文件
    配置hadoop-env.sh
 #将JAVA_HOME=修改为绝对路径(jdk在哪里就配哪里)
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置hdfs-site.xml

在该文件中编写如下配置

<!-- 指定副本数量3 -->
<property>
		<name>dfs.replication</name>
		<value>3</value>
</property>

<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>hadoop106:50090</value>
</property>
  1. YARN配置文件

配置yarn-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_144

配置yarn-site.xml
在该文件中增加如下配置

<!-- Reducer获取数据的方式 -->
<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop105</value>
</property>
  1. MapReduce配置文件
    配置mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144

配置mapred-site.xml
在该文件中增加如下配置

<!-- 指定MR运行在Yarn上 -->
<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
</property>

配置slaves
slaves是作为群起脚本输入的host,里面存放的都是datanode节点的host名称

hadoop105
hadoop106
hadoop107

代码不能有空行,不能有空格

集群启动

集群启动首要是配置好免密登录和slaves,hosts!

配置slaves(**注意:**配置文件里不能存在空格和空行不然会导致启动namenode时初始化报错)

坐标:/opt/module/hadoop-2.7.2/etc/hadoop/slaves
@hadoop107 hadoop]$ vim slaves
在该文件中增加如下内容:

hadoop105
hadoop106
hadoop107

同步所有节点配置文件

@hadoop107 hadoop]$ xsync slaves

启动集群
(1)如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据

hadoop107 hadoop-2.7.2]$ bin/hdfs namenode -format

切换到/opt/module/hadoop-2.7.2目录下执行

hadoop107 hadoop-2.7.2]$ sbin/start-dfs.sh

启动YARN
转到配置了ResourceManager的服务器,群起yarn服务

hadoop105 hadoop-2.7.2]$ sbin/start-yarn.sh

注意NameNode和ResourceManger如果不是同一台机器不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN

集群停止

在配置NameNode节点上面运行

stop-dfs.sh

在配置ResourceManger节点上运行

stop-yarn.sh

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

  1. 配置mapred-site.xml
    hadoop107 hadoop]$ vi mapred-site.xml
    在该文件里面增加如下配置。
<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop107:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop107:19888</value>
</property>
  1. 分发配置
xsync etc/hadoop/mapred-site.xml
  1. 启动历史服务器(可以随意挂载到任何服务器,哪里挂载哪里启动)
 sbin/mr-jobhistory-daemon.sh start historyserver
  1. 查看历史服务器是否启动
[zhengkw@hadoop107 hadoop-2.7.2]$ jps
  1. 查看JobHistory

http://hadoop107:19888/jobhistory

配置日志的聚集

  • 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
  • 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
开启日志聚集功能具体步骤如下:

  1. 配置yarn-site.xml
    在该文件里面增加如下配置。
<!-- 日志聚集功能使能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

<!-- 日志保留时间设置7天,单位秒 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
  1. 分发配置

hadoop107 hadoop-2.7.2]$ xsync etc/hadoop/yarn-site.xml
因为修改了yarn文件 所以影响了nm rm hs服务!

  1. 关闭NodeManager 、ResourceManager和HistoryServer
hadoop105 hadoop-2.7.2]$ sbin/stop-yarn.sh
hadoop107 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
  1. 启动NodeManager 、ResourceManager和HistoryServer
hadoop105 hadoop-2.7.2]$ sbin/start-yarn.sh
hadoop107 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
  1. 删除HDFS上已经存在的输出文件
hadoop107 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/zhengkw/output
  1. 执行WordCount程序
hadoop107 hadoop-2.7.2]$ hadoop jar  share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/zhengkw/input /user/zhengkw/output
  1. 查看日志
    http://hadoop107:19888/jobhistory

集群时间同步

  • 时间服务器配置(必须root用户

(1)检查ntp是否安装

[root@hadoop107 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-10.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-10.el6.centos.x86_64

(2)修改ntp配置文件

[root@hadoop107 桌面]# vi /etc/ntp.conf

修改内容如下
a)修改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

b)修改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

c)添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
添加到上面步骤b server 那一段

server 127.127.1.0
fudge 127.127.1.0 stratum 10

(3)修改/etc/sysconfig/ntpd 文件

[root@hadoop107 桌面]# vim /etc/sysconfig/ntpd

增加内容如下(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes

(4)重新启动ntpd服务

[root@hadoop107 桌面]# service ntpd status
ntpd 已停
[root@hadoop107 桌面]# service ntpd start
正在启动 ntpd:                                            [确定]

(5)设置ntpd服务开机启动

[root@hadoop107 桌面]# chkconfig ntpd on

(6)在master机器上设置定时任务(每1小时执行一次!)

* */1 * * * /usr/sbin/ntpdate -u ntp1.aliyun.com & > /home/zhengkw/ntp.log
  1. 其他机器配置(必须root用户)
    (1)在其他机器配置10分钟与时间服务器同步一次
[root@hadoop105桌面]# crontab -e

编写定时任务如下(附带打印日志到/var/log/):

*/10 * * * * /usr/sbin/ntpdate -u hadoop107 &> &>/var/log/ntpdate.log

(2)修改任意机器时间

[root@hadoop105 桌面]# date -s "2017-9-11 11:11:11"

(3)十分钟后查看机器是否与时间服务器同步

[root@hadoop105桌面]# date

说明:测试的时候可以将10分钟调整为1分钟,节省时间。

总结

Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
(1)默认配置文件:
|

要获取的默认文件 文件存放在Hadoop的jar包中的位置
[core-default.xml] hadoop-common-2.7.2.jar/ core-default.xml
[hdfs-default.xml] hadoop-hdfs-2.7.2.jar/ hdfs-default.xml
[yarn-default.xml] hadoop-yarn-common-2.7.2.jar/ yarn-default.xml
[mapred-default.xml] hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml

(2)自定义配置文件:
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

核心配置文件

核心文件 主要作用
core-site.xml 指定HDFS中NameNode的地址 ,Hadoop运行时产生文件的存储目录
hdfs-site.xml 指定副本数量 【namenode.secondary】2nn的配置 上电时加载到内存(启动服务时仅一次!)
hadoop-env.sh hadoop运行环境,配置hdfs必要环境
yarn-site.xml 指定Reducer获取数据的方式,ResourceManager的地址
yarn-env.sh yarn运行环境
mapred-env.sh mr运行环境
mapred-site.xml 将MR指定到yarn中配置历史服务器
slaves etc/hadoop/slaves 不能空行不能空格!! 配置集群

(3)修改一台主机配置文件,其他的用脚本分发!注意scp命令传输时用的是目的地虚拟机的root用户,所以一定时刻注意主属组属权限
(4) slaves 文件里不能有空行和末尾空格

(5) 每个.env都要重新配置JAVA_HOME原因是跨服务器访问时可能需要重新声明,所以直接配上以免读不到java环境!

最后每次初始化namenode时必须保证每个节点的hadoop目录里没有logsdata 目录!

发布了37 篇原创文章 · 获赞 17 · 访问量 1845

猜你喜欢

转载自blog.csdn.net/qq_37714755/article/details/104385491
今日推荐