NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落

關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 141285

    累積人氣

  • 105

    今日人氣

    0

    訂閱人氣

雲端運算: Hadoop 平台建置/組態 HDFS 與慣用指令 (一) : 平台基礎架構 by Navier

    About Haoop 介紹引述wiki

Apache Hadoop是一款支持數據密集型分布式應用並以Apache 2.0許可協議發布的開源軟體框架。它支持在商品硬體構建的大型集群上運行的應用程序。Hadoop是根據Google公司發表的MapReduce和Google檔案系統的論文自行實作而成。

Hadoop框架透明地為應用提供可靠性和數據移動。它實現了名為MapReduce的編程範式:應用程序被分割成許多小部分,而每個部分都能在集群中的任意節點上執行或重新執行。此外,Hadoop還提供了分布式文件系統,用以存儲所有計算節點的數據,這為整個集群帶來了非常高的帶寬。MapReduce和分布式文件系統的設計,使得整個框架能夠自動處理節點故障。它使應用程序與成千上萬的獨立計算的電腦和PB級的數據。現在普遍認為整個Apache Hadoop「平台」包括Hadoop內核、MapReduce、Hadoop分布式文件系統(HDFS)以及一些相關項目,有Apache Hive和Apache HBase等等。 


Navier 實驗目標與架構說明(參考下圖):

Hadoop version: 2.7.0

Network IPAddress Range: 10.10.10.0/24

Host x7 OS:  Ubuntu 14.04

JAVA version:  jdk-8u-45

NameNode Dir: /hadoop/nn

DataNode Dir: /hadoop/dn


--------Navier Lab 架構主機群參考如下-----------


NameNode: navierx (.10)  ,Secondary NameNode: navierx2(.20) 

Resource Manage Node: rmn(.11) ,Node Manage  Node:nmn(.12)


Date Node: dn01(.30),dn02(.31),dn03(32)


本篇實驗目標:

建置Hadoop基礎運作架構for"HDFS" , 上述的Resource Manage Node與Node Manager將於

後續篇章實現"YARN" MapReduce 運算才會用到,故現以HDFS一系列組態.操作.管理為主軸

[本Lab計畫預計拆分成2-3個子章節來記錄操作備忘] 完成以下


(a.) 建立Hadoop運行架構

(b.) 佈署Secondary Node: 做災後節點復原測試

: #本Navier預計要do此項,考量生產環境以手動復原較不智,後認為做NameNode HA(高可用性)佳

      (幾千甚至幾百個DataNode運行情境下)此項次略過

(c.) HDFS Data 上傳,刪除,複製與監控節點是否達平衡存儲(HDFS Balancer)

(d.)當Data node 資源不足時,手動擴充新增節點(計畫拿dn03來做新增節點,初期只有dn01,dn02節點)



在建構Hadoop前預先習慣預先配置好每個節點以下:

"正式進入組態Lab時不再提醒" 

  一.  /etc/hosts     #確保各節點可Ping通             
二.  JAVA  配置(Hadoop依賴JAVA運作必裝)增下以下環境變數配置

vi  .bashrc     #其中已配置好預訂Hadoop Home PATH 等環境變數對應

export JAVA_HOME=/hadoop/java8u45
export HADOOP_HOME=/hadoop/hadoop-2.7.0/
export PATH=$PATH:$JAVA_HOME/bin
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

         檢視JAVA是否運作正常(確認OK)
三.  Hadoop安裝(請上網下載穩定版本,解壓縮到預定安裝目錄)本例是

      "/hadoop/hadoop-2.7.0"

       經過環境變數與安裝Hadoop 無誤後執行"hadoop version" 查看Hadoop運作是否OK


四.  配置各結點(Node) 免SSH帳戶密碼之驗證組態

      ssh-keygen -t  dsa -P ' ' -f  ~/.ssh/id_dsa          #在NameNode 做好配置

     cat ~/.ssh/id_dsa.pub >>  ~/.ssh/authorized_keys

接者利用scp複製 ~/.ssh/id_dsa.pub  到各結點 ~/.ssh/authorized_keys  附加匯入即可

修改 /etc/ssh/ssh_config

 StrictHostKeyChecking no    

#自動取得OpenSSH Server 公鑰後可用SSH登入其他節點應無須過問登入帳密

        測試登入NameNode:  

        " ssh navierx "          #SSH登入無須過問帳戶/金鑰密碼即可登入
  請在各節點完成上述 一.二.三.四 配置,接下來將正式進入本篇主題"Hadoop基礎架構"佈署
 
"Hadoop基礎架構"佈署 :

[NameNode] navierx(.10)為例,其他節點配置請參考下述完成


編輯"core-site-xml"系統核心設定檔

<configuration>  #定義NameNode 執行主機"navierx:8020"
<property>
<name>fs.default.name</name>
<value>hdfs://navierx:8020</value>
</property>
</configuration>

配置"hdfs-site-xml"系統核心設定檔   #關於HDFS分散式檔案系統設定檔案

<configuration>
<property>
<name>dfs.replication</name>   #配置dfs複本數目前有僅兩個Node配置2
<value>2</value>
</property>
 
<property>
<name>dfs.namenode.name.dir</name>  #存放HDFS系統metadata儲存目錄
<value>file:/hadoop/nn</value>
</property>
 
 
<property>
<name>dfs.datanode.data.dir</name>   #存放HDFS系統資料區塊目錄
<value>file:/hadoop/dn</value>
</property>
 
<property>
<name>dfs.namenode.checkpoint.dir</name>   #配置Secondary NameNode配置目錄
<value>file:/hadoop/2ndname</value>
</property>
 
<property>
<name>dfs.namenode.http-address</name> 
<value>navierx:50070</value>
</property>                                 #NameNode透過"navierx:50070"與2dn NameNode交換資料
編輯DataNode 運算主機:   /hadoop/hadoop-2.7.0/etc/hadoop/slaves

新增Datanode 結點 dn01,dn02
編輯"hadoop-env.sh" 配置正確JAVA環境變數

修改以下

export JAVA_HOME=/hadoop/java8u45   #指定JAVA_HOME 目錄

# The maximum amount of heap to use, in MB. Default is 1000.
 
export HADOOP_HEAPSIZE="256       #JVM內存256MB
 
export HADOOP_LOG_DIR=/var/log/hadoop   #儲存Hadoop Log Message 放置

編輯
2nd NamNode (navierx2(.20) 配置(除了上一步NameNode配置另加入以下

<property>
<name>dfs.namenode.secondary.http-address</name>  配置Secondary
<value>navierx2:50090</value>    #配置2nd NameNode與NameNode通訊port: 50090
</property>
 
 
<property>
<name>dfs.namenode.checkpoint.period</name>  
<value>1800</value>                    #配置2nd 彙整與NameNode間隔時間預設3600秒
</property>

Navier: 配置2nd NameName 除了考量災後復原考量外,2nd NameNode 可定期彙整

               由NameNode 龐大產生edit (即是交易紀錄檔)彙整縮小edit大小傳回NameNode
 
               避免edit數量膨脹塞爆硬碟空間 
[一切就緒,初始化Hadoop] 

  在NameNode 節點執行 "hdfs namenode -format "

啟動HDFS 執行"start-dfs.sh" 啟動正常
檢查各結點 ClusterID 是否一致(若不一致,資料將不同步)

[navierx] 10.10.10.10

cat /hadoop/nn/current/VERSION

clusterID=CID-a4aef384-b05b-4dfd-b4b7-153b02adf424
 查看2nd NameNode(Navierx2 10.10.10.20)

cat /hadoop/nn/current/VERSION

clusterID=CID-a4aef384-b05b-4dfd-b4b7-153b02adf424
 查看DataNode (dn01: 10.10.10.30) ClusterID 同步狀況(健康狀況OK)

cat /hadoop/nn/current/VERSION

clusterID=CID-a4aef384-b05b-4dfd-b4b7-153b02adf424
使用 "hdfs dfsadmin -report" 查看目前HDFS 空間使用率

DFS Use: 8kb ,Present Capacity : 彙整可使用容量118.36MB 實為2顆60GB HDD加總

Missing blocks: 遺失資料區塊比率, Block with corrupt  replicas : 不良的複寫資料區塊


Live datanodes(2) : dn01,dn02  更可以詳盡查看各個DataNode使用率資訊

            dn01 資料區塊資訊(dn01: 10.10.10.30

            停止Hadoop 使用: "stop-dfs.sh"
          dn02 資料區塊資訊(dn02: 10.10.10.31)

於本篇最後小節將紀錄HDFS 操作使用

(a.)專案目錄建立(參數: -mkdir),

(b.)將檔案上傳到HDFS(參數:-copyFromLocal)

(c.)直接刪除HDFS系統上的指定檔案

(d.) 從HDFS檔案系統取回指定檔案到Local端

 下圖操作案例:

hdfs dfs -mkdir /chunju   #在HDFS"/"目錄下建立一個專案資料夾名為"chunju"

hdfs dfs -copyFromLoca  /usr/share/doc/*.*  /chunhu   #將特定Local端資料或資料夾上傳到HDFS

hdfs dfs -ls  /chunju   #查看指定資料夾底下檔案顯示

從HDFS 檔案系統取回(-get)指定檔案資料 

hdfs dfs -get  /chunju/mysql-server-5.5/*.* ~/chunju  

#以取回/chunju/mysql-server-5.5/*.*為例

 刪除HDFS系統上檔案與恢復數據(Trash)

再進行檔案系統刪除前我要在NameNode "core-site.xml" 加入Trash

(資源回收桶配置不然刪除時會出錯砍不了: 超拗的2.7.0 Hadoop)

先停止Hadoop HDFS :  "stop-dfs.sh "   配置完成再重啟 "start-dfs.sh"


vi  core-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://navierx:8020</value>
</property>
 
<property>
  <name>fs.trash.interval</name>   #配置資源回收桶當檔案刪除後保留時間配置一天
  <value>1440</value>
</property>
 
</configuration>
示範HDFS檔案系統: 刪除檔案(目錄)操作(使用我們方才copy好的目錄"/chunju/mysql-server-5.5"

先來瀏覽一下 /chunju/mysql-server-5.5/examples 底下資料有四筆資料



現計畫刪除 "examples' 整個目錄

 hdfs dfs -rm -r /chunju/mysql-server-5.5/examples   #example資料夾已經被順利移除

 # 提示移除檔案將移動當前目錄底下.Trash 資料夾存放
 
現本機檢視.Trash 資料夾資料內容(確認資料已被刪除移至.Trash)

 hdfs dfs -ls .Trash/Current/chunju/mysql-server-5.5/examples  
 

現還原(Recovery) examples資料夾 到hdfs線上/chunju/mysql-server-5.5目錄下

hdfs dfs -mv .Trash/Current/chunju/mysql-server-5.5/examples /chunju/mysql-server-5.5/

#下圖確認方才被刪除資料夾,已從.Trash成功還原回到原始資料夾位置


Navier本篇小結:

本Lab 實現Hadoop基礎架構組態與HDFS檔案系統上常用指令操作

下一篇章將探討更進一步"節點管理及 HDFS Loadblancer(資源分配調整)..等等
     

相簿設定
標籤設定
相簿狀態