dinfo-oec hadoop部署方案

Hadoop2.6整合hbase1.1.0分布式环境搭建

环境准备

三台机器Linux机器,这里使用CentOS-6.5-x86_64:

192.168.1.120 master

192.168.1.121 slave1

192.168.1.122 slave2

安装包准备

jdk-7u79-linux-x64.tar.gz

hadoop-2.6.0.tar.gz

hbase-1.1.0-bin.tar.gz

zookeeper-3.4.6.tar.gz

集群规划

主机名

IP

安装软件

运行进程

master

192.168.1.120

Hadoop、JDK、Zookeeper、HBase

NameNode、QuorumPeerMain 、JournalNode、DFSZKFailoverController、HMaster、ResourceManager、DataNode、NodeManager

slave1

192.168.1.121

Hadoop、JDK、Zookeeper、HBase

NameNode、QuorumPeerMain 、JournalNode、DFSZKFailoverController、HMaster、HRegionServer、DataNode、NodeManager

slave2

192.168.1.122

Hadoop、JDK、Zookeeper、HBase

QuorumPeerMain 、JournalNode、HRegionServer、DataNode、NodeManager

说明:

在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。

hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode

这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态。

系统基本环境配置

1)修改主机名 :
vim/etc/sysconfig/network 文件,可以不修改,一旦修改了主机名后需要重启机器。

2)配置静态 IP:

一般情况都建议配置使用静态IP,如果网络环境经常变动就没必要使用静态IP了。

vim/etc/sysconfig/network-scripts/ifcfg-eth0

重新启动网络服务:service network restart

3)配置ip和主机名映射,vim/etc/hosts 文件。

可以通过scp 命令直接将文件同步到其它机器。

4)创建用户和用户组
创建Hadoop用户组:groupadd Hadoop

创建hadoop用户,并添加到Hadoop组中:

设置用户密码: passwd hadoop

5)关闭SELinux

修改selinux配置文件: vim /etc/selinux/config 文件。

修改完后需要重启机器,如果不想重启可以使用临时关闭命令:


其它机器做同样配置。

6)集群SSH免密码登陆:

切换到hadoop用户,由于集群安装和启动使用hadoop用户身份,在配置免密码登陆时也必须使用hadoop用户。
ssh-keygen -t rsa 四次Enter键。

会在当前用户家目录下的隐藏文件夹.ssh目录下生产密匙:

cp id_rsa.pub authorized_keys

其它机器重复上述步骤。
配置master到slave1和slave2的免密码登陆:
master本机也需要免密码:

ssh-copy-id -i com.brian.hadoop.cloud.master
查看master的authorized_keys文件:
cat authorized_keys

master到slave1:
ssh-copy-id -i com.brian.hadoop.cloud.slave1

查看slave1的authorized_keys:

master到slave2:
ssh-copy-id -i com.brian.hadoop.cloud.slave2

查看slave2的authorized_keys文件:

由于需要配置Hadoop HA,另外一台机器也需要配置免密码登陆,配置slave1到master和slave2的免密码登陆:
slave1本机免密码:
ssh-copy-id -i com.brian.hadoop.cloud.slave1

slave1到master:
ssh-copy-id -i com.brian.hadoop.cloud.master

slave1到slave2:

ssh-copy-id -i com.brian.hadoop.cloud.slave2

测试:

在master机器上登陆到slave1和slave2:

ssh com.brian.hadoop.cloud.slave1


ssh com.brian.hadoop.cloud.slave2

同样的在slave1机器上登陆到master和slave2,没有提示输入密码即免密码配置完成。

安装目录规划及创建

1)Hadoop安装目录:
/opt/hadoop_cloud/Hadoop

2)Hadoop数据存放目录:
/apps/Hadoop

3)HBase安装目录:
/opt/hadoop_cloud/HBase

4)HBase数据存放目录:
/apps/HBase

5)Zookeeper安装目录:
/opt/hadoop_cloud/Zookeeper

6)Zookeeper数据存放目录:
/apps/Zookeeper/data

/apps/Zookeeper/dataLogs

目录结构:

