您的位置:首页 > 运维架构

dinfo-oec hadoop部署方案

2016-06-21 09:37 489 查看

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

防火墙问题:防火墙是比较麻烦的一件事情。由于需要开放的端口比较多所以比较容易出问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: