您的位置:首页 > Web前端 > HTML5

Hadoop 2.3.0-cdh5.0.0 HA集群搭建(yum 安装)

2016-05-10 17:30 483 查看
历时2天搭建hadoop2.0集群,实现高可用主备namenode切换,使用yum安装集群,使用saltstack管理集群;

环境准备

一共用5台机器作为硬件环境,全都是centos 6.5

namenode & resourcemanager 主服务器: 10.33.20.138

namenode & resourcemanager 备服务器: 10.33.20.139

datanode & nodemanager 服务器: 10.33.20.140 10.33.20.141 10.33.20.142

zookeeper 服务器集群(用于namenode 高可用的自动切换): 10.33.20.140 10.33.20.141

jobhistory 服务器(用于记录mapreduce的日志): 10.33.20.138

用于namenode HA的NFS: 10.33.20.140

下面记录详细安装步骤:

1、Yum仓库的创建;

a)、自建yum仓库,将对应hadoop版本下的所有安装文件下载到服务器,提供安装(详见自建Hadoop yum仓库);

b)、配置cloudear线上yum仓库:

每台hadoop机器都需要配置

进入/etc/yum.repos.d目录,并创建文件cdh5.repo:

cd /etc/yum.repos.d/

touch cdh5.repo

编辑cdh5.repo文件内容如下:

[cloudera-cdh5]

name=cdh5

baseurl=http://archive.cloudera.com/cdh5/redhat/5/x86_64/cdh/5.0.0/ #使用线上yum源

enabled=1 #是否启用yum源 1为启用

gpgcheck=1

gpgkey=http://archive.cloudera.com/cdh5/redhat/5/x86_64/cdh/RPM-GPG-KEY-cloudera #使用线上yum源

2、创建用于namenode HA的NFS服务器;

a)、登录10.33.20.140,执行以下脚本

#!/bin/bash

yum -y install rpc-bind nfs-utils

mkdir -p /data/nn_ha/

echo "/data/nn_ha *(rw,root_squash,all_squash,sync)" >> /etc/exports

/etc/init.d/rpcbind start

/etc/init.d/nfs start

chkconfig --level 234 rpcbind on

chkconfig -level 234 nfs on

3、Hadoop Namenode & resourcemanager 主、备服务器 环境部署(10.33.20.138/10.33.20.139)

a)、修改hostname;

b)、编辑hosts文件(此文件会同步到hadoop集群所有机器)

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

10.33.20.138 master1

10.33.20.139 master2

10.33.20.140 slave1

10.33.20.141 slave2

10.33.20.142 slave3

c)、执行部署脚本,安装部署;

#Namenode的HA高可用,使用NFS方式

yum -y install nfs-utils rpc-bind

mkdir -p /data/nn_ha

mount -t nfs -o tcp,soft,intr,timeo=50,retrans=12, slave1:/data/nn_ha/ /data/nn_ha/ #这个操作一定要把slave1机器防火墙关闭,否则会报timeout

echo "mount -t nfs -o tcp,soft,intr,timeo=50,retrans=12, slave1:/data/nn_ha/ /data/nn_ha/" >> /etc/rc.local

#搭建rsyncd服务,用于同步hadoop配置文件及hadoop操作相关脚本

yum -y install rsync #安装rsync

cat > /etc/rsyncd.conf << _addrsync

log file = /var/log/rsyncd.log

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

[hadoop_conf]

path = /etc/hadoop/conf

comment = hadoop_conf

uid = root

ignore errors

read only = no

list = no

[hadoop_s]

path = /opt/hadoop_scripts

comment = hadoop_conf

uid = root

ignore errors

read only = no

list = no

_addrsync

echo "rsync --daemon" >> /etc/rc.local

rsync --daemon

#安装自制的jdk包

yum -y localinstall jdk-1.7.0_21-2.el6.x86_64.rpm

#yum使用CDH5 安装namenode & resourcemanager 相关包

yum -y install zookeeper-server zookeeper hadoop-yarn-resourcemanager hadoop-hdfs-namenode hadoop-mapreduce hadoop-hdfs-zkfc

#创建HDFS本地目录

mkdir -p /data/hadoop/dfs/data

mkdir -p /data/hadoop/dfs/name

chown -R hdfs:hdfs /data/hadoop/dfs/

chmod 700 /data/hadoop/dfs/name/

#创建Yarn本地目录

mkdir -p /data/hadoop/nm-local-dir

mkdir -p /data/hadoop2/nm-loacal-dir

mkdir -p /data/hadoop/nm-log-dir

mkdir -p /data/hadoop2/nm-log-dir

chown -R yarn.yarn /data/hadoop/nm-local-dir

chown -R yarn.yarn /data/hadoop2/nm-loacal-dir

chown -R yarn.yarn /data/hadoop/nm-log-dir

chown -R yarn.yarn /data/hadoop2/nm-log-dir

具体配置文件另附附件

#把namenode yarn服务加入自启动

sudo chkconfig hadoop-hdfs-namenode on

sudo chkconfig hadoop-yarn-resourcemanager on

sudo chkconfig hadoop-hdfs-zkfc on

4、zookeeper服务器集群部署(10.33.20.140/10.33.20.141)

zookeeper是一个开源分布式服务,在这里用于namenode 的auto fail over功能;

a)、安装

yum install zookeeper zookeeper-server

b)、修改配置文件/etc/zookeeper/conf/zoo.cfg

maxClientCnxns=50

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

dataDir=/var/lib/zookeeper

# the port at which the clients will connect

clientPort=2181

#这里指定zookeeper集群内的所有机器,此配置集群内机器都是一样的

server.1=slave1:2888:3888

server.2=slave1:2888:3888

c)、指定当前机器的id,并开启服务

#譬如当前机器是10.33.20.140(slave2),它是server.1,id是1,SO:

echo "1" > /var/lib/zookeeper/myid

chown -R zookeeper.zookeeper /var/lib/zookeeper/

service zookeeper-server init

/etc/init.d/zookeeper-server start

chkconfig zookeeper-server on

#如此类推,部署10.33.20.141

ps:没有myid文件将不能启动集群模式

5、datanode & nodemanager 服务器部署

#安装自制的jdk包

yum -y localinstall jdk-1.7.0_21-2.el6.x86_64.rpm

#安装datanode & nodemanager CDH5相关包

yum -y install hadoop-yarn-nodemanager hadoop-hdfs-datanode hadoop-mapreduce

#创建HDFS本地目录

mkdir -p /data/hadoop/dfs/data

mkdir -p /data/hadoop/dfs/name

chown -R hdfs:hdfs /data/hadoop/dfs/

chmod 700 /data/hadoop/dfs/name/

#同步主服务器配置文件

可以使用scp或者rsync,下面提供rsync用法

#mkdir -p /etc/hadoop/conf

#rsync -avz $master1::hadoop_conf /etc/hadoop/conf

#创建nodemanager本地目录

mkdir -p /data/hadoop/nm-local-dir

mkdir -p /data/hadoop2/nm-loacal-dir

mkdir -p /data/hadoop/nm-log-dir

mkdir -p /data/hadoop2/nm-log-dir

chown -R yarn.yarn /data/hadoop/nm-local-dir

chown -R yarn.yarn /data/hadoop2/nm-loacal-dir

chown -R yarn.yarn /data/hadoop/nm-log-dir

chown -R yarn.yarn /data/hadoop2/nm-log-dir

#加入自启动

sudo chkconfig hadoop-hdfs-datanode on

sudo chkconfig hadoop-yarn-nodemanager on

6、搭建saltstack

a)、主namenode(master1),安装saltstack master;

salt-master安装

yum install salt-master

或者 curl -L http://bootstrap.saltstack.org | sudo sh -s -- -M -N

