hadoop+HBase+ZooKeeper+Hive完全分布式集群部署安装

 

1.        系统环境

1.1.   软件版本

下表为本系统环境所安装的软件的版本信息:

软件类别

版本

下载地址

Hadoop

 

官网

zookeeper

 

官网

hbase

 

官网

hive

 

官网

 

 

 

 

 

 

 

1.2.   网络配置

总共7台服务器和一个VIP,详细信息如下:(主机名看下是否合法和能ping通,如果未配置dns强烈建议用IP,或者在每台机器hosts文件写上所有IP的主机名)

主机名

IP地址

备注

hadoop001

192.168.63.201

 

hadoop002

192.168.63.202

 

hadoop003

192.168.63.203

 

hadoop004

192.168.63.204

 

hadoop005

192.168.63.205

 

hadoop006

192.168.63.206

 

hadoop007

192.168.63.207

 

hadoop

192.168.63.200

设置Hadoop的VIP

 

2.        目的

掌握hadoop的安装和部署HDFS,Hbase,Hive等组件。

3.        Hadoop简介

Hadoopt是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX的要求,这样可以流的形式访问文件系统中的数据。详细介绍请参见:

http://zh.wikipedia.org/wiki/Hadoop

http://baike.baidu.com/view/908354.htm

http://hadoop.apache.org/

http://www.blogjava.net/killme2008/archive/2008/06/05/206043.html

 

4.        HDFS安装部署。

4.1.   安装准备

4.1.1.            机器准备

本例stage2环境如下:

IP地址

HDFS

Zookeeper

Hbase

Hive

192.168.63.201

Namenode

-

Hmaster

hive

192.168.63.202

Namenode(second)

-

Hmaster

hive

192.168.63.203

Datanode1

zookeeper

HRegionServer

hive

192.168.63.204

Datanode2

zookeeper

HRegionServer

hive

192.168.63.205

Datanode3

zookeeper

HRegionServer

hive

192.168.63.206

Datanode4

-

HRegionServer

hive

192.168.63.207

Datanode5

-

HRegionServer

hive

 

 

NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;

SecondaryNameNode:是一个小弟,分担大哥namenode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode。

DataNode:Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作。

热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作。

冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失。

另请根据需要配置hostname或dns。另外,zookeeper最好使用独立server。

4.1.2.            Disable IPV6

cat /proc/sys/net/ipv6/conf/all/disable_ipv6 为0 则启动 IPV6

如果你的环境是启动IPV6的,请走以下3步:

n  在各节点上修改/etc/sysctl.conf

在文件末尾添加:

# add for hadoop

net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

net.ipv6.conf.lo.disable_ipv6 = 1

 

n  修改/etc/modprobe.conf (可略)

确保文件中包括以下两条:

alias net-pf-10 off

alias ipv6 off

 

n  修改/etc/ sysconfig/network

确保NETWORKING_IPV6=no。

 

n  修改完后需要重启机器

重启后,通过命令:

# cat /proc/sys/net/ipv6/conf/all/disable_ipv6

查看是否已经disable。如果已经disable,结果是1。

4.1.3.            Jdk安装

略

4.1.4.            创建用户

Hadoop需要统一用户,这使用的是oracle账号。

4.2.   介质下载

我们需要安装的组件是cloudera hadoop,下载网址:

官网

我们需要的组件是hadoop,zookeeper,hbase和hive。

4.3.   安装HDFS Cluster

4.3.1.            复制解压

复制下载好的压缩包到需要安装的所有服务器指定目录,并解压修改目录名。我们的环境下的hadoop及相关组件解析后如下:

[oracle@hadoop001 oracle]$ pwd

/opt/oracle

[oracle@hadoop001 oracle]$ ls

hadoop  hbase  hive  zookeeper

 

4.3.2.            SSH设置

设置从两台namenode无密码登录到其它5台datanode。

n  生成密钥

执行生成rsa密钥的命令:

