使用hadoop架設雲端系統 -...
TRANSCRIPT
使用Hadoop架設雲端系統
配置Hadoop實驗平台
• 可使用虛擬技術Virtual Box、Xen或Vmware虛擬軟體,一次建立3-5個Linux
• 建議執行Hadoop平台最低硬體需求
– 2GHz以上的2或4核心處理器
– 4GB DRAM
– IDE或SATA硬碟250GB以上
– 100Mbps以上的網路卡與交換器
配置Hadoop實驗平台
• 虛擬主機配置
• 作業系統Linux (Ubuntu 12.04)
• 記憶體512MB
• 硬碟容量8GB
• Hadoop雲端系統 hadoop-1.1.2
NameNode JobTracker
DataNode TaskTracker
DataNode TaskTracker
DataNode TaskTracker
hdp0 (192.168.0.100)
hdp1 (192.168.0.101)
hdp2 (192.168.0.102)
hdp3 (192.168.0.103)
Hadoop實驗平台配置方式
Hadoop Master
More Hadoop Slaves hdpX
● ● ● ● ● ●
安裝Hadoop雲端運算系統套件
• 每台伺服器安裝
– 作業系統:Ubuntu Linux Server Edition
– 雲端系統:Hadoop-1.1.2 + HDFS + Hbase
– 程式開發:Java 7
• 實驗系統架構
– Master-hdp0 – Name node, Job tracker
– Slave-hdp1 – Data node, Task tracker
– Slave-hdp2 – Data node, Task tracker
– Slave-hdp3 – Data node, Task tracker
安裝Hadoop雲端系統
• 為了管理方便,請建立一個hadoop帳號
– $ sudo adduser hadoop
• 下載hadoop-xxxx.tar.gz後在hadoop的home directory解壓縮
– $ tar zxvf hadoop-1.1.2.tar.gz
• hadoop-1.1.2: $ wget + 下載網址 ftp://apache.cdpa.nsysu.edu.tw/Unix/Web/apache/hadoop/common/hadoop-1.1.2/hadoop-1.1.2.tar.gz
安裝Hadoop雲端系統
• 其他hadoop必備軟體
– Installing Oracle Java7 JDK
$ sudo apt-get update
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get install oracle-java7-installer
– Installing ssh
$ sudo apt-get install ssh
$ sudo apt-get install openssh-server
$ sudo apt-get install rsync
編輯主機設定檔
• 主機設定檔:/etc/hosts
– $ sudo nano /etc/hosts
127.0.0.1 localhost
192.168.0.100 hdp0
192.168.0.101 hdp1
192.168.0.102 hdp2
192.168.0.103 hdp3
( IP + hostname, hostname在每台主機的/etc/hostname設定: $ sudo nano /etc/hostname)
Hadoop執行環境變數設定
• 更改.bashrc檔(home下的隱藏檔)加入
– $ sudo nano .bashrc
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
export HADOOP_HOME=/home/hadoop/hadoop-1.1.2
export PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin
Hadoop執行環境變數設定
• 在hadoop-1.1.2/conf下編輯環境設定檔hadoop-env.sh
– export JAVA_HOME=/usr/lib/jvm/java-7-oracle
– export HADOOP_HOME=/home/hadoop/hadoop-1.1.2
• 其他環境變數可以設定
– HADOOP_HEAPSIZE:設定HEAP檔案大小,Hadoop系統能同時處理的最大資料量預設值為1000MB
– HADOOP_LOG_DIR:Log目錄
– HADOOP_SLAVES:指定slave主機設定檔
– HADOOP_MASTER:指定master主機設定檔
Hadoop執行環境變數設定
• 進入hadoop-1.1.2/conf 更改
$ sudo nano masters hdp0
$ sudo nano slaves hdp0 hdp1 hdp2 hdp3
Hadoop雲端系統設定檔
– core-site.xml
• Hadoop採用網頁的方式監控各節點的運作狀況,因此必須要有一個Hadoop雲端系統的管理網站
指定Hadoop NameNode主機
指定HDFS分散式系統在hdp0主機,通訊Port為9000
HDFS分散式檔案系統
– hdfs-site.xml
• 必須在HDFS上指定NameNode以及DataNode的資料儲存位置
• hdp0上建立放置NameNode與DataNode資料的目錄
$ mkdir -p /home/hadoop/dfs/name
$ mkdir -p /home/hadoop/dfs/data
• 設定檔hdfs-site.xml
MapReduce程式設定檔
– mapred-site.xml
• 用來監控Map與Reduce程式的JobTracker工作分配狀況以及TaskTracker工作執行狀況
內部網路設定
建立另外三台slave
• 複製vdi檔
(在windows下, 複製另外3份hdp1,hdp2,hdp3) $ cd C:\Program Files\Oracle\VirtualBox
$ VBoxManage clonevdi <vdi檔案路徑> <新的vdi檔案路徑>
• 須進入hdp1,hdp2,hdp3修改
– Hostname ($ sudo nano /etc/hostname)
– IP網路設定
建立SSH金鑰安全連線
• 檢查四台主機相互連線正常:ping
• 建立ssh連線免密碼登入
$ ssh-keygen -t rsa
$ cd /home/hadoop/.ssh
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
• 測試連線
$ ssh hdp0
$ exit
複製設定檔到其他Hadoop主機
• 複製授權金鑰檔authorized_keys至其他主機 $ scp authorized_keys hdp1:/home/hadoop/.ssh/
$ scp authorized_keys hdp2:/home/hadoop/.ssh/
$ scp authorized_keys hdp3:/home/hadoop/.ssh/
• 檢查連線是否正常 $ ssh hdp1
$ ssh hdp2
$ ssh hdp3
格式化Hadoop
$ cd /home/hadoop/hadoop-1.1.2/bin
$ ./hadoop namenode –format
• 若有錯誤,可能是core-site.xml、hdfs-site.xml或mapred-site.xml設定錯誤,請依據錯誤訊息修正相關檔案
啟動Hadoop雲端系統
• 執行start-all.sh即可
$ cd /home/hadoop/hadoop-1.1.2/bin
$ ./start-all.sh
• 執行start-all.sh啟動指令後,就會啟動NameNode
與JobTracker主機hdp0並開始與其他slave主機進行連線,同時啟動DataNode與TaskTracker功能
• 並在$HADOOP_HOME/logs目錄產生記錄檔
檢視Hadoop運作狀況
• 查看NameNode運作狀況 http://hdp0:50070
• 查看JobTracker運作狀況 http://hdp0:50030
• 可以用log可查看每一台DataNode與JobTracker的運作狀況
• 關閉Hadoop雲端系統($HADOOP_HOME/bin目錄的stop-all.sh即可終止NameNode主機與其他DataNode主機的連接) $ cd /home/hadoop/hadoop-1.1.2/bin $ ./stop-all.sh
測試Hadoop雲端系統
• 測試pi的運算 (在hadoop-1.1.2目錄下)
$ bin/hadoop jar hadoop-examples-1.1.2.jar pi 100 10000
MapReduce程式開發工具
• 整合開發工具:
(Eclipse)+(IBM專為Eclipse設計的MapReduce plugins)
• 開發設計MapReduce程式
• 進行Hadoop伺服器設定
• MapReduce Job Control
• 瀏覽HDFS分散式檔案的讀取狀況
• 安裝Eclipse $ sudo apt-get install eclipse
安裝 IBM MapReduce Tools Eclipse
Plugins
• Eclipse Plugins已直接納入Hadoop安裝套件中
$ cd $HADOOP_HOME/contrib/elcipse-plugin
$ ls –l hadoop-xxxx-eclipse-plugin.jar
• 確定沒有正在執行的Eclipse程式
• 將hadoop-xxxx-eclipse-plugin.jar外掛檔案複製到Eclipse安
裝目錄的(usr/lib/eclipse/)plugins/目錄下
• 啟動Eclipse (選單列)
Windows → Open Perspective → Other → Map/Reduce
使用MapReduce Plugin監控Hadoop
工作流程 • Eclipse選單
Windows → Show View → Other → Map Reduce Tools → Map/Reduce Locations
啟動Map/Reduce伺服器進行監控作業
• 可於Eclipse開發環境中點選右上角藍色小象,或點選Map/Reduce Locations狀態列右邊的藍色小象圖示,進行Hadoop伺服器的相關設定
• 可在此設定執行MapReduce程式的
– Hadoop Master主機名稱
– Port通訊埠
– core-site.xml、hdfs-site.xml、mapred-site.xml等設定檔
建立Project
在 New Project 的選單上就可以選 Map/Reduce Project
開啟 Map/Reduce Perspective
1. 接著透過 Window -> Open Perspective 來開啟 Map/Reduce
Perspective。
2. 在 Map/Reduce Perspective 加入一個 Hadoop location。
3. 根 據 core-site.xml 與 mapred-site.xml 的 設 定 資 料 ,
輸入 Map/Reduce Master (NameNode) 與 DFS Master 的 host 跟
port。
由DFS Locations直接存取HDFS
執行 Map/Reduce 程式
hadoop 0.20 程式開發: http://trac.nchc.org.tw/cloud/wiki/waue/2009/0617
Hadoop架構
• MapReduce
–分散式程式框架,運算工作可以分成兩個部分,Map和Reduce
– map: [1,2,3,4] - (*2) -> [2,4,6,8]
– reduce: [1,2,3,4] - (sum) -> 10
• HDFS
– Hadoop專案中的檔案系統。實作Google File System
Hadoop架構-MapReduce
1. JobTracker跟NameNode取得需要運算的blocks
2. JobTracker選數個TaskTracker來做Map運算
3. JobTracker將中間檔案整合排序後,複製到需要的TaskTracker
4. JobTracker派遣TaskTracker作reduce
5. reduce完成後通知JobTracker與Namenode以產生output
Hadoop架構-HDFS
• Hadoop Distributed File System
• 將分散的儲存資源整合成一個具容錯能力、高效率且超大容量的環境
• Hadoop運算產生的資料都是存放在HDFS
• master/slave架構,由Namenode + Datanodes組成
– Namenode負責各檔案的屬性權限管理及儲存,記錄Datanodes檔案存放位置
– Datanodes由切割成數個 Block區塊儲存在不同的Datanodes,每一區塊還會有副本存在不同節點
Hadoop的各種身份
HDFS Layer - 管理資料
• Namenode
– Master
– 管理HDFS的名稱空間
– 控制對檔案的讀寫
– 配置副本策略 (如果有Datanode節點損壞,進行資料搬遷與複製)
– 對名稱空間做檢查及記錄
– 一個
• Datanode
– Workers
– 執行讀 / 寫動作
– 執行Namonode的副本策略(負責執行)
– 多個
MapReduce Layer - 分派程序
• Jobtracker
– Master
– 使用者發起工作
– 指派工作給Tasktrackers
– 排成決策、工作分配、錯誤處理
– 一個
• Tasktrackers
– Workers
– 運作Map與Reduce的工作
– 管理儲存;回覆運算結果
– 多個
Hadoop各資料夾的代表意義
• bin/ – 各項執行檔,包括start-all.sh,stop-all.sh,hadoop
• conf/ – 設定檔。hadoop-env.sh,hadoop-site.conf
• docs/ – Hadoop api與說明文件
• contrib/ – eclipse外掛
• lib/ – Hadoop函式庫
• src/ – Hadoop原始碼
• build/ – Hadoop編譯後資料夾
• logs/ – 日誌