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

thamsyangsw發表於2014-05-07

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

1.前言

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

2.Hadoop家族

整個Hadoop家族由以下幾個子專案組成:

成員名 用途

Hadoop Common Hadoop體系最底層的一個模組,為Hadoop各子專案提供各種工具,如:配置檔案和日誌操作等。

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檔案中新增了。

3.7. 安裝路線

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)從下載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)從下載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:

hadoop.tmp.dir

/usr/local/hadoop/data

A base for other temporary directories.

注意事項:由於上傳到Hadoop的所有檔案都會被存放在hadoop.tmp.dir所指定的目錄,所以要確保這個目錄是足夠大的。

7.2.2.fs.default.name

master用這個引數,提供基於http協議的狀態上報介面,而slave透過這個地址連線master,設定如下:

fs.default.name

hdfs://Hadoop-A:54310

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.

備註: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。

mapred.job.tracker

Hadoop-A:54311

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.

備註: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)從下載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)從下載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從下載Hive原始碼

2)將下載來的Hive原始碼打包,然後上傳到Hadoop-A機器

3)解壓Hive原始碼包

4)修改shims/ivy.xml:

只保留0.20.0的配置,否則編譯會出錯,將原ivy.xml檔案:

修改成如下:

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)從下載最新的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。

可以透過來檢視HDFS的啟動情況。

可以透過來檢視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的使用非常簡單,照著上說的來操作就可以了。

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

本文轉載自:http://baiyunl.javaeye.com/blog/626117

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26613085/viewspace-1156135/,如需轉載,請註明出處,否則將追究法律責任。

相關文章