[oracle@hadoop001]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter fi le in which to save the key (/home/oracle/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identifi cation has been saved in /home/oracle/.ssh/id_rsa.

Your public key has been saved in /home/oracle/.ssh/id_rsa.pub.

这样就生成了一对公钥和私钥,私钥保留在NameNode上,公钥需要分发给其他各datanode节点。注意,不要输入密码,否则NameNode启动的时候连接每个节点都需要你输入密码,当DataNode很多时,这是个灾难。

 

n  分发公钥

由于两个NameNode节点都需要访问各datanode节点,因此我们这里上传到datanode的认证文件分别命名为authorized_keys和authorized_keys2。

Hadoop001上执行:

scp .ssh/id_rsa.pub hadoop003:/home/oracle/.ssh/authorized_keys

scp .ssh/id_rsa.pub hadoop004:/home/oracle/.ssh/authorized_keys

scp .ssh/id_rsa.pub hadoop005:/home/oracle/.ssh/authorized_keys

scp .ssh/id_rsa.pub hadoop006:/home/oracle/.ssh/authorized_keys

scp .ssh/id_rsa.pub hadoop007:/home/oracle/.ssh/authorized_keys

Hadoop002上执行:

scp .ssh/id_rsa.pub hadoop003:/home/oracle/.ssh/authorized2_keys

scp .ssh/id_rsa.pub hadoop004:/home/oracle/.ssh/authorized2_keys

scp .ssh/id_rsa.pub hadoop005:/home/oracle/.ssh/authorized2_keys

scp .ssh/id_rsa.pub hadoop006:/home/oracle/.ssh/authorized2_keys

scp .ssh/id_rsa.pub hadoop007:/home/oracle/.ssh/authorized2_keys

 

此时,可以从两台namenode上使用oracle账号无密码登录到各datanode服务器。

 

4.3.3.            环境变量设置:

修改~/.bashrc增加如下内容:

export HADOOP_HOME=/opt/oracle/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

 

4.3.4.            HDFS配置

HDFS可以在单机上部署进行模拟,本文不做该配置的介绍

本文仅做cluster的配置介绍。

HDFS的配置文件均放在$hadoop/conf目录下。(新版本可能在$hadoop/etc/hadoop/以下配置7台服务器都相同。

n  hadoop-env.sh

定义hadoop环境变量增加下面2行

export HADOOP_HEAPSIZE=6000

export JAVA_HOME=/opt/j2sdk1.6.29

export HADOOP_DATANODE_OPTS="-server -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+HeapDumpOnOutOfMemoryError"

 

core-site.xml

定义HDFS的NameNode地址和端口。

<?xml version=”1.0”?>

<?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

    <property>

    <name>fs.default.name</name>

    <value>hdfs://hadoop:9000</value>       指定namenode 主机名跟端口

</property>

<property>

    <name>io.file.buffer.size</name>

    <value>16384</value>

  </property>

</configuration>

 

n  mapred-site.xml

定义MapReduce的JobTracker的地址和端口。

<?xml version=”1.0”?>

<?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

    <name>mapred.job.tracker</name>

    <value>hadoop:9001</value>

</property>

</configuration>

 

Map-reduce的参数配置,推荐值为(本部分暂时没有优化,这部分请略过):

mapred.map.tasks = number of datanodes x 2
mapred.reduce.tasks = number of atanodes x 2
mapred.tasktracker.map.tasks.maximum = number of CPU Cores of the datanodes – 2
mapred.tasktracker.reduce.tasks.maximum = number of CPU Cores of the datanodes – 2

 

n  hdfs-site.xml

定义文件复制份数。

<?xml version=”1.0”?>

<?xml-stylesheet type=”text/xsl” href=”confi guration.xsl”?>

<!-- Put site-specific property overrides in this file. -->

<configuration>

<property>

    <name>dfs.replication</name>

    <value>3</value>

</property>

<property>
    <name>dfs.http.address</name>
    <value>192.168.63.200:50000</value>    

</property

<property>
    <name>dfs.secondary.http.address</name>
    <value>192.168.63.202:50090</value>         不配此行配了master2都不生效
</property>

<property>

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

    <value>/opt/hadoop/data/dfs</value>

</property>

<property>

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

    <value>/opt/hadoop/name</value>

</property>

<property>

    <name>dfs.datanode.handler.count</name>

    <value>300</value>

</property>

<property>

    <name>dfs.block.size</name>

    <value>33554432</value>

</property>

</configuration>

 

<property>
<name>dfs.http.address</name>
<value>192.168.63.200:50000</value>    

</property>     
<property>
<name>dfs.secondary.http.address</name>
<value>192.168.63.202:51000</value>      
</property>

  1. dfs.http.address:web管理监控端口,采用默认端口(namenode:50070,secondary:50090)时可以省略该配置

 

注意:

1)  在两台namenode上建立以下目录

/opt/hadoop/name

2)  在两台datanode上建立以下目录

/opt/hadoop/data/dfs

 

n  masters

定义Secondary NameNode的地址

注:masters文件用于指定secondary的主机而不是namenode,slaves用于指定datanode和tasktracker,

namenode由core-site.xml fs.default.name指定,jobtracker由mapred-site.xml mapred.job.tracker指定

 hadoop002

 

n  slaves

定义DataNode的地址,可以是主机名或者IP。

hadoop003

hadoop004

hadoop005

hadoop006

hadoop007

 

n  配置同步

将以上修改过的5个配置文件,复制到其它6台机器。

 

4.3.5.            启动HDFS

在NameNode的$hadoop安装目录下,执行如下命令:

[oracle@hadoop001 hadoop]$ bin/hadoop namenode -format  格式化 

[oracle@hadoop001 hadoop]$ sbin/start-all.sh

 

可以在各个节点上运行jps命令查看是否启动成功:

[oracle@hadoop003 ~]$ jps

6160 TaskTracker

6039 DataNode

6879 Jps

6357 HRegionServer

 

同时可访问HDFS监控页面:http://192.168.63.200:50070/dfshealth.jsp查看各节点状况。

 

5.        安装ZooKeeper

在Hadoop的复制解压部分已经完成安装。这部分介绍zookeeper的配置。

 

5.1.   配置ZooKeeper

n  修改zookeepr/conf/zoo.cfg

配置里面的server是zookeeper服务器的主机名。

# The number of milliseconds of each tick

tickTime=2000

maxClientCnxns=0

# The number of ticks that the initial

# synchronization phase can take

initLimit=50

# 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=/opt/hadoop/zookeeperdata

# the port at which the clients will connect

clientPort=2181

server.1=hadoop003:2888:3888

server.2=hadoop004:2888:3888

server.3=hadoop005:2888:3888

 

n  将zookeeper目录复制到各个zookeeper节点上

我们的环境共3台zookeeper,复制到这3台即可。

 

n  新建目录

在各zookeeper服务器上新建dataDir中配置的目录,并添加myid文件,里面内容是该节点对应的server号,如上例hadoop003对应的myid文件内容就是:

1

echo "1" > /opt/hadoop/zookeeperdata/myid

5.2.   启动zookeeper

在各zookeeper节点上运行zkServer.sh start。

cd /opt/oracle/zookeeper

./bin/zkServer.sh start

tail zookeeper.out

 

6.        Hbase的安装

6.1.   安装Hbase

安装Hbase需要先安装好hadoop和ZooKeeper。

Hadoop的复制解压部分已经完成安装。这部分介绍Hbase的配置。

6.2.   配置Hbase

n  修改hbase/conf/hbase-site.xml

<configuration>

<property>

<name>hbase.rootdir</name>

<value>hdfs://hadoop:9000/hbase</value>

<description>The directory shared by region servers.</description>

</property>

<property>

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

  <value>true</value>

</property>

<property>

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

  <value>60000</value>

</property>

<property>

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

  <value>hadoop003,hadoop004,hadoop005</value>

</property>

<property>

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

  <value>300</value>

</property>

<property>

  <name>hbase.hstore.blockingStoreFiles</name>

  <value>70</value>

</property>

<property>

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

  <value>60000</value>

</property>

 

<property>

<name>hbase.regionserver.restart.on.zk.expire</name>

<value>true</value>

<description>

Zookeeper session expired will force regionserver exit.

Enable this will make the regionserver restart.

</description>

</property>

 

<property>

  <name>hbase.replication</name>

  <value>false</value>

</property>

 

 

<property>

  <name>hfile.block.cache.size</name>

  <value>0.4</value>

</property>

 

<property>

  <name>hbase.regionserver.global.memstore.upperLimit</name>

  <value>0.35</value>

</property>

 

<property>

  <name>hbase.hregion.memstore.block.multiplier</name>

  <value>8</value>

</property>

 

<property>

  <name>hbase.server.thread.wakefrequency</name>

  <value>100</value>

</property>

 