7)JDK安装目录:
/opt/hadoop_cloud/JDK

8)查看目录结构:
ll /opt/hadoop_cloud/

ll -R /apps/

9)同步到其它机器:
scp -r /opt/hadoop_cloud/ com.brian.hadoop.cloud.slave1:/opt/

scp -r /apps/ com.brian.hadoop.cloud.slave1:/


scp -r /opt/hadoop_cloud/com.brian.hadoop.cloud.slave2:/opt/

scp -r /apps/ com.brian.hadoop.cloud.slave2:/

10) 修改目录权限:
chown hadoop:Hadoop -R /opt/hadoop_cloud/

chown hadoop:Hadoop -R /apps/

其它机器也需要修改权限。

11) 修改安装包用户权限:
chown hadoop:Hadoop *.gz

安装JDK

1)解压jdk-7u79-linux-x64.tar.gz 到 /opt/hadoop_cloud/JDK 目录下:
tar -xf jdk-7u79-linux-x64.tar.gz -C /opt/hadoop_cloud/JDK/

2)配置JDK环境变量:
在/etc/profile.d/ 目录下创建一个名为jdk_env.sh的shell脚本:
vim /etc/profile.d/jdk_env.sh

立即生效:source /etc/profile.d/jdk_env.sh

也可以直接修改/etc/profile文件,添加的内容是一样的。

3)同步配置:
scp -r/opt/hadoop_cloud/JDK/jdk/ com.brian.hadoop.cloud.slave1:/opt/hadoop_cloud/JDK/

scp /etc/profile.d/jdk_env.shcom.brian.hadoop.cloud.slave1:/etc/profile.d/


scp -r/opt/hadoop_cloud/JDK/jdk/ com.brian.hadoop.cloud.slave2:/opt/hadoop_cloud/JDK/

scp /etc/profile.d/jdk_env.sh com.brian.hadoop.cloud.slave2:/etc/profile.d/


分别登陆到其它机器上进行以下操作:
立即生效:source /etc/profile.d/jdk_env.sh

4)切换用户:
安装完JDK后,需要切换到hadoop用户来安装Hadoop相关组件。

安装配置Zookeeper

1)解压 zookeeper-3.4.6.tar.gz 到/opt/hadoop_cloud/Zookeeper/:
tar -xf zookeeper-3.4.6.tar.gz -C /opt/hadoop_cloud/Zookeeper/

2)复制Zookeeper配置文件:
cp zoo_sample.cfg zoo.cfg

3)修改Zookeeper配置文件:
vim zoo.cfg

4)创建myid文件:
在dataDir配置的目录下创建一个myid文件。
echo "1" > /apps/Zookeeper/data/myid

不同的主机上myid文件的内容是不同的。

5)同步配置:
scp -r /opt/hadoop_cloud/Zookeeper/zookeeper-3.4.6/ com.brian.hadoop.cloud.slave1:/opt/hadoop_cloud/Zookeeper/

scp /apps/Zookeeper/data/myidcom.brian.hadoop.cloud.slave1:/apps/Zookeeper/data/

修改myid文件内容:
echo "2" > /apps/Zookeeper/data/myid


scp -r /opt/hadoop_cloud/Zookeeper/zookeeper-3.4.6/ com.brian.hadoop.cloud.slave2:/opt/hadoop_cloud/Zookeeper/

scp /apps/Zookeeper/data/myidcom.brian.hadoop.cloud.slave2:/apps/Zookeeper/data/

修改myid文件内容:
echo "3" > /apps/Zookeeper/data/myid

6)防火墙开放端口(使用root用户):
iptables -I INPUT -d 192.168.1.120 -p tcp --dport 2181 -j ACCEPT
iptables -I INPUT -d 192.168.1.120 -p tcp --dport 2888 -j ACCEPT
iptables -I INPUT -d 192.168.1.120 -p tcp --dport 3888 -j ACCEPT
查看:iptables -nL

iptables -A OUTPUT -d 192.168.1.120 -p tcp --dport 2181 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.120 -p tcp --dport 2888 -j ACCEPT
iptables –A OUTPUT -d 192.168.1.120 -p tcp --dport 3888 -j ACCEPT

