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

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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/9173.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论