<property>

  <name>hbase.master.distributed.log.splitting</name>

  <value>false</value>

</property>

 

<property>

  <name>hbase.regionserver.hlog.splitlog.writer.threads</name>

  <value>3</value>

</property>

<property>

  <name>hbase.hstore.blockingStoreFiles</name>

  <value>20</value>

</property>

<property>

<name>hbase.hregion.memstore.flush.size</name>

<value>134217728</value>

</property>

<property>

  <name>hbase.hregion.memstore.mslab.enabled</name>

  <value>true</value>

</property>

</configuration>

红色部分是可能需要修改的,更多配置项请参考:

http://hbase.apache.org/book.html#configuration

 

n  修改hbase/conf/hbase-env.sh

添加如下4行内容:

export HBASE_HEAPSIZE=4000

export JAVA_HOME=/opt/j2sdk1.6.29

export HBASE_OPTS="-Xmx8g -Xms8g -Xmn128m -XX:+UseParNewGC  -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc  -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  -Xloggc:$HBASE_HOME/logs/gc-$(hostname)-hbase.log"

export HBASE_MANAGES_ZK=false

export HBASE_CLASSPATH=/opt/oracle/hadoop/conf   hadoop配置文件位置

 

 

n  修改hbase/conf/log4j.properties

修改如下内容

hbase.root.logger=WARN,console

log4j.logger.org.apache.hadoop.hbase=WARN

 

 

n  在conf/regionservers中添加所有datanode的节点

添加以下内容:

hadooop003

hadooop004

hadooop005

hadooop006

hadooop007

 

6.3.   启动Hbase

通过Hbase的安装目录执行bin/start-hbase.sh和bin/stop-hbase.sh 脚本启动和停止HBase服务。

启动方法:

[oracle@hadoop003 ~]$ cd /opt/oracle/hbase

[oracle@hadoop003 hbase]$ bin/start-hbase.sh

 报错 

如果jdk没问题可能你下载的包不对 需要 -bin-tar.gz 而不是src

 

7.        Hive的安装

7.1.   安装Hive

Hadoop的复制解压部分已经完成安装。这部分介绍Hive的配置。

7.2.   创建hive的hdfs目录

在namenode的hadoop安装目录下的bin目录下执行创建操作:

[oracle@hadoop001 ~]$ cd /opt/oracle/hadoop/bin/

[oracle@hadoop001 ~]$ ./hadoop fs -mkdir -p /user/hive/warehouse

7.3.   配置conf下的hive-default.xml

找到hive.zookeeper.quorum,配置为如下所示:

# modify|以下修改红色部分

<property>

  <name>hive.zookeeper.quorum</name>

  <value> hadoop003,hadoop004,hadoop005</value>

  <description></description>

</property>

# add|以下添加红色部分

<property>  

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

   <value>hadoop003,hadoop004,hadoop005</value>

   <description>

   </description>

</property>

# default|以下默认即可

<property>

  <name>hive.zookeeper.client.port</name>

  <value>2181</value>

  <description></description>

</property>

7.4.   复制jar包到Hadoop的lib下

第一台服务器都要执行:

cd /opt/oracle/hive/lib

cp -a hbase-0.90.1-cdh3u0.jar zookeeper-3.3.1.jar hive-hbase-handler-0.7.0-cdh3u0.jar /opt/oracle/hadoop/lib

创建hive表:

cd /opt/oracle/hive/bin

hive -auxpath ../lib/hive-hbase-handler-0.7.0-cdh3u0.jar,../lib/hbase-0.90.1-cdh3u0.jar,../lib/zookeeper-3.3.1.jar -hiveconf hbase.zookeeper.quorum=hadoop003

在hive提示符下输入:

CREATE TABLE app_log_rule(id STRING,app_code STRING,merchant_id STRING,order_type STRING,log_level STRING,log_location STRING,disabled STRING,param_map STRING)

STORED BY

'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES (

"hbase.columns.mapping" =

":key,cf1:app_code,cf1:merchant_id,cf1:order_type,cf1:log_level,cf1:log_location,cf1:disabled,cf1:param_map")

TBLPROPERTIES (

"hbase.table.name" = "hbase_app_log_rule"

);

 

CREATE TABLE app_log_queue(id STRING,queue_name STRING,biz_line STRING,app_code STRING)

STORED BY

'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES (

