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

历时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。
useradd wangzhaoxiong
sudo usermod -a -G hadoop wangzhaoxiong #将当前用户加入到hadoop组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东境物语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值