http://archive.cloudera.com/cdh5/cdh/5/
所有的软件都下载cloudera公司的chh5.3.6这个版本,cloudera的CDH不需要考虑软件之间的使用的jar包版本不一致问题解决
三台服务器(Linux系统64位)
创建新用户用户
useradd css
passwd css
123456
所有软件包存放位置为 /home/css/opt/softwares
所有软件的解压目录为 /home/css/opt/modules
1》配置JAVA环境
java -version 查看Java安装的jdk的版本
rpm -qa | grep jdk (查看安装的jdk)
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64 (删除Linux自带的jdk)
安装jdk
下载jdk jdk-7u79-linux-x64.tar.gz
解压
tar -zxf jdk-7u79-linux-x64.tar.gz -C /home/css/opt/modules
增加环境变量
vim /etc/profile
##JAVA_HOME
export JAVA_HOME=/home/css/opt/modules/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar1>
注:从机设备都利用scp 复制一份jdk到相应的目录,手动修改/etc/profile
2》各个服务器配置
#关闭所以服务器的防火墙
service iptables stop
修改主机IP地址,使集群在同一网段相连
#ifconfig 查看服务器用的网卡(有bond0 eth0 eth2等等),假如选择的网卡为eth0
如果显示网卡没有启动,那么我们敲入代码:ifup eth0启动网卡。
#vim /etc/sysconfig/network-scripts/ifcfg-eth0 对IPADDR进行修改
修改主机名
#vim /proc/sys/kernel/hostname
配置远程访问域名
#vim /etc/hosts
添加
10.0.21.1 hadoop-senior01.ibeifeng.com hadoop-senior01
10.0.21.2 hadoop-senior02.ibeifeng.com hadoop-senior02
10.0.21.3 hadoop-senior03.ibeifeng.com hadoop-senior03
主节点分布:
hadoop-senior01 hadoop-senior02 hadoop-senior03
namenode namenode
resourcemanager resourcemanager
hdfs和mapreduce 都是HA
hadoop-senior01
节点:NameNode、datanode,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper),DFSZKFailoverController(ZKFC),JobHistoryServer
hadoop-senior02
节点:NameNode、datanode,ResourceManager,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper),DFSZKFailoverController(ZKFC)
hadoop-senior03
节点:datanode,ResourceManager,NodeManager,JournalNode,QuorumPeerMain(ZooKeeper)
3》SSH
配置ssh免密码登录(三个节点hadoop-senior01、hadoop-senior02、hadoop-senior03)
主节点配置:
首先到用户主目录(cd ~),ls -a查看文件,其中一个为“.ssh”,该文件价是存放密钥的。待会我们生成的密钥都会放到这个文件夹中。
现在执行命令生成密钥: ssh-keygen -t rsa -P "" (使用rsa加密方式生成密钥)回车后,会提示三次输入信息,我们直接回车即可。
进入文件夹cd .ssh (进入文件夹后可以执行ls -a 查看文件)
将生成的公钥id_rsa.pub 内容追加到authorized_keys(执行命令:cat id_rsa.pub >> authorized_keys)
从节点配置:
以同样的方式生成秘钥(ssh-keygen -t rsa -P "" ),然后s1和s2将生成的id_rsa.pub公钥追加到m1的authorized_keys中)
在s1中执行命令:scp id_rsa.pub m1:/root/.ssh/id_rsa.pub.s1 ,在s2中执行命令:scp id_rsa.pub m1:/root/.ssh/id_rsa.pub.s2
进入m1执行命令:cat id_rsa.pub.s1 >> authorized_keys ,cat id_rsa.pub.s1 >> authorized_keys
最后将生成的包含三个节点的秘钥的authorized_keys 复制到s1和s2的.ssh目录下( scp authorized_keys s1:/root/.ssh/, scp authorized_keys s2:/root/.ssh/)
然后可以删除复制的临时文件 id_rsa.pub.s1和 id_rsa.pub.s2
4》安装zookeeper
cd /home/css/opt/modules/zookeeper-3.4.5-cdh5.3.6/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
#-----
修改以下内容
dataDir=/home/css/opt/modules/zookeeper-3.4.5-cdh5.3.6/tmp
在最后添加:
server.1=hadoop-senior01:2888:3888
server.2=hadoop-senior02:2888:3888
server.3=hadoop-senior03:2888:3888
保存退出
#-----
#然后创建一个tmp文件夹
mkdir -p /hadoop/zookeeper-3.4.5-cdh5.3.6/tmp
#再创建一个空文件
touch /hadoop/zookeeper-3.4.5-cdh5.3.6/tmp/myid
#最后向该文件写入ID,填入myid文件里
hadoop-senior01机器:
echo 1 > /hadoop/zookeeper-3.4.6/tmp/myid
注:利用scp复制zookeeper到其他服务器,并添加相同的目录和修改myid内容
hadoop-senior02机器:
echo 2 > /hadoop/zookeeper-3.4.6/tmp/myid
hadoop-senior03机器:
echo 3 > /hadoop/zookeeper-3.4.6/tmp/myid
5》安装hadoop
修改hadoop配置文件/home/css/opt/modules/hadoop-2.5.0-cdh5.3.6/etc/hadoop
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.nn1</name>
<value>hadoop-senior01:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.nn1</name>
<value>hadoop-senior01:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.nn2</name>
<value>hadoop-senior02:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.nn2</name>
<value>hadoop-senior02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop-senior01:8485;hadoop-senior02:8485;hadoop-senior03:8485/cluster1</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
core-site.xml:
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/css/opt/modules/hadoop-2.5.0-cdh5.3.6/data/tmp</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value> hadoop-senior01:2181, hadoop-senior02:8020, hadoop-senior03:8020 </value>
</property>
***手动创建hadoop.tmp.dir目录
yarn.xite.xml
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hadoop-senior02</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hadoop-senior03</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hadoop-senior01:2181,hadoop-senior02:2181,hadoop-senior03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
salve
(三台服务器做主节点也做从节点 DataNode nodemanager)
hadoop-senior01
hadoop-senior02
hadoop-senior03
先复制mapred-site.xml.template为mapred-site.xml然后修改mapred-site.xml
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop-senior01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop-senior01:19888</value>
</property>
hadoop-env.sh,yarn-env.sh,mapred-env.sh
修改JAVA_HOME
export JAVA_HOME=/home/css/opt/modules/jdk1.7.0_79
配置hadoop的环境变量
/etc/profile
export HADOOP_HOME=/home/css/opt/modules/hadoop-2.5.0-cdh5.3.6
export PATH=$PATH:$HADOOP_HOME/bin
注:利用scp复制hadoop到其他服务器,手动增加/etc/profile的hadoop环境变量
6》启动zookeeper集群(分别在hadoop-senior01,hadoop-senior02、hadoop-senior03上启动zookeeper)
bin/zkServer.sh start
bin/zkServer.sh status 有一个是leader 剩下的是follow
7》启动journalnode(分别在hadoop-senior01、hadoop-senior02、hadoop-senior03上启动journalnode)注意只有第一次需要这么启动,之后启动hdfs会包含journalnode。
bin/hadoop-daemon.sh start journalnode
8》选择一台NameNode机器格式化HDFS
bin/hdfs namenode -format
启动:hadoop-2.5.0-cdh5.3.6]# sbin/hadoop-daemons.sh start namenode
另一台NameNode服务器
bin/hdfs namenode -bootstrapStandby
启动:hadoop-2.5.0-cdh5.3.6]# sbin/hadoop-daemons.sh start namenode
9》选择一台NameNode服务器格式化ZKFC(在drguo1上执行)
bin/hdfs zkfc -formatZK
启动
sbin/hadoop-daemons.sh start zkfc
10》启动HDFS其他节点(在hadoop-senior01上执行)
sbin/hadoop-daemons.sh start datanode
11》启动YARN(在hadoop-senior02上执行)
sbin/yarn-daemons.sh start resourcemanager
sbin/yarn-daemons.sh start nodemanager
12》启动historyServer(log)服务器
sbin/hadoop-daemons.sh start historyserver
13》查看NameNode状态
bin/hdfs haadmin -getServiceState nn1
bin/hdfs haadmin -getServiceState nn2
hdfs haadmin -transitionToActive nn1 --forcemanual
可以看到有一个NameNode是active一个是standby。强制转换一个active为standby。zkfc的错误转移极致就会将另一台standy机器转为active
14》集群时间同步
如果集群节点时间不同步,可能会出现节点宕机或引发其它异常问题,所以在生产环境中一般通过配置NTP服务器实现集群时间同步。本集群在hadoop-master1节点设置ntp服务器,具体方法如下:
// 查看是否安装ntp
# rpm -qa | grep ntp
// 安装ntp
# yum install -y ntp
// 配置时间服务器
# vim /etc/ntp.conf
# 禁止所有机器连接ntp服务器
restrict default ignore
# 允许局域网内的所有机器连接ntp服务器
restrict 172.16.20.0 mask 255.255.255.0 nomodify notrap
# 使用本机作为时间服务器
server 127.127.1.0
// 启动ntp服务器
# service ntpd start
// 设置ntp服务器开机自动启动
# chkconfig ntpd on
集群其它节点通过执行crontab定时任务,每天在指定时间向ntp服务器进行时间同步,方法如下:
// 切换root用户
// 执行定时任务,每天00:00向服务器同步时间,并写入日志
# crontab -e
0 0 * * * /usr/sbin/ntpdate hadoop-senior01>> /home/hadoop/ntpd.log
// 查看任务
# crontab -l