"hbase.columns.mapping" = ":key,cf1:queue_name,cf1:biz_line,cf1:app_code")

TBLPROPERTIES (

"hbase.table.name" = "hbase_app_log_queue"

);

 

 

7.5.   启动Hive JDBC server

到Hive的安装目录,启动Hive服务。

cd /opt/oracle/hive/

bin/hive --service hiveserver &

 

8.        Hadoop环境启动顺序

8.1.   启动HDFS

在NameNode的$hadoop安装目录下,执行如下命令:

[oracle@hadoop001 hadoop]$ bin/hadoop namenode -format

[oracle@hadoop001 hadoop]$ bin/start-all.sh

 

可以在各个节点上运行jps命令查看是否启动成功:

[oracle@hadoop003 ~]$ jps

6160 TaskTracker

6039 DataNode

6879 Jps

 

同时可访问HDFS监控页面:http://hadoop001:50070/dfshealth.jsp查看各节点状况。

8.2.   启动zookeeper

在各zookeeper节点上运行zkServer.sh start。

cd /opt/oracle/zookeeper

./bin/zkServer.sh start

tail zookeeper.out

8.3.   启动Hbase

通过Hbase的安装目录执行bin/start-hbase.sh和bin/stop-hbase.sh 脚本启动和停止HBase服务。

启动方法:

[oracle@hadoop003 ~]$ cd /opt/oracle/hbase

[oracle@hadoop003 hbase]$ bin/start-hbase.sh

 

可以在各个节点上运行jps命令查看是否启动成功,hadoop003~hadoop007上是否有HRegionServer,hadoop001上是否有HMaster:

 

同时可访问HDFS监控页面:http://hadoop001:60010/ 查看是否所有的datanode和zookeeper都活着。

8.4.   启动Hive JDBC server

到Hive的安装目录,启动Hive服务。

cd /opt/oracle/hive/

bin/hive --service hiveserver &

9.        Hadoop环境关闭顺序

9.1.   关闭Hive JDBC Server

用jps命令找到RunJar进程kill掉

9.2.   关闭Hbase

通过Hbase的安装目录执行bin/stop-hbase.sh停止HBase服务,会出现等待的提示符,等待结束才可以执行下一步

9.3.   关闭zookeeper

在各zookeeper节点上运行zkServer.sh stop

cd /opt/oracle/zookeeper

./bin/zkServer.sh stop

tail zookeeper.out

 

9.4.   关闭HDFS

在NameNode的$hadoop安装目录下,执行如下命令:

 [oracle@hadoop001 hadoop]$ bin/stop-all.sh

 

可以在各个节点上运行jps命令查看是否关闭成功

 

10.    常见问题

10.1.             Namenode非正常关闭

在所有的hadoop环境机器上用jps命令,把所有的进程列出,然后kill掉,再按照启动顺序启动

10.2.             Datanode非正常关闭

l  在namenode上启动HDFS

运行hadoop/bin/start-all.sh

l  如果Datanode同时是zookeeper,还需要启动zookeeper

在该datanode上运行zookeeper/bin/zkServer.sh start。

l  在namenode上启动Hbase

运行hbase/bin/start-hbase.sh

10.3.             停止一台非master的服务器

l  在该台服务器上运行:

hadoop/bin/hadoop-daemon.sh stop datanode

hadoop/bin/hadoop-daemon.sh stop tasktracker

hbase/bin/hbase-daemon.sh stop regionserver

l  在http://hadoop001:50070/dfshealth.jsp 查看该节点是否已经变成dead nodes,变成dead nodes之后,就可以停止该台服务器

在刚停止服务的时候,看到的截图如下:

 

当停止服务成功,看到的截图如下:

 

l  重启服务器以后,在hadoop001上运行,启动服务:

hadoop/bin/start-all.sh

hbase/bin/start-hbase.sh

11.    监控端口

11.1.             Namenode监控端口(hadoop001):

60010,60000,50070,50030,9000,9001,10000

11.2.             zookeeper监控端口(hadoop003,hadoop004,hadoop005)

2181

11.3.             Datanode监控端口(hadoop003,hadoop004,hadoop005,hadoop006,hadoop007)

60030,50075

 

posted @ 2017-07-19 20:09  林夕之风  阅读(4204)  评论(0)    收藏  举报