保存配置并重新启动服务:
service iptables save
service iptables restart

其它机器也要开放相应端口。

7)启动Zookeeper服务(hadoop用户):
cd /opt/hadoop_cloud/Zookeeper/zookeeper-3.4.6/bin/
./zkServer.sh start

查看Zookeeper服务状态:
master: ./zkServer.sh status

slave1: ./zkServer.sh status

slave2: ./zkServer.sh status

Zookeeper配置完成。

安装配置Hadoop

1)解压 hadoop-2.6.0.tar.gz 到/opt/hadoop_cloud/Hadoop/ 目录下:
tar -xf hadoop-2.6.0.tar.gz -C /opt/hadoop_cloud/Hadoop/

2)配置core-site.xml:
vim ${HADOOP_HOME}/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hacluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/apps/Hadoop/tmp</value>
</property>
<property>
<name>io.native.lib.available</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>com.brian.hadoop.cloud.master:2181,com.brian.hadoop.cloud.slave1:2181,com.brian.hadoop.cloud.slave2:2181</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>false</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value>
</property>
</configuration>

3)配置hdfs-site.xml
<configuration>

<property>

<name>dfs.nameservices</name>

<value>hacluster</value>

</property>

<property>

<name>dfs.namenode.rpc.port</name>

<value>9000</value>

</property>

<property>

<name>dfs.ha.namenodes.hacluster</name>

<value>nn1,nn2</value>

</property>

<property>

<name>dfs.namenode.http-address.hacluster.nn1</name>

<value>com.brian.hadoop.cloud.master:50070</value>

</property>

<property>

<name>dfs.namenode.rpc-address.hacluster.nn1</name>

<value>com.brian.hadoop.cloud.master:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.hacluster.nn2</name>

<value> com.brian.hadoop.cloud.slave1:50070</value>

</property>

<property>

<name>dfs.namenode.rpc-address.hacluster.nn2</name>

<value> com.brian.hadoop.cloud.slave1:9000</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value> qjournal://com.brian.hadoop.cloud.master:8485;com.brian.hadoop.cloud.slave1:8485;com.brian.hadoop.cloud.slave2:8485/hacluster</value>

</property>

<property>

<name>dfs.journalnode.edits.dir</name>

<value> /apps/Hadoop/journalnode</value>

</property>

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<property>

<name>dfs.client.failover.proxy.provider.hacluster</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>/home/hadoop/.ssh/id_rsa</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value> file:/apps/Hadoop/dfs/namenode</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value> file:/apps/Hadoop/dfs/datanode</value>

</property>

<property>

<name>dfs.journalnode.http-address</name>

<value>0.0.0.0:8480</value>

</property>

<property>

<name>dfs.journalnode.rpc-address</name>

<value>0.0.0.0:8485</value>

</property>

4)配置mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>0.0.0.0:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>0.0.0.0:19888</value>

</property>

<property>

<name>mapreduce.remote.os</name>

<value>Linux</value>

</property>

5)配置yarn-site.xml

<configuration>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>com.brian.hadoop.cloud.master</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

6)修改slaves文件:

7)同步配置到其它机器:

scp –r /opt/hadoop_cloud/Hadoop/hadoop-2.6.0/com.brian.hadoop.cloud.slave1:/opt/hadoop_cloud/Hadoop/
scp –r /opt/hadoop_cloud/Hadoop/hadoop-2.6.0/com.brian.hadoop.cloud.slave2:/opt/hadoop_cloud/Hadoop/

8)防火墙开放端口(root用户):
master和slave1防火墙开放端口一致,slave2略有不同,少了9000和50070端口
master、slave1:

iptables -I INPUT -d 192.168.1.120-p tcp --dport 9000 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 50070 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 50010 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 8485 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 8480 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 8031 -j ACCEPT
iptables -I INPUT -d 192.168.1.120 -p tcp --dport 8088 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 8042 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 10020 -j ACCEPT

iptables -I INPUT -d 192.168.1.120-p tcp --dport 19888 -j ACCEPT

