
門外漢的 Hadoop 部署大賽(上)
某晚朋友傳來的訊息,有個 Hadoop 部署大賽 想找我一起參加。這對我來說算是個「開始」接觸 Hadoop 的機會。雖然有在使用雲端服務,但由於沒有實際的使用需求,一直都是「嘴炮」說要玩 Hadoop,它都由 1.x 變成 2.x 版,我卻還沒開始學習它!我被說服了「這是個開始接觸 Hadoop 的機會」,不知道這樣有沒有達到比賽主辦方的目的呢?於是在隊上只有 1 個人真的玩過 Hadoop 的情況下參賽。 對於是否要參賽中間有稍為猶豫了一下,特別是對像我這樣什麼都不會的隊員來說,至少不希望自己是個負擔拖累了其他隊友。不過,詳細閱讀競賽的官網路稍為放心了一點,這也是主要信心的來源。下面這麼截圖是來自競賽官網規則說明的一部分,共有 6 項評分,主要在說明不同的服務安裝的檢核方式或軟體執行結果的評分方式: 這樣的競賽內容看起來推廣的意圖顯然大於競爭的成份,由這樣的規則能看出幾項重點:
即使完裝部署 Hadoop 需要這麼多的服務與軟體:
實際「練習」時,不會感覺到很荒亂,有點像在玩線上遊戲的感覺,一關接著一關地突破它。做完之後,有一種「嗯!我已經走出新手村」的感覺。接著再練經驗值與認識一些最佳實踐。 備戰看過參賽規則有信心是一回事,但還是得實際動手做看看才不會到時候亂了手腳。由於團隊成員各有不同的程度,已具有經驗的隊員依著 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 是 對有經驗的學習者,這時應該要順手查一下哪些目錄結構是應該要事先建立完成的,例如 su - hdfs -c "hadoop fs -mkdir -p /tmp" su - hdfs -c "hadoop fs -chmod 1777 /tmp" 在反複「撞牆」過程會學到不同的知識,例如指定 HADOOP_USER_NAME 環境變數,可以指定執行 除了這些細節之外還有使用 BigTop 簡化安裝不會發現的是不同軟體間版本匹配的問題,由於練習時,我是手工安裝的自己隨意隨著的版本,像 HBase 選擇的版本就不匹配,經隊友指示我應該參考手冊的 Hadoop version support matrix: 獲得了適當的版本後,終於能正常啟用 HBase。這事件讓我有機會意識到 Hadoop 軟體間的版本匹版問題,後續的 Pig 與 Hive 練習前,就有特別查詢了版本是否相容的問題。 策略與實戰初賽在 5/3 日九點進行,在前一晚稍為討論了點策略與分工。這終究是個比賽,比結果正確率與速度。準備工作在將安裝流程寫成 shell script 後其實就算完工,但仍需要策略:
不過,開賽的時候發現 submit script 是一隻執行檔,無法解讀(反組譯後發現有個 embedded_files 函式,也許需要的資訊就在裡面,但我們對組語有閱讀障礙就是了)。那麼只能繼續進攻方向的計劃,並等待需要處理的例外。唯一遇到的問題只有 hostname 沒正確對應到 IP 需手動修改 希望這簡單的參賽心得,像我一樣覺得想接觸 Hadoop 的人,但一直沒付諸行動的。透過競賽項目練習,獲得一些基本的理解。 最後得感謝給力的隊友,讓我專心做個啦啦隊。 |