HDFS+MapReduce+Hive+HBase十分鐘快速入門

HDFS+MapReduce+Hive+HBase十分鐘快速入門html

 

1.     前言

本文的目的是讓一個從未接觸Hadoop的人,在很短的時間內快速上手,掌握編譯、安裝和簡單的使用。java

2.     Hadoop家族

截止2009-8-19日,整個Hadoop家族由如下幾個子項目組成:node

成員名linux

用途sql

Hadoop Common數據庫

Hadoop體系最底層的一個模塊,爲Hadoop各子項目提供各類工具,如:配置文件和日誌操做等。apache

Avro編程

Avro是doug cutting主持的RPC項目,有點相似Google的protobuf和Facebook的thrift。avro用來作之後hadoop的RPC,使hadoop的RPC模塊通訊速度更快、數據結構更緊湊。數據結構

Chukwa框架

Chukwa是基於Hadoop的大集羣監控系統,由yahoo貢獻。

HBase

基於Hadoop Distributed File System,是一個開源的,基於列存儲模型的分佈式數據庫。

HDFS

分佈式文件系統

Hive

hive相似CloudBase,也是基於hadoop分佈式計算平臺上的提供data warehouse的sql功能的一套軟件。使得存儲在hadoop裏面的海量數據的彙總,即席查詢簡單化。hive提供了一套QL的查詢語言,以sql爲基礎,使用起來很方便。

MapReduce

實現了MapReduce編程框架

Pig

Pig是SQL-like語言,是在MapReduce上構建的一種高級查詢語言,把一些運算編譯進MapReduce模型的Map和Reduce中,而且用戶能夠定義本身的功能。Yahoo網格運算部門開發的又一個克隆Google的項目Sawzall。

ZooKeeper

Zookeeper是Google的Chubby一個開源的實現。它是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。

3.     演練環境

3.1.   操做系統

SuSE10,Linux2.6.16,32位版本。

3.2.   Hadoop

Hive經過SVN直接從網上下載原代碼,其它採用hadoop-0.20.0.tar.gz二進制安裝包,因此只須要編譯Hive。

另外,請注意不要下載2009-8-19號的Hive,2009-8-19提交的Hive版本在hadoop-0.20.0.tar.gz上編譯通不過,緣由是:

Hive源代碼根目錄/ql/src/java/org/apache/hadoop/hive/ql/exec/FileSinkOperator.java文件中多了一行:

import org.apache.hadoop.io.compress.LzoCodec;

而應當下載2009-8-4號和2009-8-19之間的版本,或2009-8-19以後的版本。

3.3.   Hive

在0.20.0版本的Hadoop二進制安裝包中,並無集成Hive,因此Hive須要本身編譯,編譯時須要使用到ant和ivy兩個工具,並且依賴於Hadoop。

3.4.   Java

運行Hadoop和編譯Hive,都須要使用到Java,因此須要第一個安裝的是Java。

3.5.   機器

演練時,在3臺機器上搭建Hadoop集羣,假設這3臺機器以下表所示:

機器名

機器IP

用途

Hadoop-A

192.168.0.1

用做Master

Hadoop-B

192.168.0.2

用做Slave

Hadoop-C

192.168.0.3

用做Slave

注意事項:機器名中不能包括下劃線「_」,但能夠包括橫線。另可以使用不帶參數的hostname來查看機器名,修改機器名方法爲:hostname 機器名,如:hostname Hadoop-A。另外,集羣內全部的機器登陸用戶名和密碼要保持相同。

3.6.   安裝列表

安裝

說明

Java 1.6

A、B和C三臺機器都須要安裝

Hadoop 0.20.0

A、B和C三臺機器都須要安裝

Hive

只須要在B和C兩臺機器上安裝,也就是Slave機器不須要安裝

ant

只須要在B和C兩臺機器上安裝,也就是Slave機器不須要安裝

ivy

只須要在B和C兩臺機器上安裝,也就是Slave機器不須要安裝

注意事項:爲求簡單全部操做均以root用戶完成,實際上可使用非root用戶,但環境變量就不能直接在/etc/profile文件中添加了。

4.     配置ssh2和修改/etc/hosts

須要在全部機器上配置ssh2和修改/etc/hosts。

