数据库生态圈(RDB & NoSQL & Bigdata)——专注于关系库优化(Oracle & Mysql & Postgresql & SQL Server )

https://www.cnblogs.com/lhdz_bj
http://blog.itpub.net/8484829
https://blog.csdn.net/tuning_optmization
https://www.zhihu.com/people/lhdz_bj

导航

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

本文源自:https://www.cnblogs.com/linxizhifeng/p/7207655.html

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。

生成密钥

执行生成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很多时,这是个灾难。

 

分发公钥

由于两个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台服务器都相同。

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>

 

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

 

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

 

masters

定义Secondary NameNode的地址

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

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

 hadoop002

 

slaves

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

hadoop003

hadoop004

hadoop005

hadoop006

hadoop007

 

配置同步

将以上修改过的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

修改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

 

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

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

 

新建目录

在各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

修改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

 

修改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

 

 

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 on 2021-02-02 16:49  lhdz_bj  阅读(699)  评论(0编辑  收藏  举报