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。

生成密鑰

執行生成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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM