完全分布式集群的搭建

一、节点规划

  1. Hadoop中的进程需要在多台机器运行,并且
    HDFS需要1个NN+N个DN(+n个2nn)
    YARN需要1个RM+N个NM
  2. 为了避免单点故障,NN和RM建议分散到多台机器。(分配时注意负载均衡)
  3. 以如下规划为例:
hadoop101hadoop102hadoop103
DNDNDN
NMNMNM
NNRM2NN

二、准备工作

  1. 克隆三台虚拟机
    a)配置每台机器的ip地址、网卡等
    b)在每台机器的/etc/hosts中配置集群所有机器的ip和主机名的映射
    c)提供一个普通用户用户,配置使其具有root权限
    d)保证三台机器可以互相联通
  2. 安装jdk、hadoop等软件并修改环境变量

三、集群间复制的两个命令及同步脚本

1. scp(安全拷贝)

scp为全量复制

  • 使用: scp -r 源文件用户名A@主机名1:path1 目标文件用户名B@主机名2:path2
    -r: 递归,复制目录

  • 如果从本机执行读取或写入,用户名B@主机名2:可以省略

  • 要求:
    a)用户名A@主机名1 对path1有读权限
    b)用户名B@主机名2 对path2有写权限

2. rsync(远程同步)

rsync可以只同步变化的文件(对比文件的修改时间),为增量同步。

  • 使用: rsync -rvlt path1 目标文件用户名B@主机名2:path2
    -r: 递归,复制目录
    -v: 显示复制的过程
    -l: 同步软连接
    -t: 基于文件的修改时间进行对比,只同步修改时间不同的文件

  • 只能将本机的文件同步到其他机器

  • 注意: rsync -rvlt path1 目标文件用户名B@主机名2:path2
    path1是个目录,目录以/结尾,只会同步目录中的内容,不会同步目录本身
    path1是个目录,目录不以/结尾,同步目录中的内容,也会同步目录本身

3.同步脚本xsync

脚本功能:将当前机器的文件,同步到集群所有机器的相同路径下

#!/bin/bash
#校验参数是否合法
if(($#==0))
then
	echo 请输入要分发的文件!
	exit;
fi
#获取分发文件的绝对路径
dirpath=$(cd `dirname $1`; pwd -P)
filename=`basename $1`

echo 要分发的文件的路径是:$dirpath/$filename

#循环执行rsync分发文件到集群的每条机器
for((i=101;i<=103;i++))
do
	echo ---------------------hadoop$i---------------------
	rsync -rvlt $dirpath/$filename  wuyik@hadoop$i:$dirpath
done

4. 批量执行命令脚本

脚本功能:在集群的所有机器上批量执行同一条命令

#!/bin/bash
#在集群的所有机器上批量执行同一条命令
if(($#==0))
then
	echo 请输入您要操作的命令!
	exit
fi

echo 要执行的命令是$*

#循环执行此命令
for((i=101;i<=103;i++))
do
	echo ---------------------hadoop$i-----------------
	ssh hadoop$i $*
done

四、修改配置文件

1. 配置core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://hadoop101:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
	<name>hadoop.tmp.dir</name>
	<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

2. 配置hdfs-site.xml

<!-- 指定hdfs存储文件副本数 -->
<property>
	<name>dfs.replication</name>
	<value>3</value>
</property>

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

3. 配置yarn-site.xm

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

<!-- 指定YARN的ResourceManager的地址 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>hadoop102</value>
</property>

4. 配置mapred-site.xml

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

5. 在集群上分发配置文件

[wuyik@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/

五、配置SSH免密登录

1.配置免密登录

举例:A机器的a用户,希望使用b用户的身份,免密登录到B机器
操作步骤:

  1. a用户在A机器生成一对密钥(私钥+公钥)
    ssh-keygen -t rsa
  2. 将公钥的内容,配置到b用户家目录/.ssh/authoxxx_keys
    ssh-copy-id b@B
  3. a用户在A机器,就可以使用 ssh b@B

注意:如果使用ssh 直接登录主机名,则默认使用当前用户对目标主机进行登录

2.使用SSH登录的注意事项

使用SSH登录有两种方式

  1. ①ssh 目标机器 ②登录之后,执行某个命令
    此方式属于Login-shell,会自动读取 /etc/profile文件中定义的所有的变量。
  2. ssh 目标机器 命令
    此方式属于non-login-shell,不会读取/etc/profile。

如果在使用命令时,我们需要使用/etc/profile定义的一些变量,需要在目标机器的对应的用户的家目录/.bashrc中添加以下代码

source /etc/profile

如果不添加以上代码,在执行start-all.sh | stop-all.sh一定会报错。

五、运行群起脚本

1. 群起脚本的运行原理

  1. 获取集群中所有的节点的主机名
    默认读取当前机器 HADOOP_HOME/etc/hadoop/slaves,获取集群中所有的节点的主机名

  2. 循环执行 ssh 主机名 hadoop-daemon.sh start xxx
    注意保证当前机器到其他节点,已经配置了ssh免密登录,并且保证集群中所有当前用户的家目录/.bashrc中,已经配置source /etc/profile(因为此登陆方式为non-login-shell登录方式)

2. 注意事项

  1. start-all.sh时,其实分别调用了start-dfs.sh和start-yarn.sh
    start-dfs.sh可以在集群的任意一台机器使用,可以启动HDFS中的所有进程。
    但是start-yarn.sh在集群的非RM所在的机器使用,不会启动resourcemanager。
  2. 建议只需要配置RM所在机器到其他机器的SSH免密登录即可,在RM所在的机器执行群起和群停脚本,所以xsync和xcall只放在RM所在的机器即可。

六、集群的时间同步

一个集群中,每台机器的时间必须保证是同步的,其主要借助linux的ntp服务执行和远程时间服务器的时间同步

  1. 保证当前机器的ntp服务是开机自启动!
chkconfig --list ntpd
  1. 使用 ntpdate -u 时间服务器的地址
#此处使用阿里云的时间服务器进行同步
ntpdate -u ntp7.aliyun.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值