iptables -A OUTPUT -d192.168.1.120 -p tcp --dport 9000 -j ACCEPT

iptables -A OUTPUT-d 192.168.1.120-p tcp --dport 50070 -j ACCEPT

iptables -A OUTPUT -d192.168.1.120 -p tcp --dport 50010 -j ACCEPT

iptables –A OUTPUT -d192.168.1.120 -p tcp --dport 8485 -j ACCEPT

iptables -A OUTPUT -d192.168.1.120 -p tcp --dport 8480 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.120-p tcp --dport 8031 -j ACCEPT

iptables -A OUTPUT -d192.168.1.120 -p tcp --dport 8088 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.121 -p tcp --dport 8042 -j ACCEPT

iptables -A OUTPUT -d192.168.1.120 -p tcp --dport 10020 -j ACCEPT

iptables -A OUTPUT -d192.168.1.120 -p tcp --dport 19888 -j ACCEPT


slave2:

iptables -I INPUT -d 192.168.1.122-p tcp --dport 8485 -j ACCEPT

iptables -I INPUT -d 192.168.1.122-p tcp --dport 8480 -j ACCEPT

iptables -I INPUT -d 192.168.1.122-p tcp --dport 8031-j ACCEPT
iptables -I INPUT -d 192.168.1.122 -p tcp --dport 8042 -j ACCEPT

iptables -I INPUT -d 192.168.1.122-p tcp --dport 50010 -j ACCEPT

iptables -I INPUT -d 192.168.1.122-p tcp --dport 10020 -j ACCEPT

iptables -I INPUT -d 192.168.1.122-p tcp --dport 19888 -j ACCEPT

iptables -A OUTPUT -d192.168.1.122 -p tcp --dport 8485 -j ACCEPT

iptables -A OUTPUT -d192.168.1.122 -p tcp --dport 8480 -j ACCEPT

iptables -A OUTPUT -d192.168.1.122 -p tcp --dport 8031 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.122 -p tcp --dport 8042 -j ACCEPT

iptables -A OUTPUT -d192.168.1.122 -p tcp --dport 50010 -j ACCEPT

iptables -A OUTPUT -d192.168.1.122 -p tcp --dport 10020 -j ACCEPT

iptables -A OUTPUT -d192.168.1.122 -p tcp --dport 19888 -j ACCEPT


保存更改:service iptables save
重启服务:service iptables restart

9)配置Hadoop环境变量(root用户):
vim /etc/profile.d/hadoop_env.sh

立即生效:source /etc/profile.d/hadoop_env.sh
环境变量测试:hadoop version

同步到其它机器。

10) 启动journalnode(master上启动):
hadoop-daemons.sh start journalnode

在slave1上使用jps命令查看进程:

在slave2上使用jps查看进程:

Journalnode进程启动成功!

11) 格式化HDFS

在master上执行hdfs namenode –format:

看到以上信息说明格式化成功,格式化后会在根据core-site.xml中的hadoop.tmp.dir配置的目录下生产一些目录和文件。这里是/apps/Hadoop/ 目录:

将生产的目录拷贝到slave1的/apps/Hadoop/ 目录:
scp -r dfs/com.brian.hadoop.cloud.slave1:/apps/Hadoop/


12) 格式化ZK(在master上格式化):

hdfs zkfc –formatZK

输出没有报错且看到以上信息说明Zookeeper格式化成功。

13) 启动HDFS(在master上执行):
start-dfs.sh

14) 测试HDFS:
hadoop fs –ls /

创建文件:

15) 通过web页面查看:
访问:http://192.168.1.120:50070

访问:http://192.168.1.121:50070

HDFS HA配置成功!

16) 启动YARN(在master上执行):
start-yarn.sh

17) 测试YARN:
先上传文件到hdfs上:

运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount/user /out
查看输出:hadoop fs -ls /out

通过web页面查看:
访问:http://192.168.1.120:8088


18) 集群运行进程检查:
master(7个进程):

slave1(6个进程):

slave2(4个进程):

至此hadoop启动成功!

安装配置HBase