4.1.   配置ssh2

1)        mkdir ~/.ssh2  # 若是~/.ssh2目錄已經存在,則這一步能夠跳過

2)        cd ~/.ssh2

3)        ssh-keygen2 -t rsa

4)        echo "IdKey id_rsa_2048_a" > identification

5)        echo "key id_rsa_2048_a.pub" > authorization

4.2.   修改/etc/hosts

1)        在/etc/hosts文件中增長以下三行:

192.168.0.1    Hadoop-A

192.168.0.2    Hadoop-B

192.168.0.3    Hadoop-C

並根據上述關係,使用hostname命令修改三臺機器的機器名。

5.     安裝Java

1)        從http://www.java.com/zh_CN/download/manual.jsp 下載jre,請注意是Java1.6版本,緣由是Hadoop和Hive使用到了模板等特性

2)        下載「Linux (自解壓文件)」這個版本的jre,以下圖所示

3)        將下載的Java二進制安裝包jre-6u15-linux-i586.bin上傳到/usr/local目錄

4)        爲jre-6u15-linux-i586.bin文件增長可執行權限:chmod +x jre-6u15-linux-i586.bin

5)        運行jre-6u15-linux-i586.bin:./jre-6u15-linux-i586.bin

6)        用戶協議接受,選擇yes

7)        安裝成功後,在/etc/profile增長以下一行:

export PATH=/usr/local/jdk/bin:$PATH

6.     安裝Hadoop

1)        從http://hadoop.apache.org/common/releases.html 下載Hadoop二進制安裝包hadoop-0.20.0.tar.gz

2)        將hadoop-0.20.0.tar.gz上傳到/usr/local目錄

3)        在/usr/local目錄,將hadoop-0.20.0.tar.gz解壓

4)        爲hadoop-0.20.0建一個軟連接:ln -s hadoop-0.20.0 hadoop

5)        在/etc/profile文件中,增長以下兩行:

export HADOOP_HOME=/usr/local/hadoop

export PATH=$HADOOP_HOME/bin:$PATH

完成以上步驟後,Hadoop就安裝好了。

7.     配置HDFS

7.1.   修改hadoop-env.sh

全部機器作一樣操做。

hadoop-env.sh位於/usr/local/hadoop/conf目錄下,須要在這個文件中設置環境變量JAVA_HOME,增長以下一行便可:

export JAVA_HOME=/usr/local/jre

7.2.   修改core-site.xml

全部機器作一樣操做。

在hadoop-0.20.0.tar.gz安裝包中,conf目錄下的core-site.xml默認是空的,但src/core目錄下有一個缺省的配置文件core-default.xml,因此只須要將它複製到conf目錄下,並重命名成core-site.xml便可,下述操做都是基於此操做的。

core-site.xml文件位於/usr/local/hadoop/conf目錄下。

7.2.1. hadoop.tmp.dir

設置臨時文件目錄參數hadoop.tmp.dir,默認狀況下master會將元數據等存在這個目錄下,而slave會將全部上傳的文件放在這個目錄下,在這裏數據目錄統一爲/usr/local/hadoop/data:

<property>

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

  <value>/usr/local/hadoop/data</value>

  <description>A base for other temporary directories.</description>

</property>

注意事項:因爲上傳到Hadoop的全部文件都會被存放在hadoop.tmp.dir所指定的目錄,因此要確保這個目錄是足夠大的。

7.2.2. fs.default.name

master用這個參數,提供基於http協議的狀態上報界面,而slave經過這個地址鏈接master,設置以下:

<property>

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

  <value>hdfs://Hadoop-A:54310</value>

  <description>The name of the default file system.  A URI whose

  scheme and authority determine the FileSystem implementation.  The

  uri's scheme determines the config property (fs.SCHEME.impl) naming

  the FileSystem implementation class.  The uri's authority is used to

  determine the host, port, etc. for a filesystem.</description>

</property>

備註:fs.default.name指定NameNode的IP地址和端口號,缺省值是file:///,,表示使用本地文件系統,,用於單機非分佈式模式。

dfs.replication指定HDFS中每Block被複制的次數,起數據冗餘備份的做用。在典型的生產系統中,這個數經常設置爲3。

7.3.   修改masters

這一步只須要在master節點上執行。

這個文件存儲備master節點的IP或機器名,建議使用機器名,每行一個機器名。主master會將元數據等備份到備master節點,文件位於conf目錄下。

這裏,咱們爲masters文件增長以下一行便可:

Hadoop-A

7.4.   修改slaves

這一步也只須要在master節點上執行,以便master以ssh2方式去啓動全部的slave節點。

這個文件存儲slave節點的IP或機器名,建議使用機器名,每行一個機器名。這裏咱們增長以下兩行:

Hadoop-B

Hadoop-C

7.5.   修改hdfs-site.xml

全部機器作一樣操做。

從src/hdfs目錄下,將hdfs-default.xml複製到conf目錄,並重命名成hdfs-site.xml,這裏不須要修改此文件。

8.     配置MapReduce

8.1.   修改mapred-default.xml

全部機器作一樣操做。

從src/mapred目錄下,將mapred-default.xml複製到conf目錄,並重命名成mapred-site.xml。

<property>

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

  <value>Hadoop-A:54311</value>

  <description>The host and port that the MapReduce job tracker runs

  at.  If "local", then jobs are run in-process as a single map

  and reduce task.

  </description>

</property>

備註:mapred.job.tracker指定 JobTracker的IP地址和端口號。缺省值是local,,表示在本地同一Java進程內執行JobTracker和TaskTracker,,用於單機非分佈式模式。

9.     安裝Hive

hadoop-0.20.0中並無集成二進制的Hive,因此須要經過源代碼編譯一個,可是2009-8-19日提交的Hive並不能在hadoop-0.20.0上編譯,而應當使用2009-8-4以後和2009-8-19之間的版本。

9.1.   安裝ant

1)        從http://ant.apache.org/ 下載ant二進制安裝包,選擇1.7.1版本

2)        下載後,將包apache-ant-1.7.1-bin.zip上傳到/usr/local目錄

3)        進入/usr/local目錄,將apache-ant-1.7.1-bin.zip解壓:unzip apache-ant-1.7.1-bin.zip

4)        進入/usr/local目錄,爲ant建一個軟鏈接:ln -s apache-ant-1.7.1 ant

5)        修改/etc/profile,增長以下行:

export PATH=/usr/local/ant/bin:$PATH

至此,ant算是安裝好了 。

9.2.   安裝ivy

1)        從http://www.apache.org/dist/ant/ivy/ 下載ivy二進制安裝包,選擇2.1.0-rc2版本

2)        下載後,將包apache-ivy-2.1.0-rc2-bin.tar.gz上傳到/usr/local目錄

3)        進入/usr/local目錄,將apache-ivy-2.1.0-rc2-bin.tar.gz解壓:tar xzf apache-ivy-2.1.0-rc2-bin.tar.gz

4)        進入/usr/local目錄,爲ivy建一個軟鏈接:ln -s apache-ivy-2.1.0-rc2 ivy

6)        修改/etc/profile,增長以下行:

export IVY_HOME=/usr/local/ivy

至此,ivy算是安裝好了。

9.3.   編譯Hive

在編譯Hive以前,請確保HADOOP_HOME和IVY_HOME兩個環境變量已經生效。

1)        使用svn從http://svn.apache.org/repos/asf/hadoop/hive/trunk下載Hive源代碼

2)        將下載來的Hive源代碼打包,而後上傳到Hadoop-A機器

3)        解壓Hive源代碼包

4)        修改shims/ivy.xml:

只保留0.20.0的配置,不然編譯會出錯

 

5)        運行ant開始編譯:

ant -Dtarget.dir=/usr/local/hadoop/hive -Dhadoop.version=0.20.0 package

這步完成以後,Hive會被安裝到/usr/local/hadoop/hive目錄下

6)        添加Hive環境變量,在/etc/profile文件中增長以下兩行:

export HIVE_HOME=/usr/local/hadoop/hive

export PATH=$HIVE_HOME/bin:$PATH

10.             安裝HBase

1)        從http://svn.apache.org/repos/asf/hadoop/hbase/trunk下載最新的HBase源代碼

2)        將HBase源代碼打包,並上傳到Linux上

3)        解壓HBase源代碼包