b)、修改配置文件`/etc/salt/master`,下面标志的是需要修改的项

修改监听IP:

interface: 10.33.20.138

多线程池:

worker_threads: 5

开启任务缓存:(官方描叙开启缓存能承载5000minion)

job_cache :True

开启自动认证:

auto_accept: True

/etc/init.d/salt-master start

chkconfig salt-master on

c)、备namenode&datanode安装saltstack minion

#salt-minion安装

yum install salt-minion

或者

wget -O - http://bootstrap.saltstack.org | sudo sh

minion端的配置文件是在 /etc/salt/minion

对于此配置文件的详细配置可以查看 http://docs.saltstack.org/en/latest/ref/configuration/minion.html

这里一定要配置的 master 端的IP,在 /etc/salt/minion 里,具体配置如下;

cat > /etc/salt/minion <<_saltend

master: $master1 #10.33.20.138

id: `hostname` #当前机器的主机名

tcp_keepalive: True

tcp_keepalive_idle: 30

tcp_keepalive_cnt: 5

tcp_keepalive_intvl: 15

_saltend

#启动服务

/etc/init.d/salt-minion start

echo "/etc/init.d/salt-minion start" >> /etc/rc.local

注意:此时应该检查salt-key命令查看是否salt客户端都被salt服务端包含了;



如果客户端在 Unaccepted Keys:里面,使用

salt-key -a hostname 命令将其加入服务端管理,才能从服务端执行salt命令操作客户端。

如:salt -v "slave*" cmd.run "/etc/init.d/hadoop-yarn-nodemanager start"

7、集群初始化

到这里,hadoop集群的环境已部署完毕,现在开始初始化集群;

a)、namenode的HA高可用初始化

#在namenode主服务器(192.168.1.1)执行zookeeper的failover功能格式化

sudo -u hdfs hdfs zkfc -formatZK

b)、把zookeeper集群服务启动(10.33.20.140 10.33.20.141 )

/etc/init.d/zookeeper-server start

c)、在namenode主服务器(10.33.20.138)格式化hdfs

#确保是用hdfs用户格式化

sudo -u hdfs hadoop namenode -format

d)、第一次搭建namenode高可用,需要把name.dir下面的数据复制到namenode备服务器(此坑花了好多时间)

#在主服务器(10.33.20.138)执行

tar -zcvPf /tmp/namedir.tar.gz /data/hadoop/dfs/name/

nc -l 9999 < /tmp/namedir.tar.gz

#在备服务器(10.33.20.139)执行

wget 10.33.20.138:9999 -O /tmp/namedir.tar.gz

tar -zxvPf /tmp/namedir.tar.gz

#主从服务都启动

/etc/init.d/hadoop-hdfs-namenode start

/etc/init.d/hadoop-yarn-resourcemanager start

#查看hdfs的web界面

http://10.33.20.138:9080

http://10.33.20.139:9080

#如果在web界面看到两个namenode都是backup状态,那就是auto fail over配置不成功

#查看zkfc日志(/var/log/hadoop-hdfs/hadoop-hdfs-zkfc-nn.dg.s.kingsoft.net.log)

#查看zookeeper集群的日志(/var/log/zookeeper/zookeeper.log)

#现在可以尝试关闭namenode主服务,看是否能主从切换

8、hdfs集群开启

到这里,所有hadoop部署已完成,现在开始把集群启动,验证效果

a)、把所有datanode服务器启动

#还记得之前搭建的saltstack管理工具不,现在开始发挥它的作用,登录saltstack master(10.33.20.138)执行

salt -v "slave*" cmd.run "/etc/init.d/hadoop-hdfs-datanode start"

#查看hdfs web界面,看是否都成为live nodes

#如果没有问题,现在可以尝试hdfs操作

#创建一个tmp目录

sudo -u hdfs hdfs dfs -mkdir /tmp

#创建一个10G大小的空文件,计算它的MD5值,并放入hdfs

dd if=/dev/zero of=/data/test_10G_file bs=1G count=10

md5sum /data/test_10G_file

sudo -u hdfs hdfs dfs -put /data/test_10G_file /tmp

sudo -u hdfs hdfs dfs -ls /tmp

#现在可以尝试关闭一台datanode,然后把刚才的测试文件拉取出来,再算一次MD5看是否一样

sudo -u hdfs hdfs dfs -get /tmp/test_10G_file /tmp/

md5sum /tmp/test_10G_file

9、yarn集群开启

hadoop除了hdfs用于大数据的分布式存储,还有更重要的组件,分布式计算(mapreduce)。现在我们来把mapreducev2 yarn集群启动

a)、在主服务器把resourcemanager服务起来(10.33.20.138)

/etc/init.d/hadoop-yarn-resourcemanager start

b)、把所有nodemanager服务启动

#还是登陆saltstack master,执行

salt -v "slave*" cmd.run "/etc/init.d/hadoop-yarn-nodemanager start"

c)、查看yarn 任务追踪界面(http://10.33.20.138:9081/ )看是否所有nodes都已加入

d)、hadoop自带有基准测试的mapreduce实例,我们利用它来测试yarn环境是否正常

#TestDFSIO测试HDFS的读写性能,写10个文件,每个文件1G.

su hdfs -

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-2.0.0-cdh4.2.1-tests.jar TestDFSIO -write -nrFiles 10 -fileSize 1000

#Sort测试MapReduce

##向random-data目录输出数据

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar randomwriter random-data

##运行sort程序

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar sort random-data sorted-data

##验证sorted-data 文件是否排好序

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-client-jobclient-2.0.0-cdh4.2.1-tests.jar testmapredsort -sortInput random-data \

-sortOutput sorted-data

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Hadoop集群的管理

一、datanode & nodemanager 节点加入

1.修改hosts表,譬如有节点192.168.1.103需要加入

vim /opt/hadoop_scripts/share_data/resolv_host

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.1 nn.dg.hadoop.cn

192.168.1.2 nn2.dg.hadoop.cn

192.168.1.100 dn100.dg.hadoop.cn

192.168.1.101 dn101.dg.hadoop.cn

192.168.1.102 dn102.dg.hadoop.cn

192.168.1.103 dn103.dg.hadoop.cn

2.修改hostname,同步脚本目录,并执行部署

mkdir –p /opt/hadoop_scripts

rsync –avz 192.168.1.1::hadoop_s /opt/hadoop_scripts

sh /opt/hadoop_scripts/deploy/CreateDatanode.sh

sh /opt/hadoop_scripts/deploy/AddHostname.sh

3.开启服务

/etc/init.d/hadoop-hdfs-datanode start

/etc/init.d/hadoop-yarn-nodemanager start

二、修改hadoop配置文件

一般在一个hadoop集群中维护一份hadoop配置,这份hadoop配置需要分发到集群中各个成员。这里的做法是 salt + rsync

#修改namenode主服务器的hadoop配置文件 /etc/hadoop/conf/,然后执行以下命令同步到集群中所有成员

sync_h_conf

#脚本目录也是需要维护的,譬如hosts文件/opt/hadoop_scripts/share_data/resolv_host,修改后执行以下命令同步到集群中所有成员

sync_h_script

#其实这两个命令是我自己定义的salt命令的别名,查看这里/opt/hadoop_scripts/profile.d/hadoop.sh


配置文件(测试有问题)


配置文件(修正后)


部署脚本


线上配置文件

配置文件说明:

yarn-site.xml中一定要有配置项

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

允许HA,默认是false。

参考资料:/article/4379983.html

useradd wangzhaoxiong
sudo usermod -a -G hadoop wangzhaoxiong #将当前用户加入到hadoop组

文章来源:http://note.youdao.com/share/?id=8915af39ef84f25fe1ec4c163d8870f8&type=note#/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: