Hadoop、ZooKeeper及HBase的安裝配置過程(絕對可用)

來源:互聯網
上載者:User

這兩天正在為公司配置一個Hadoop叢集(以及HBase),作為儲存及計算海量資料的平台。現在將安裝的過程貼出來,僅供參考。


Hadoop的配置
  • 叢集的物理配置情況

叢集IP: 172.16.38.213 ~ 172.16.38.218

(hostname分別為master、slave0、slave1、slave2、slave3、slave4)

使用者名稱/密碼:root/123456

其中,master作為jobtracker和namenode,其餘節點作為tasktracker和datanode

  • 節點角色指派

修改每個節點的 /etc/hosts檔案,追加如下內容

172.16.38.213 master

172.16.38.214 slave0

172.16.38.215 slave1

172.16.38.216 slave2

172.16.38.217 slave3

172.16.38.218 slave4

再修改每個節點自己的hostname,如對於master,將其/etc/sysconfig/network檔案改為

    NETWORKING=yes

    HOSTNAME=master

然後,運行

    hostname master

退出,再進入輸入env | grep hostname發現修改生效
  • 為每個節點設定無密碼ssh登入

1、 在master節點上運行

    ssh-keygen –t rsa


2、 在master節點上,首先

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

然後

   
chmod 644 ~/.ssh/authorized_keys  


3、將master節點上的~/.ssh/id_rsa.pub檔案分別scp到每個slave節點上,如

    scp ~/.ssh/id_rsa.pub root@slave0:/home


4、 登入每個slave節點,運行(以slave0為例)

     cat /home/id_rsa.pub >> ~/.ssh/authorized_keys


5、 修改檔案許可權

    chmod 600 ~/.ssh/authorized_keys


6、從第3步開始迴圈,直至配置好每個slave節點

  • 下載Hadoop

下載hadoop-1.1.2,放在/home/LTE目錄下,用命令 tar zxvf hadoop-1.1.2.tar.gz解壓,在/home/LTE下組建目錄hadoop-1.1.2


  • 修改HADOOP的設定檔

修改conf/core-site.xml檔案

<configuration>

   <property>

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

       <value>hdfs://master:54310</value>

   </property>

   <property>

       <name>hadoop.tmp.dir</name>

       <value>/home/LTE/hadoop/tmp</value>

   </property>

</configuration>


在conf/hadoop-env.xml檔案裡增加

   export JAVA_HOME=/usr/local/java/jdk1.6.0_32


修改conf/hdfs-site.xml檔案:

<configuration>

   <property>

       <name>dfs.replication</name>

       <value>2</value>

   </property>

   <property>

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

       <value>/home/LTE/hadoop/data</value>

   </property>

   <property>

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

       <value>/home/LTE/hadoop/name</value>

    </property>

</configuration>



    修改conf/mapred-site.xml檔案:   

<configuration>

   <property>

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

       <value>master:9001</value>

   </property>

   <property>

       <name>mapred.local.dir</name>

       <value>/home/LTE/hadoop/temp</value>

   </property>

</configuration>



conf/masters檔案
master


conf/slaves檔案

slave0

slave1

slave2

slave3

slave4


從master節點上,將/home/LTE目錄依次拷貝到每個slave節點的/home目錄下
  • 啟動Hadoop

    在master節點的/home/LTE/hadoop-1.1.2目錄下進行HDFS的格式化

       bin/hadoop namenode –format


    格式化後,HDFS中的內容會全部丟失
 
    然後,開啟Hadoop叢集
       bin/start-all.sh
 
    此時,Hadoop叢集已經啟動,可以提交運算的作業了。



HBase的配置

安裝HBase時,不僅需要HBase本身,還需要ZooKeeper來提供、管理和協調分布式服務。在運行HBase之前,也需要先啟動ZooKeeper服務。

另外,有些版本的HBase只能支援特定版本的Hadoop,如下表:

在本文中,採用了Hadoop-1.1.2,HBase-0.94.8,以及ZooKeeper-3.4.5

由於ZooKeeper採用了Paxos演算法來進行選舉,因此實際能夠有效參與選舉的節點數量是奇數。所以,我們在安裝HBase和ZooKeeper時,只採用奇數個節點(本文採用5個節點,分別為master、slave0、slave1、slave2、slave3)。

安裝ZooKeeper

將zookeeper-3.4.5.tar.gz在/home/LTE下解壓,產生zookeeper-3.4.5目錄。在/home/LTE/zookeeper-3.4.5/conf中,有zoo_sample.cfg檔案,使用命令 cp zoo_sample.cfg zoo.cfg 命令產生 zoo.cfg設定檔。編輯zoo.cfg的內容,如下:

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/home/LTE/zookeeper# the port at which the clients will connectclientPort=2181server.1=master:2888:3888server.2=slave0:2888:3888server.3=slave1:2888:3888server.4=slave2:2888:3888server.5=slave3:2888:3888## Be sure to read the maintenance section of the # administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1

為了讓系統能夠識別zoo.cfg中的server.id=host:port:port中的server.id,在master節點的/home/LTE/zookeeper中建立一個檔案myid,裡面只有一個數字1;同理,在slave0節點的/home/LTE/zookeeper中建立一個檔案myid,裡面只有一個數字2;以此類推…. 直至slave3節點。注意,這裡id的範圍是1~255 。以上配置(zookeeper以及zookeeper-3.4.5)要複製到叢集中的每一個節點上去。

在/etc/profile的最後添加:

export HBASE_HOME=/home/LTE/hbase-0.94.8export HADOOP_HOME=/home/LTE/hadoop-1.1.2export ZK_HOME=/home/LTE/zookeeper-3.4.5export JAVA_HOME=/usr/local/java/jdk1.6.0_32export CLASSPATH=$CLASSPATH:$HBASE_HOME/lib:$JAVA_HOME/libexport PATH=$JAVA_HOME/bin:$HBASE_HOME/bin:$ANT_HOME/bin:$HADOOP_HOME/bin:$ZK_HOME/bin:$PATH

然後,source /etc/profile
這個操作要在叢集的每一個節點上進行

啟動ZooKeeper

在每一個節點的/home/LTE/zookeeper-3.4.5/bin中執行命令:  ./zkServer.sh  start
這樣就啟動了zookeeper叢集中的各個節點。

輸入命令./zkServer.sh  status
可以查看當前節點在zookeeper叢集中的角色是leader還是follower

安裝HBase

將/home/LTE/hbase-0.94.8.tar.gz解壓,產生/home/LTE/hbase-0.94.8。在hbase-0.94.8/lib中,原來有一個hadoop-core-1.0.4.jar檔案,但是我們用的Hadoop的版本是hadoop-1.1.2,所以需要將hbase-0.94.8/lib/hadoop-core-1.0.4.jar替換成hadoop-1.1.2/hadoop-core-1.1.2.jar,否則會有衝突。

開啟conf/hbase-env.sh檔案,將其中最後一行改為:         
             export  HBASE_MANAGES_ZK=false

這表示我們不使用hbase-0.94.8內建的zookeeper,而是使用我們剛才自己安裝的zookeeper-2.3.4(具體指定使用哪個zookeeper是通過/etc/profile中的ZK_HOME變數來指定的)。

下面,開啟conf/hbase-site.xml檔案,添加以下內容:

<configuration>    <property>        <name>hbase.rootdir</name>        <value>hdfs://master:54310/hbase</value>    </property>    <property>        <name>hbase.cluster.distributed</name>        <value>true</value>    </property>    <property>        <name>dfs.replication</name>        <value>3</value>    </property>    <property>        <name>hbase.zookeeper.quorum</name>        <value>master,slave0,slave1,slave2,slave3</value>    </property>    <property>        <name>hbase.zookeeper.property.dataDir</name>        <value>/home/LTE/zookeeper/dataDir</value>    </property></configuration>

其中,我們需要通過hbase.rootdir指定HDFS的一個namenode節點,並讓HBase將資料寫入HDFS中的一個目錄(本例中就是hdfs://master:54310/hbase);hbase.zookeeper.quorum指定了哪些節點運行Quorum Peer(即QuorumPeerMain進程),個數需為奇數。

下面,開啟檔案conf/regionservers,添加以下內容:

slave0slave1slave2slave3

該檔案指定了HRegionServer進程將在哪些節點上運行。

以上配置需要在HBase的每一個節點中生效。

啟動HBase

OK,現在HBase叢集配置好了。我們來啟動HBase。
進入$HBASE_HOME/bin目錄下,輸入命令
        ./start-hbase.sh

在HBase叢集啟動之後,鍵入命令
        ./hbase  shell
啟動HBase的控制台介面

我們可以在瀏覽器中查看HBase系統的運行狀態,地址為http://172.16.38.213:60010/master-status,其中172.16.38.213是master所在節點的IP.

常見問題HBase中的某個節點無法啟動

這很可能是因為叢集中各個節點的系統時間不一致(時間差超出了某個閾值),這是我們需要將幾台機器間的時間調整一致。
我們可以將master作為時間伺服器,讓其他機器與master進行對時。

首先,在master上鍵入命令  service ntpd start  來開啟master上的時間伺服器。
等待幾分鐘後,在其他每一台機器上鍵入命令 ntpdate  master  來與master進行對時

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.