1)解压 hbase-1.1.0-bin.tar.gz 到/opt/hadoop_cloud/HBase/ 目录下:

2)配置HBase:
修改/opt/hadoop_cloud/HBase/hbase-1.1.0/conf 目录下的hbase-site.xml:
vim hbase-site.xml:

<configuration>

<property>

<name>hbase.rootdir</name>

<value>hdfs://hacluster/hbase</value>

</property>

<property>

<name>hbase.master.port</name>

<value>16000</value>

</property>

<property>

<name>hbase.tmp.dir</name>

<value>/apps/HBase/tmp</value>

</property>

<property>

<name>hbase.regionserver.port</name>

<value>16020</value>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value> com.brian.hadoop.cloud.master,com.brian.hadoop.cloud.slave1,com.brian.hadoop.cloud.slave2</value>

</property>

<property>

<name>zookeeper.session.timeout</name>

<value>12000</value>

</property>

<property>

<name>zookeeper.znode.parent</name>

<value>/hbase</value>

</property>

<property>

<name>zookeeper.znode.rootserver</name>

<value>hbase-region-server</value>

</property>

<property>

<name>hbase.zookeeper.property.dataDir</name>

<value>/apps/HBase/zookeeper</value>

</property>

<property>

<name>hbase.zookeeper.property.clientPort</name>

<value>2181</value>

</property>

<property>

<name>hbase.master.handler.count</name>

<value>25</value>

</property>

<property>

<name>dfs.namenode.rpc.port</name>

<value>9000</value>

</property>

<property>

<name>hbase.security.authorization</name>

<value>false</value>

</property>

</configuration>

3)修改regionservers:
vim regionservers

4)同步配置到其它服务器:
scp -r /opt/hadoop_cloud/HBase/hbase-1.1.0/com.brian.hadoop.cloud.slave1:/opt/hadoop_cloud/HBase/
scp -r /opt/hadoop_cloud/HBase/hbase-1.1.0/ com.brian.hadoop.cloud.slave2:/opt/hadoop_cloud/HBase/

5)防火墙开放端口(root用户):

master:
iptables -I INPUT -d 192.168.1.120 -p tcp --dport 16000 -j ACCEPT

iptables -I INPUT -d 192.168.1.120 -p tcp --dport 16010-j ACCEPT

iptables -A OUTPUT -d 192.168.1.120 -p tcp --dport16000 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.120 -p tcp --dport16010 -j ACCEPT

slave1:
iptables -I INPUT -d 192.168.1.121 -p tcp --dport 16000 -j ACCEPT

iptables -I INPUT -d 192.168.1.121 -p tcp --dport 16010-j ACCEPT

iptables -I INPUT -d 192.168.1.121 -p tcp --dport16020 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.121 -p tcp --dport16000 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.121 -p tcp --dport16010 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.121 -p tcp --dport16020 -j ACCEPT

slave2:

iptables -I INPUT -d 192.168.1.122 -p tcp --dport16020 -j ACCEPT

iptables -A OUTPUT -d 192.168.1.122 -p tcp --dport16020 -j ACCEPT

保存更改:service iptables save
重启服务:service iptables restart

6)启动 HBase(在master上启动):
cd /opt/hadoop_cloud/HBase/hbase-1.1.0/bin/
./start-hbase.sh


在slave1上在单独启动一个HMaster,实现HBase HA:
cd /opt/hadoop_cloud/HBase/hbase-1.1.0/bin/
./hbase-daemon.sh start master

slave2:

7)测试HBase:
在master上执行hbase shell:
cd /opt/hadoop_cloud/HBase/hbase-1.1.0/bin
./hbase shell

至此HBase配置成功。

8)通过web页面查看HBase相关信息:
访问:http://192.168.1.120:16010/master-status

访问:http://192.168.1.121:16010/master-status

可以看到当前Master是stadby节点。

常见安装问题总结:

1)权限问题:在搭建过程中由于需要频繁的切换用户,所以有时会涉及到权限。安装或操作前需要仔细检查文件或目录是否具有权限。

防火墙问题:防火墙是比较麻烦的一件事情。由于需要开放的端口比较多所以比较容易出问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值