Ubuntu10.04LTS配置Hadoop1.0.1+HBase 0.92.0

(關於Hadoop的單機和僞分佈式配置參見:http://my.oschina.net/unclegeek/blog/40042)當寫這篇文章的時候,最新版的hadoop是1.0.1版本,支持了許多新的特性,使得hbase持久化不易丟失數據。所以改用新的版本做說明:java

1.配置前重要的系統設置:node

    1)像Hbase這樣的分佈式的數據庫,在啓動的時候會在系統裏打開不少的文件,而普通的系統對打開文件數目的限制比較小,所以若是不改變系統設置,就會引發JAVA虛擬機的IOException。shell

   在/etc/security/limits.conf增長一行:數據庫

hadoop  -       nofile  32768

將hadoop替換爲你要運行hadoop的用戶名字,若是你有多個用戶須要運行hadoop,那麼就寫多行。

   2)設置系統容許運行的最大進程數目:服務器

在相同的文件中加入:session

hadoop soft/hard nproc 32000

一樣將hadoop替換爲你要使用的用戶名稱。

  3)最後在/etc/pam.d/common-session的最後一行加入:app

session required  pam_limits.so

不然以上的配置不會生效。

2.配置hadoop(先只在master上配置)dom

  1)配置conf/hadoop-env.shssh

       至少應該在此文件中指定JAVA_HOME=你係統中jdk的安裝路徑分佈式

  2)配置Hadoop守護進程:(假設Hadoop安裝目錄是opt/hadoop)

<!--conf/core-site.xml增長以下內容:-->
    <property>
        <name>fs.default.name</name>
	<!--注意:master是集羣機器配置/etc/hosts文件中指定的特定IP對應的機器名字-->
        <value>hdfs://master:54310/</value>
    </property>

<!--conf/hdfs-site.xml增長以下內容:-->
    <property>
	<name>dfs.name.dir</name>
	<value>/opt/hadoop/name/</value> 
	<description>
	   Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.
        </description>
    </property>
    <property>
	<name>dfs.data.dir</name>
	<value>/opt/hadoop/data/</value> 
	<description>
	   Comma separated list of paths on the local filesystem of a DataNode where it should store its blocks.
        </description>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>

<!--conf/mapred-site.xml增長以下內容:-->
    <property>
	 <name>mapred.job.tracker</name>
	 <value>hdfs://master:54311/</value><!--這裏的master是在/etc/hosts文件中指定的主機名-->
	 <description>
	      Host or IP and port of JobTracker.
	 </description>
    </property>
    <property>
	   <name>mapred.tasktracker.map.tasks.maximum</name>
	   <value>4</value>
	   <description>
		The maximum number of MapReduce tasks, which are run simultaneously on a given TaskTracker, individually.
	   </description>
    </property>
    <property>
	   <name>mapred.tasktracker.reduce.tasks.maximum</name>
	   <value>2</value>
	   <description>
		The maximum number of MapReduce tasks, which are run simultaneously on a given TaskTracker, individually.
	   </description>
    </property>

  3)配置conf/slaves

#在此文件中列出全部的slave主機,用主機名或者IP地址均可以,例若有slave1,slave2兩個主機

slave1  #這樣定義,須要在所在主機的/etc/hosts 文件中增長一行   此機器ip地址  slave1    下同

slave2

  4)配置 conf/masters

#此文件列出全部的master主機,例如只有

master

4.配置HBase

1)使整個HDFS系統支持durable sync功能,HBase再也不丟失數據,這個功能只有Hadoop versions 0.20.205.x 和之後的1.0.x支持這個配置,須要在clientside:hbase-site.xml 和 serverside的hdfs-site.xml中加入

<property>
    <name>dfs.support.append</name>
    <value>true</value>
  </property>

  2)配置HDFS一次最多能夠提供的文件數上限:hadoop/conf/hdfs-site.xml

<property>
        <name>dfs.datanode.max.xcievers</name>
        <value>4096</value>
    </property>

    不然可能獲得錯誤提示:10/12/08 20:10:31 INFO hdfs.DFSClient: Could not obtain block blk_XXXXXXXXXXXXXXXXXXXXXX_YYYYYYYY from any node: java.io.IOException: No live nodes contain current block. Will get new block locations from namenode and retry...

2.配置hbase

  1)在全分佈式模式下,不僅有一個主機。在hbase-site.xml中,設置hbase.cluster.distributed爲true,並經過設置hbase.rootdir指名HDFS NameNode和它在HDFS的位置,這裏也是HBase寫入數據的位置。

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:54310/hbase</value>
        <description>The directory shared by RegionServers.</description>
    </property>

    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
        <description>The mode the cluster will be in. Possible values are
            false: standalone and pseudo-distributed setups with managed Zookeeper
            true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
        </description>
    </property>

    <property>
        <name>dfs.replication</name>
        <value>2</value>
        <description>The replication count for HLog and HFile storage. Should not be greater than HDFS datanode count.</description>
    </property>

  2)HDFS client配置

值得注意的是,若是你已經在hadoop集羣上進行了HDFS客戶端配置,即配置你想要使用的HDFS客戶端,而不是服務器端配置:HBase的不會看到這種配置,除非你作如下事情之一:

  (1)讓hbase-env.sh中,的環境變量HBASE_CLASSPATH=你的HADOOP_CONF_DIR 

  (2)添加 hdfs-site.xml (或hadoop-site.xml) 的副本,或更好的方法:在${HBASE_HOME}/conf下添加它們的symlinks 

  (3)若是添加的HDFS client規模不大,能夠將他們配置到hbase-site.xml中。

在這裏採用第二種方式,在hbase的conf目錄中,用ln -s創建hadoop/conf/hdfs-site.xml的軟鏈接。

  3)配置zookeeper

 在conf/hbase-env.sh 中的HBASE_MANAGES_ZK變量默認是true, 告訴HBase 是否 將ZooKeeper 配合servers 做爲HBase啓動的一部分。通常說來最好讓集羣中機器的個數控制在奇數個,緣由以下:好比一個4個節點的集羣中,須要啓動3個zookeeper節點,只支持一個節點宕機的容錯,5個節點也須要啓動3個zookeeper節點,但支持兩個節點宕機的容錯。

例如:設置管理3個節點(master,slave1,slave2)的zookeeper,綁定端口2222,肯定在conf/hbase-env.sh中的HBASE_MANAGE_ZK被註釋掉(默認是true)或者設置爲true,接下來配置conf/hbase-site.xml,設置hbase.zookeeper.property.clientPort 和 hbase.zookeeper.quorum。你必須設置hbase.zookeeper.property.dataDir到另外一個目錄,由於默認的/tmp在系統重啓的時候會被清除。在下面的例子中,咱們讓zookeeper將數據保存到/opt/hbase/zookeeper中。

<property>
        <name>hbase.zookeeper.property.clientPort</name>
        <value>2222</value>
        <description>Property from ZooKeeper's config zoo.cfg.
        The port at which the clients will connect.
        </description>
    </property>

    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>master,slave1,slave2</value>
      <description>Comma separated list of servers in the ZooKeeper Quorum.
      For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
      By default this is set to localhost for local and pseudo-distributed modes
      of operation. For a fully-distributed setup, this should be set to a full
      list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh
      this is the list of servers which we will start/stop ZooKeeper on.
      </description>
    </property>

    <property>
      <name>hbase.zookeeper.property.dataDir</name>
      <value>/opt/hbase/zookeeper</value>
      <description>Property from ZooKeeper's config zoo.cfg.
      The directory where the snapshot is stored.
      </description>
    </property>

 4)配置conf/regionservers

把倆個slave主機看成regionservers,能夠在文件中加入:

slave1
slave2

 5)在conf/hbase-env.sh中指定java的安裝路徑

到此爲止,主要的配置結束了,如今你須要保證master主機能夠無密碼訪問兩個slave主機:

ssh-keygen -t rsa
#而後一路回車
ssh-copy-id -i ~/.ssh/id_rsa.pub user@slave1
ssh-copy-id -i ~/.ssh/id_rsa.pub user@slave2
#分別將ssh的公鑰加入到兩個slave主機

而後用scp 命令將配置好的兩個文件夾傳輸到slave主機上的相同路徑下。

 6)格式化namenode

hadoop/bin/hadoop namenode -format

 7)啓動hadoop 

hadoop/bin/start-all.sh

8)啓動hbase

hbase/bin/start-hbase.sh

9)若是HMaster運行不正常,或出現有關於HDFS的異常,你可能須要關閉master的防火牆。

sudo ufw disable
-----------------------------配置完成----------------------------------
相關文章
相關標籤/搜索