門外漢的 Hadoop 部署大賽(上) by qrtt1 | CodeData
top

門外漢的 Hadoop 部署大賽(上)

分享:

某晚朋友傳來的訊息,有個 Hadoop 部署大賽 想找我一起參加。這對我來說算是個「開始」接觸 Hadoop 的機會。雖然有在使用雲端服務,但由於沒有實際的使用需求,一直都是「嘴炮」說要玩 Hadoop,它都由 1.x 變成 2.x 版,我卻還沒開始學習它!我被說服了「這是個開始接觸 Hadoop 的機會」,不知道這樣有沒有達到比賽主辦方的目的呢?於是在隊上只有 1 個人真的玩過 Hadoop 的情況下參賽。

對於是否要參賽中間有稍為猶豫了一下,特別是對像我這樣什麼都不會的隊員來說,至少不希望自己是個負擔拖累了其他隊友。不過,詳細閱讀競賽的官網路稍為放心了一點,這也是主要信心的來源。下面這麼截圖是來自競賽官網規則說明的一部分,共有 6 項評分,主要在說明不同的服務安裝的檢核方式或軟體執行結果的評分方式:

這樣的競賽內容看起來推廣的意圖顯然大於競爭的成份,由這樣的規則能看出幾項重點:

  1. 完成部署是必要的,其中速度也是比序條件。這呼應近年 DevOps 帶起的自動化部署風潮。要求準度、速度,那麼去人工歷程,就是必要的手段。無論使用種 deploy management 工具或手刻 script,總之得快:天下武功,唯快不破。
  2. 鎖定的 Hadoop 版本必需是 2.x 版,鼓勵大家由新的版本開始學起。
  3. 評分條件中內含資安宣導:規範不同的服務應用特使用者執行,以 root 執行是禁止事項,不予給分。
  4. 自我檢測描述讓初學 hadoop 的參賽者可以判斷執行的結果是否成功。

即使完裝部署 Hadoop 需要這麼多的服務與軟體:

  1. HDFS
  2. MapReduce
  3. ZooKeeper
  4. HBase
  5. Pig
  6. Hive

實際「練習」時,不會感覺到很荒亂,有點像在玩線上遊戲的感覺,一關接著一關地突破它。做完之後,有一種「嗯!我已經走出新手村」的感覺。接著再練經驗值與認識一些最佳實踐。

備戰

看過參賽規則有信心是一回事,但還是得實際動手做看看才不會到時候亂了手腳。由於團隊成員各有不同的程度,已具有經驗的隊員依著 2014 OSDC 講題:快速部署 Hadoop 環境 內附的考題洩題進行實作練習:

洩題的重點在使用 BigTop 簡化安裝,並使用 shell script 對安裝的服務進行設定與產生符合競賽要求的資料。BigTop 簡化了許多事情,不過對於其他跟 Hadoop 不熟的隊員來說,這會錯過許多「撞牆」的機會。在日常工作中,總是在處理「問題」。我採用了最原始的安裝方式,由 Hadoop 官網下載 tarball 進行安裝,由於網路上 Hadoop 1.x 安裝教學略多於 Hadoop 2.x,但仍不難找到一些可用的指示。

學習技術時,我最喜歡的是這些「撞牆」的過程。記得高中上補習班時,老師說過一句話:「要珍惜犯過的時機,因為它讓你驚訝,使你印象深刻」。這呼應了學習新技術時需要的撞牆期,這會成為你面對實務問題時的重要經驗。

以 HDFS 安裝為例,最初練習時就發生 local 檔案無法上傳的問題:

# hadoop fs -put 100mb.img test.img
put:`test.img': No such file or directory

HDFS 是個 userspace 的檔案系統(它具有一般檔案系統的權限、目錄、檔案與操作方式,與 linux 的檔案系統概念相似)。NameNode 管理檔案區塊索引等描述資料,DataNode 管理資料。

網路查詢了一下討論,獲得了一個基本的知識:HDFS 準備好後,它不會建立任何應用程式需要的目錄結構。我們執行 put 指令,沒名確指定路徑時,它上傳到目前使用者的「家目錄」。其實蠻像使用 scp 上傳檔案至遠端 server 沒寫成絕對路徑的情況。只是 linux 的 user home 是 /home/${username} 而 HDFS 的是 /user/${username}。所以,我們需要針對目前的使用者建立對應的路徑。假設使用者名稱為 hdfs 就應該建立 /user/hdfs 再進行 put 指令就能正確將檔案上傳至 HDFS 內。

對有經驗的學習者,這時應該要順手查一下哪些目錄結構是應該要事先建立完成的,例如 /tmp 有許多應用程式會期待有這個位置能使用:

su - hdfs -c "hadoop fs -mkdir -p /tmp"
su - hdfs -c "hadoop fs -chmod 1777 /tmp"

在反複「撞牆」過程會學到不同的知識,例如指定 HADOOP_USER_NAME 環境變數,可以指定執行 hadoop fs 指令時的使用者,這時就不會採用 whoami 的結果作為目前的使用者。在練習不同服務與軟體時,最常遇到的就是 hdfs 搞不定的問題,不外乎就是路徑沒有事先建出來,或服務使用了不同的 HADOOP_USER_NAME 執行,在預期的路徑之外導致失敗。

除了這些細節之外還有使用 BigTop 簡化安裝不會發現的是不同軟體間版本匹配的問題,由於練習時,我是手工安裝的自己隨意隨著的版本,像 HBase 選擇的版本就不匹配,經隊友指示我應該參考手冊的 Hadoop version support matrix:

獲得了適當的版本後,終於能正常啟用 HBase。這事件讓我有機會意識到 Hadoop 軟體間的版本匹版問題,後續的 Pig 與 Hive 練習前,就有特別查詢了版本是否相容的問題。

策略與實戰

初賽在 5/3 日九點進行,在前一晚稍為討論了點策略與分工。這終究是個比賽,比結果正確率與速度。準備工作在將安裝流程寫成 shell script 後其實就算完工,但仍需要策略:

  1. 進攻主線是執行安裝部署
  2. 防守則是研究 submit script,研究是否需要變更計劃

不過,開賽的時候發現 submit script 是一隻執行檔,無法解讀(反組譯後發現有個 embedded_files 函式,也許需要的資訊就在裡面,但我們對組語有閱讀障礙就是了)。那麼只能繼續進攻方向的計劃,並等待需要處理的例外。唯一遇到的問題只有 hostname 沒正確對應到 IP 需手動修改 /etc/hostname 排除問題。

希望這簡單的參賽心得,像我一樣覺得想接觸 Hadoop 的人,但一直沒付諸行動的。透過競賽項目練習,獲得一些基本的理解。

最後得感謝給力的隊友,讓我專心做個啦啦隊。

後續 >> 門外漢的 Hadoop 部署大賽(下)

分享:
按讚!加入 CodeData Facebook 粉絲群

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

關於作者

目前在一家網路應用軟體公司擔任開發工作,對多媒體處理與雲端應用充滿興趣,工作之餘亦常整理開發經驗分享於網路或於社群活動時進行分享。

熱門論壇文章

熱門技術文章