4)        編譯HBase:

ant -Dtarget.dir=/usr/local/hadoop/hbase -Dhadoop.version=0.20.0 package

5)        編譯成功以後,HBase可能並不象Hive同樣自動安裝到/usr/local/hadoop/hbase目錄下,這個時候須要手工複製到HBase安裝目錄下:將build/hbase-0.21.0-dev整個目錄複製到/usr/local/hadoop目錄下,並將hbase-0.21.0-dev重命名成hbase便可

6)        進入/usr/local/hadoop/hbase/conf目錄,將hbase-default.xml複製一份,並命名成hbase-site.xml

7)        修改hbase-site.xml:

設置hbase.rootdir的值爲:hdfs://Hadoop-A:54310/hbase;

設置hbase.master(hbase.master可能爲hbase.master.port)的值爲:Hadoop-A:60000

8)        修改hbase-env.sh:

設置環境變量JAVA_HOME:export JAVA_HOME=/usr/local/jre

9)        在Master節點,還須要修改regionservers,在這個文件中列出全部的slave機器,一行一個機器名:

Hadoop-B

Hadoop-C

這一步不用在slave節點上操做。

10)    經過以上操做,HBase已經安裝和配置好,而後應當打包,將它部署到集羣的全部節點上

11.             體驗

11.1.       啓動和中止

11.1.1. hadoop

在啓動Hadoop集羣以前,須要先格式化,在master節點上執行下面的命令便可:

hadoop namenode -format

11.1.2. start-all.sh

這個腳本用來啓動Hadoop。

能夠經過http://172.25.38.127:50070來查看HDFS的啓動狀況。

 

能夠經過http://172.25.38.127:50030來查看MapReduce的啓動狀況。

 

11.1.3. stop-all.sh

這個腳本用來中止Hadoop。

11.2.       體驗HDFS

HDFS的使用和普通的Linux命令差很少,只不過各種操做都必須做爲hadoop命令的參數,如在hadoop上執行ls操做:

hadoop fs -ls /

這條命令至關於Linux下的ls /。

11.3.       體驗MapReduce

體驗MapReduce,可使用Hadoop自帶的WordCount,如:

hadoop jar wordcount.jar /x/x /z

其中wordcount.jar是WordCount的可執行包,/x/x是源文件,是一段以逗號分隔的英文片段,而/z是結果存放的目錄。

11.4.       體驗Hive

Hive的使用很是簡單,照着http://wiki.apache.org/hadoop/Hive/GettingStarted上說的來操做就能夠了。

 

12.             FAQ

12.1.       如何查看Hadoop進程

若是安裝了JDK,則在JDK的bin目錄下有一個jps命令,能夠用來查看java進程,如:

# jps

27612 NameNode

17369 Jps

16206 HQuorumPeer

15423 HMaster

27761 SecondaryNameNode

27839 JobTracker

其中,第一列爲進程號,第二列爲進程名稱。

12.2.       ssh端口問題

若是ssh不是使用默認端口,則須要修改hadoop-env.sh文件中的HADOOP_SSH_OPTS環境變量,假設ssh端口號爲8000,則能夠簡單設置爲:export HADOOP_SSH_OPTS="-p 8000"

若是安裝了HBase,還應當修改hbase-env.sh文件中的HBASE_SSH_OPTS。

12.3.       首次ssh登陸問題

首次經過ssh登陸另外一臺機器時,可能會遇到一個yes確認過程,所以在啓動以前,應當先手工或使用其它腳本ssh成功登陸一次,不然容易遇到以下錯誤:

r# ./start-hbase.sh

DOSS38-127-sles10: Host key not found from database.

DOSS38-127-sles10: Key fingerprint:

DOSS38-127-sles10: xuror-ledab-buhim-zohok-tanop-cyrig-tysac-gyhyp-refan-semim-pyxex

DOSS38-127-sles10: You can get a public key's fingerprint by running

DOSS38-127-sles10: % ssh-keygen -F publickey.pub

DOSS38-127-sles10: on the keyfile.

DOSS38-127-sles10: warning: tcgetattr failed in ssh_rl_set_tty_modes_for_fd: fd 1: Invalid argument

相關文章
相關標籤/搜索