CHAPTER 8 - PowerPoint PPT Presentation

chapter 8 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
CHAPTER 8 PowerPoint Presentation
play fullscreen
1 / 72
CHAPTER 8
150 Views
Download Presentation
chase-lee
Download Presentation

CHAPTER 8

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. CHAPTER 8 Hadoop設定與配置

  2. Outline • 前置作業 • Hadoop安裝設定 • HBase叢集安裝 • Hadoop基本操作 • HBase基本操作 • 網頁介面

  3. 前置作業 Hadoop安裝設定 HBase叢集安裝 Hadoop基本操作 HBase基本操作 網頁介面

  4. 前置作業(1/5) • Hadoop可建立在GNU/Linux及Win32平台之上,本實作以GNU/Linux為安裝平台。 • 安裝Hadoop前需先安裝兩個套件,分別是Java及ssh。Hadoop以Java撰寫而成,所以必需在Java的環境(JRE)下運作; • 因此系統需安裝Java第六版(或更新的版本)。

  5. 前置作業(2/5) • 本範例所使用的作業系統為CentOS 5.5,而在安裝作業系統過程中,預設會安裝OpenJDK的Java套件,安裝成功與否可由指令java -version進行查詢: ~# java -version java version "1.6.0_17" OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-i386) OpenJDK Client VM (build 14.0-b16, mixed mode) • 如看到上述畫面,可確認系統已安裝OpenJDK套件。若尚未安裝,亦可透過yum進行安裝: ~# yum -y install java-1.6.0-openjdk

  6. 前置作業(3/5) • 雖然Hadoop可在OpenJDK上運作,但OpenJDK對某些應用並不支援,且為了後續程式開發,本範例的Java環境以Oracle (Sun) Java JDK為主,Oracle (Sun) Java JDK可從Oracle官網(http://www.oracle.com)下載

  7. 前置作業(4/5) • 本範例將jdk-6u25-linux-i586.bin下載至/usr後,將檔案改為可執行模式: ~# chmod +x jdk-6u25-linux-i586.bin • 接著執行安裝檔: ~# ./jdk-6u25-linux-i586.bin • 開始執行指令便可自動安裝,並在/usr(放置安裝檔的目錄)中創建名為jdk1.6.0_25的目錄。接下來使用指令alternatives讓Oracle (Sun) Java JDK代替OpenJDK: ~# alternatives --install /usr/bin/java java /usr/jdk1.6.0_25/bin/java 20000 ~# alternatives --install /usr/bin/javac javac /usr/jdk1.6.0_25/bin/javac 20000

  8. 前置作業(5/5) • 最後再度確認Java環境是否安裝成功: ~# java –version java version "1.6.0_25" Java(TM) SE Runtime Environment (build 1.6.0_25-b06) Java HotSpot(TM) Client VM (build 20.0-b11, mixed mode, sharing) ~#javac -version Javac 1.6.0_25 • 接者安裝ssh與rsync,並啟動服務如下: ~# yum -y install openssh rsync ~# /etc/init.d/sshd restart • 請注意!為了方便Hadoop的安裝,安裝示範將直接使用root權限操作。

  9. 前置作業 Hadoop安裝設定 HBase叢集安裝 Hadoop基本操作 HBase基本操作 網頁介面

  10. Hadoop安裝設定 • 安裝Hadoop可分為三種模式: • Local (Standalone) Mode • 單機環境 • 適合用於除錯 • Pseudo-Distributed Mode • 單機環境 • 模擬多個節點運行環境 • Fully-Distributed Mode • 叢集環境 • 分散式運算

  11. Local (Standalone) Mode(1/7) • 首先下載Hadoop安裝檔案,到Apache Hadoop官網(http://hadoop.apache.org/)下載 • 雖然Hadoop最新版為Hadoop 0.21.0,但目前此版本仍不穩定。 • 因此範例以Hadoop 0.20.2為主,使用指令wget從其中一個鏡像站下載hadoop-0.20.2.tar.gz: • 下載完畢後解壓縮: ~# wget http://apache.cs.pu.edu.tw//hadoop/common/hadoop-0.20.2/hadoop-0.20.2.tar.gz ~# tar zxvf hadoop-0.20.2.tar.gz

  12. Local (Standalone) Mode(2/7) • 接著把解壓縮出來的目錄hadoop-0.20.2移至目錄/opt下,並將目錄更名為hadoop: ~# mv hadoop-0.20.2 /opt/hadoop • 接著將Java加到Hadoop的環境變數。首先進入hadoop目錄,使用vi編輯conf/hadoop-env.sh: ~# cd /opt/hadoop/ /hadoop# vi conf/hadoop-env.sh

  13. Local (Standalone) Mode(3/7) • 開啟hadoop-env.sh後加入JAVA_HOME路徑(export JAVA_HOME=/usr/jdk1.6.0_25) 到下列位置。 • 此外,為避免因為IPv6協定所造成的錯誤,可先關閉IPv6,或在hadoop-env.sh加入export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true,優先使用IPv4解決此問題: # Command specific options appended to HADOOP_OPTS when specified ... ... ... export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS" export JAVA_HOME=/usr/jdk1.6.0_25 ←在此加入JAVA_HOME路徑 export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true ←優先使用IPv4

  14. Local (Standalone) Mode(4/7) • 到這邊已完成Hadoop Local (Standalone) Mode的安裝,可用下列指令測試Hadoop功能是否正常: • 若出現上面訊息,則表示安裝成功;若出現錯誤訊息,請檢查conf/hadoop-env.sh中JAVA_HOME路徑是否正確。 /hadoop# bin/hadoop Usage: hadoop [--config confdir] COMMAND where COMMAND is one of: namenode -format format the DFS filesystem ... ... ... or CLASSNAME run the class named CLASSNAME Most commands print help when invoked w/o parameters.

  15. Local (Standalone) Mode(5/7) • 於此可以先執行Hadoop壓縮檔內所附的範例程式hadoop-0.20.2-examples.jar,使用grep功能計算輸入文件中包含指定字串的每個字出現的次數。 • 可透過下列指令先創建一個名為input的目錄,並把conf/中所有xml檔都複製到新創的目錄input中: /hadoop# mkdir input /hadoop# cp conf/*.xml input

  16. Local (Standalone) Mode(6/7) • 接著執行範例hadoop-0.20.2-examples.jar,這邊使用其grep功能,過濾出所有輸入檔案中以“config”為字首的單字: /hadoop# bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'config[a-z.]+' • 這個範例應該很快可以執行完畢,便可利用下列指令查看結果: /hadoop# cat output/* 13 configuration 4 configuration.xsl 1 configure

  17. Local (Standalone) Mode(7/7) • 在執行過hadoop-0.20.2-examples.jar grep這個範例後,需把輸出目錄output清除掉,否則再次執行此範例時會出現目錄已存在的錯誤,因此需將目錄output刪除: /hadoop# rm -rf output

  18. Pseudo-Distributed Mode(1/9) • 因為Pseudo-Distributed Mode跟Local (Standalone) Mode一樣是單機環境 • 因此,延續上面的步驟,修改目錄conf內的core-site.xml、hdfs-site.xml及mapred-site.xml。 • 首先修改core-site.xml: /hadoop# vi conf/core-site.xml

  19. Pseudo-Distributed Mode(2/9) • 在core-site.xml內容的<configuration>與</configuration>之間插入 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration>

  20. Pseudo-Distributed Mode(3/9) • 接著修改hdfs-site.xml: /hadoop# vi conf/hdfs-site.xml • 在hdfs-site.xml內容的<configuration>與</configuration>之間插入 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>

  21. Pseudo-Distributed Mode(4/9) • 最後修改mapred-site.xml: /hadoop# vi conf/mapred-site.xml • 在mapred-site.xml內容的<configuration>與</configuration>之間插入 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>

  22. Pseudo-Distributed Mode(5/9) • 設定SSH登入免密碼步驟: • 由於Hadoop系統中的主機都是透過ssh互相溝通,因此需設定ssh登入時免輸入密碼。 • 首先確認登入本地機器是否需要密碼(第一次登入會出現是詢問是否連結的訊息,輸入yes並按下Enter後便可繼續登入): ~# ssh localhost The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is <your RSA key fingerprint> Are you sure you want to continue connecting (yes/no)? yes ←輸入yes Warning: Permanently added 'localhost' (RSA) to the list of known hosts. root@localhost's password: ←要求輸入密碼

  23. Pseudo-Distributed Mode(6/9) • 若出現要求輸入密碼,此時可按“Ctrl + C”,先跳出輸入密碼步驟。接下來使用下列指令完成登入免密碼: ~# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" ~# cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys • 完成後再登入本地機器確認是否還須要密碼,便可發現不需輸入密碼即可登入,登入後輸入exit即可登出: ~# sshlocalhost Last login: Mon May 16 10:04:39 2011 from localhost ~# exit

  24. Pseudo-Distributed Mode(7/9) • 啟動Hadoop:經過上述步驟後,Hadoop的環境設定就大致完成,接著輸入bin/hadoopnamenode -format進行HDFS格式化步驟: /hadoop# bin/hadoopnamenode -format 11/05/16 10:20:27 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode ... ... ... 11/05/16 10:20:28 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1 ************************************************************/

  25. Pseudo-Distributed Mode(8/9) • 接著只需輸入bin/start-all.sh就可啟動名稱節點、第二組名稱節點、資料節點、Jobtracker及Tasktracker: /hadoop# bin/start-all.sh starting namenode, logging to /opt/hadoop/bin/../logs/hadoop-root-namenode-Host01.out localhost: starting datanode, logging to /opt/hadoop/bin/../logs/hadoop-root-datanode-Host01.out localhost: starting secondarynamenode, logging to /opt/hadoop/bin/../logs/hadoop-root-secondarynamenode-Host01.out starting jobtracker, logging to /opt/hadoop/bin/../logs/hadoop-root-jobtracker-Host01.out localhost: starting tasktracker, logging to /opt/hadoop/bin/../logs/hadoop-root-tasktracker-Host01.out

  26. Pseudo-Distributed Mode(9/9) • 測試範例: • 同樣的,執行hadoop-0.20.2-examples.jar grep這個範例測試運行狀態。 • 先利用指令bin/hadoopfs -put將目錄conf中的所有檔案放到HDFS中目錄input底下,再執行hadoop-0.20.2-examples.jar grep這個範例。 /hadoop# bin/hadoopfs -put conf input /hadoop# bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'config[a-z.]+'

  27. Fully-Distributed Mode(1/14) • 在安裝Hadoop叢集之前,需先架設叢集系統,其架設方法於本節不再贅述。 • 此安裝範例使用的叢集環境如下: • 不論擔任Master或Slave,每台機器都需先安裝Java及ssh

  28. Fully-Distributed Mode(2/14) • 若之前已執行單機安裝流程,請執行下列步驟清除之前設定。先使用stop-all.sh指令停止Hadoop運行,再將Hadoop及.ssh目錄刪除: /hadoop# /opt/hadoop/bin/stop-all.sh ~# rm -rf /opt/hadoop ~# rm -rf ~/.ssh ~# rm -rf /tmp/* • 下載Hadoop到Host01安裝:與單機安裝步驟相同,以下步驟都在Host01上操作。首先到官網下載Hadoop 0.20.2版並解壓縮,解壓縮後移到Hadoop目錄到/opt/hadoop中: ~# wget http://apache.cs.pu.edu.tw//hadoop/common/hadoop-0.20.2/hadoop-0.20.2.tar.gz ~# tar zxvf hadoop-0.20.2.tar.gz ~# mv hadoop-0.20.2 /opt/hadoop

  29. Fully-Distributed Mode(3/14) • 首先設定bin/hadoop-env.sh,進入Hadoop的目錄/opt/hadoop後,利用vi編輯器修改bin/hadoop-env.sh內容: ~# cd /opt/hadoop/ /hadoop# vi conf/hadoop-env.sh • 接著開啟hadoop-env.sh,加入JAVA_HOME路徑到下列位置: # Command specific options appended to HADOOP_OPTS when specified … … export HADOOP_JOBTRACKER_OPTS="-Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS" export JAVA_HOME=/usr/jdk1.6.0_25 ←在此加入JAVA_HOME路徑

  30. Fully-Distributed Mode(4/14) • 再來設定conf/core-site.xml,利用vi開啟: /hadoop# vi conf/core-site.xml • 在conf/core-site.xml裏的<configuration>及</configuration>之間加入

  31. Fully-Distributed Mode(5/14) <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>fs.default.name</name> <value>hdfs://Host01:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/var/hadoop/hadoop-${user.name}</value> </property> </configuration>

  32. Fully-Distributed Mode(6/14) • 接著設定conf/hdfs-site.xml,利用vi開啟conf/hdfs-site.xml: /hadoop# vi conf/hdfs-site.xml • 在conf/hdfs-site.xml裏的<configuration>及</configuration>之間加入 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>

  33. Fully-Distributed Mode(7/14) • 接下來設定conf/mapred-site.xml,利用vi開啟conf/mapred-site.xml: /hadoop# vi conf/mapred-site.xml • 在conf/mapred-site.xml裏的<configuration>及</configuration>之間加入 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>Host01:9001</value> </property> </configuration>

  34. Fully-Distributed Mode(8/14) • 接著設定conf/masters,利用vi開啟conf/masters: • 把這個檔案的內容清空即可 /hadoop# vi conf/mapred-site.xml • 再來設定conf/slaves,利用vi開啟conf/slaves: • 把conf/slaves中的localhost刪除,改為Host02即可 /hadoop# vi conf/mapred-site.xml

  35. Fully-Distributed Mode(9/14) • 設定兩台主機登入免密碼: • 與單機安裝時相同,只需多一步驟,利用指令scp把公鑰傳給其它主機: ~# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" ~# cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys ~# scp -r ~/.ssh Host02:~/ • 接著測試是否登入免密碼: ~# ssh Host02 ←從Host01登入Host02 ~# ssh Host01 ←從Host02登入Host01 ~# exit ←離開Host01 ~# exit ←離開Host02 (即又回到原來的Host01)

  36. Fully-Distributed Mode(10/14) • 將Hadoop目錄複製到其它主機上: • 設定完畢的Hadoop目錄需複製到每台Slave上,也可透過共享式檔案系統(如NFS)共用同一個目錄。 • 複製Host01的Hadoop目錄到Host02之步驟如下: ~# scp -r /opt/hadoop Host02:/opt/ • 啟動Hadoop:與單機安裝相同,先進行HDFS格式化步驟: /hadoop# bin/hadoop namenode -format

  37. Fully-Distributed Mode(11/14) • 接著可看到下列訊息: 11/05/16 21:52:13 INFO namenode.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = Host01/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.20.2 STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010 ************************************************************/ 11/05/16 21:52:13 INFO namenode.FSNamesystem: fsOwner=root,root,bin,daemon,sys,adm,disk,wheel ... ... 11/05/16 21:52:13 INFO namenode.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at Host01/127.0.0.1 ************************************************************/

  38. Fully-Distributed Mode(12/14) • 接著啟動Hadoop: /hadoop# bin/start-all.sh starting namenode, logging to /opt/hadoop/bin/../logs/hadoop-root-namenode-Host01.out Host02: starting datanode, logging to /opt/hadoop/bin/../logs/hadoop-root-datanode-Host02.out starting jobtracker, logging to /opt/hadoop/bin/../logs/hadoop-root-jobtracker-Host01.out Host02: starting tasktracker, logging to /opt/hadoop/bin/../logs/hadoop-root-tasktracker-Host02.out

  39. Fully-Distributed Mode(13/14) • 於此已完成Fully-Distributed Mode 架設,接下來可用指令bin/hadoopdfsadmin -report來查看HDFS的狀態。 • 最上面顯示整個HDFS的資訊,接著為每個資料節點的個別資訊: /hadoop# bin/hadoopdfsadmin -report Configured Capacity: 9231007744 (8.6 GB) ... ... Blocks with corrupt replicas: 0 Missing blocks: 0 ------------------------------------------------- Datanodes available: 1 (1 total, 0 dead) ... ... DFS Remaining%: 41.88% Last contact: Mon May 16 22:15:03 CST 2011

  40. Fully-Distributed Mode(14/14) • 接著可測試一下hadoop-0.20.2-examples.jar grep範例。先在HDFS上創建一個目錄input,再將Hadoop目錄中conf/內的檔案全放上去,接著便執行hadoop-0.20.2-examples.jar grep範例: /hadoop# bin/hadoopfs -mkdir input /hadoop# bin/hadoopfs -put conf/* input/ /hadoop# bin/hadoop jar hadoop-0.20.2-examples.jar grep input output 'config[a-z.]+' • 查詢執行結果: /hadoop# bin/hadoopfs -cat output/part-00000 19 configuration 6 configuration.xsl 1 configure

  41. 前置作業 Hadoop安裝設定 HBase叢集安裝 Hadoop基本操作 HBase基本操作 網頁介面

  42. HBase叢集安裝(1/9) • 安裝HBase有下列三項需求: • 必需先安裝Hadoop叢集系統並啟動 • HBase0.20版以後的叢集安裝需搭配ZooKeeper • 使用NTP校對叢集系統內所有主機時間:

  43. HBase叢集安裝(2/9) • 下載HBase: • 首先到HBase的官網(http://hbase.apache.org/)下載HBase壓縮檔 • 目前可下載最新版hbase-0.90.2.tar.gz,解壓縮後放到目錄/opt/內並更名為hbase,最後進入HBase的目錄中: ~# wget http://apache.cs.pu.edu.tw//hbase/hbase-0.90.2/hbase-0.90.2.tar.gz/hadoop~# tar zxvf hbase-0.90.2.tar.gz ~# mv hbase-0.90.2 /opt/hbase ~# cd /opt/hbase/ • 利用vi編輯conf/hbase-env.sh: /hbase# vi conf/hbase-env.sh

  44. HBase叢集安裝(3/9) • 並將下列內容加入到conf/hbase-env.sh裡: export JAVA_HOME=/usr/jdk1.6.0_25/ export HBASE_MANAGES_ZK=true export HBASE_LOG_DIR=/tmp/hadoop/hbase-logs export HBASE_PID_DIR=/tmp/hadoop/hbase-pids • 編輯conf/hbase-site.xml內容,並設定HBase的一些相關參數 /hbase# vi conf/hbase-site.xml

  45. HBase叢集安裝(4/9) • 並將下列內容加入到conf/hbase-site.xml裡: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- --> <configuration> <property> <name>hbase.rootdir</name> <value>hdfs://Host01:9000/hbase</value> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2222</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>Host01,Host02</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/tmp/hadoop/hbase-data</value> </property>

  46. HBase叢集安裝(5/9) <property> <name>hbase.tmp.dir</name> <value>/var/hadoop/hbase-${user.name}</value> </property> <property> <name>hbase.master </name> <value>Host01:60000</value> </property> </configuration>

  47. HBase叢集安裝(6/9) • 接著利用vi編輯conf/regionservers /hbase# vi conf/regionservers • 此範例只有一台Slave,所以在slaves檔中只有一行該Slave的主機名稱: Host02 • 接著複製Hadoop的設定檔至HBase的目錄conf/中: /hbase# cp /opt/hadoop/conf/core-site.xml conf/ /hbase# cp /opt/hadoop/conf/mapred-site.xml conf/ /hbase# cp /opt/hadoop/conf/hdfs-site.xml conf/

  48. HBase叢集安裝(7/9) • 將hbase目錄中的lib/hadoop-core-0.20-append-r1056497.jar檔刪除,並複製hadoop目錄中的hadoop-0.20.2-core.jar到hbase的目錄lib內做為替換: /hbase# rm lib/hadoop-core-0.20-append-r1056497.jar /hbase# cp /opt/hadoop/hadoop-0.20.2-core.jar ./lib/ • 接著將目錄hbase複製到其它Slave節點: /hbase# scp -r /opt/hbase Host02:/opt/hbase

  49. HBase叢集安裝(8/9) • 啟動HBase: /hbase# bin/start-hbase.sh Host02: starting zookeeper, logging to /tmp/hadoop/hbase-logs/hbase-root-zookeeper-Host02.out Host01: starting zookeeper, logging to /tmp/hadoop/hbase-logs/hbase-root-zookeeper-Host01.out starting master, logging to /tmp/hadoop/hbase-logs/hbase-root-master-Host01.out Host02: starting regionserver, logging to /tmp/hadoop/hbase-logs/hbase-root-regionserver-Host02.out

  50. HBase叢集安裝(9/9) • 透過執行hbase shell指令,進入HBase控制台後輸入list。若可正常執行,則表示HBsae安裝完成: /hbase# bin/hbase shell HBase Shell; enter 'help<RETURN>' for list of supported commands. Type "exit<RETURN>" to leave the HBase Shell Version 0.90.2, r1085860, Sun Mar 27 13:52:43 PDT 2011 hbase(main):001:0> list ←輸入list並按下Enter TABLE 0 row(s) in 0.3950 seconds hbase(main):002:0>