使用 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
Hadoop 實驗平台配置方式 hdp0 (192.168.0.100) Hadoop Master NameNode JobTracker hdp1 (192.168.0.101) hdp2 (192.168.0.102) hdp3 (192.168.0.103) More Hadoop Slaves hdpx DataNode TaskTracker DataNode TaskTracker DataNode TaskTracker
安裝 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 目錄的 stopall.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/ 日誌