雲端運算DIY系列【1】:單節點版 Hadoop on CentOS5

多虧internet, 開放源碼以及虛擬化技術,要玩個小規模的雲端運算,自建平台,只要花點時間研究一下英文文件就可以。等玩出興趣了,也有實際應用需求了,隨時就可上手將服務雲端化。 在台灣,除了自己玩,也可以參與CloudTW雲端運算社群。可以加入社群的討論區或Facebook粉絲專頁,跟著社群成長,參與聚會(剛好11/17有第四次的社群meetup活動)或討論增廣見聞,交流心得新知。
評論
評論

前言

有想玩自建雲端雲算平台,並開始踏出第一步嗎?多虧 internet, 開放源碼以及虛擬化技術,要玩個小規模的雲端運算,自建平台,只要花點時間研究一下英文文件就可以。等玩出興趣了,也有實際應用需求了,隨時就可上手將服務雲端化。

在台灣,除了自己玩,也可以參與

什麼是 Hadoop?

Hadoop 專案的目標是希望提供開放源碼的軟體,來建立穩定可擴充的分散式運算平台。

本文目標?

在一個 CentOS 5 的 Linux 系統上安裝 Hadoop 單節點版。初步了解相關使用。

參考資料

Hadoop Common 0.21 版 英文文件 + 安裝經驗

安裝步驟

第一步:準備 Linux 環境 + JDK

1. 安裝 CentOS5.5, 將軟體進行補丁更新。

2. 安裝 Sun JDK,在本練習中下載的是 jdk-6u22-linux-i586-rpm.bin,可上 Sun 官網找一模一樣的版本就可完整照著做。

# sh ./jdk-6u22-linux-i586-rpm.bin   //用 root

3. 確認系統用的是 SUN JDK

# java -version

CentOS 5 的預設 JAVA 套件是 Open JDK,所以執行上面這行後會出現

java version "1.6.0_17″
OpenJDK Runtime Environment (IcedTea6 1.7.5) (rhel-1.16.b17.el5-x86_64)
OpenJDK 64-Bit Server VM (build 14.0-b16, mixed mode)

如果系統目前預設 OpenJDK,用以下步驟換成‭ ‬SUN JDK

‭#‬‭ ‬alternatives‭ --‬install‭ /‬usr/bin/java java‭ /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/java 20000
‭# ‬alternatives‭ --‬install‭ /‬usr/bin/javaws javaws‭ /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/javaws 20000
‭# ‬alternatives‭ --‬install‭ /‬usr/bin/javac‭  ‬javac‭ /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/javac 20000
‭# ‬alternatives‭ --‬config java

有‭ ‬3‭ ‬程式提供‭ ‘‬java‭'‬。

‭  ‬選擇‭        ‬指令
-----------------------------------------------
‭ + ‬1‭           /‬usr/lib/jvm/jre-1.6.0-openjdk.x86‭_‬64‭/‬bin/java
‭   ‬2‭           /‬usr/lib/jvm/jre-1.4.2-gcj/bin/java
‭*  ‬3‭           /‬usr/java/jdk1.6.0‭_‬22‭/‬bin/java

請輸入以保留目前的選擇‭[+]‬,或輸入選擇號碼‭:‬3

做到現在,系統預設的 JDK 就變成 Sun 的 JDK,檢查一下:

‭# ‬java‭ -‬version
java version‭ "‬1.6.0‭_‬22‭"‬
Java‭(‬TM‭) ‬SE Runtime Environment‭ (‬build 1.6.0‭_‬22-b04‭)‬
Java HotSpot(TM‭) ‬Client VM‭ (‬build 17.1-b03‭, ‬mixed mode‭, ‬sharing‭)‬
‭#‬javac‭ -‬version
javac 1.6.0‭_‬22


第二步:單機版 Hadoop 安裝

0‭.‬    建立 hadoop 這個使用者

‭# ‬useradd hadoop
‭# ‬passwd hadoop

接下來的操作都用 hadoop 個使用者來做。

‭# ‬su‭ -- ‬hadoop

1‭.‬    下載 Hadoop 0.21

‭# ‬wget‭ ‬http‭://‬ftp.tcc.edu.tw/pub/Apache‭//‬hadoop/core/hadoop-0.21.0‭/‬hadoop-0.21.0‭.‬tar.gz

2‭.‬    解開並作初步修改後安裝

‭#‬ tar xvzf‭ ‬hadoop-0.21.0‭.‬tar.gz
‭# ‬cd hadoop-0.21.0
‭# ‬vi‭ ‬conf/hadoop-env.sh

vi 打開 haddop-env.sh 後,找到底下這行,在後面添加 JAVA_HOME 的位置

‭# ‬The java implementation to use‭.  ‬Required‭.‬
‭# ‬export JAVA_HOME‭=/‬usr/lib/j2sdk1.6-sun
export JAVA_HOME‭=/‬usr/java/jdk1.6.0‭_‬22

這樣,已經完成了 Hadoop 的安裝!

3. 測試 Hadoop 安裝是否正確

# bin/hadoop
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
fs                   run a generic filesystem user client
version              print the version
jar <jar>            run a jar file
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
classpath            prints the class path needed to get the
Hadoop jar and the required libraries
daemonlog            get/set the log level for each daemon
or
CLASSNAME            run the class named CLASSNAME

Most commands print help when invoked w/o parameters.

看到 hadoop 這個指令怎麼使用的英文說明如上,代表可以使用了!

4. 單機操作模式

Hadoop 預設是單機就可執行的 JAVA 應用程式。通常用來作為測試除蟲用。我們先來執行看看:

以 Hadoop 官網上的例子:我們想查看某個目錄裡面的 xml 檔案內容中,是不是有 dfz 開頭的字存在,如果有,就找出來。假如那個目錄裡面有百萬個 xml 檔案,這樣的工作用一台電腦找就會很辛苦,但是我們有 Hadoop,這件事情就可以分散到很多機器上去執行,再蒐集結果回來。

不過,這裡只是做個試驗,因此我們把 conf/這個目錄裡的 xml 檔案當做要找的問題,複製到 input/目錄中,並把結果放在 output/目錄裡。

# mkdir input

# cp  conf/*.xml input

# bin/hadoop jar hadoop-mapred-examples-0.21.0.jar  grep input output ‘dfs[a-z.]+'

執行上述行,接下來螢幕會跑出非常多的訊息,看起來電腦跑的很忙,真令人高興。執行完了看結果,果然找到一個字 -- dfsadmin,出現一次。

# cat output/*
1       dfsadmin

我們用 Linux 上的 grep 指令來驗證一下,果然在 hadoop-policy.xml 中有看到 dfsadmin 這個字。

# grep dfs input/*
input/hadoop-policy.xml:    dfsadmin and mradmin commands to refresh the security policy in-effect.

5. 單節點分散式操作

剛剛做的是用單一個 java 執行程序來跑這個問題,基本上跟 grep 做的方法差不多,是傳統的 Unix process,沒有分散運算。

這小節要用到 Hadoop 的分散特性,在單台電腦節點上做模擬分散運算的作法,讓每個 Hadoop 的守護進程 (daemon) 各自跑一個 java process 起來,各司其職。

我們先把結果照做出來,相關名詞後續文章會進行介紹解釋。

5.1 修改 Hadoop 設定檔:

# vi conf/core-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

# vi conf/hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

# vi conf/mapred-site.xml

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>

5.2 設定 SSH 無密碼連接

# ssh-keygen -t dsa -P " -f ~/.ssh/id_dsa
# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

# chmod 400  ~/.ssh/authorized_keys

現在你應該可以直接連接 SSH,不需要敲密碼了,試試看。

# ssh localhost

5.3 格式化分散式檔案系統,很酷吧。

英文文件說要執行 bin/hadoop namenode -format

不過,在這一版的 hadoop 裡,如果用上述指令,你會發現下面這行訊息:

DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.

照他的意思,我們就改用 hdfs 這個指令來做格式化。不過,可能是因為 script 寫的不完整,他找不到 HADOOP_HOME 這個環境變數,所以我們得依照自己安裝的環境設定一下這個環境變數。以我的環境為例,我把 HADOOP 解壓縮在/home/hadoop/hadoop-0.21.0:

# export HADOOP_HOME=/home/hadoop/hadoop-0.21.0

# bin/hdfs namenode -format

格式化完之後,系統會建立/tmp/hadoop-hadoop/dfs 的目錄。

注意,如果 hadoop 已經在執行運算了,千萬不要執行格式化的指令,免得把資料刪除了。

5.4 啟動 hadoop daemons:

官方文件上寫說執行 bin/start-all.sh,不過看起來也是要 Deprecated 了。因此執行底下的指令:

# bin/start-dfs.sh
starting namenode, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-namenode-localhost.localdomain.out
localhost: starting datanode, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-datanode-localhost.localdomain.out
localhost: starting secondarynamenode, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-secondarynamenode-localhost.localdomain.out

# bin/start-mapred.sh
starting jobtracker, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-jobtracker-localhost.localdomain.out
localhost: starting tasktracker, logging to /home/hadoop/hadoop-0.21.0/bin/../logs/hadoop-hadoop-tasktracker-localhost.localdomain.out

啟動完成了,看一下帶起來的 Hadoop daemons 吧:

先用 root 把 Firewall 關掉:

# /etc/init.d/iptables stop

若是用本機的 Xwindows 上的 Firefox 看,只需要指向 localhost:

http://localhost:50070/

看到 NameNode 的狀態

http://localhost:50030/

看到 JobTracker 的狀態

看起來真是有模有樣了~

5.5 執行先前單機版跑的搜尋 dfs 開頭關鍵字的那個問題:

# bin/hadoop fs -put conf input

# bin/hadoop jar hadoop-mapred-examples-0.21.0.jar grep input output ‘dfs[a-z.]+'

接下來,你會看到終端機上吐出一大堆的訊息。執行了很久,終於回到系統提示符號。同一時間,可用 browser 連上 NameNode 與 JobTracker 看目前執行狀態。

跑完了的話來看結果(當然還是一樣!):

# cat output/*

1       dfsadmin

你會發現,用雲端運算跑的速度簡直是比單機跑的速度要慢上一大截!這是因為我們只用了一個節點做運算,而他把問題用 Map/Reduce 的方式來執行,多出了一些功夫,整體花費時間就長了。不過,這個架構才能擴充到數十數百數千台運算節點,先從單節點練習起,多節點的時候才好上手。

5.6 本文的單節點安裝與練習到此結束,停掉 hadoop 服務:

# bin/stop-dfs.sh

# bin/stop-mapred.sh

本文小結

以上內容,應該可了解:

1. 台灣的 Cloud 社群加入方式。

2. Hadoop 的基本概念。

3. 安裝好一個單節點的 Hadoop 系統。

若有相關問題,請用留言系統回覆或溝通。謝謝。


上雲猶如太空探險之旅,iKala Cloud AIOps Services協助企業輕鬆穿梭多雲環境

人類從上個世紀積極探索外太空,為了將太空人送上天際必須克服各式挑戰,而現代企業要從「地端」飛向「雲端」,困難程度有過之而無不及。iKala Cloud AIOps Services 提供多項關鍵服務,幫助 IT 團隊輕鬆悠遊多雲環境。
評論
評論

探索外太空,曾經是國際間的科技競賽,近年 Tesla 創辦人馬斯克更準備把太空旅行當成商業服務,預計 2026 年要帶著人類登陸火星。完成一趟星際旅行,需仰賴嶄新的科技及跨科學精密計算,但你知道嗎?現代企業要從「地端」飛上「雲端」,其實挑戰程度不亞於飛向太空。

對企業資訊管理者來說,有限的 IT 資源無法應付繁重的維運項目,加上同時管理公私有雲架構更顯困難、資安管理複雜,例如需要人工執行過濾警示,各種大大小小挑戰不勝枚舉。換言之,企業想航行雲端,就像打造火箭需要龐大資源及人力。不過,現在有更輕鬆穿梭雲端的方式,就是使用雲端技術服務商 iKala 所提供的 AIOps Services(自動化雲端託管服務)

火箭升空前的全盤規劃:iKala AIOps 擬定系統架構規劃、教育訓練

完成一趟太空之旅,必須做足各種研究,例如精準計算飛行軌道、降落定位點、燃料耗用數、與地球通訊設定…等。

對沒有雲端架構經驗的企業來說,就如同當時的科學家,必須用土法煉鋼的方式檢查數據是否有誤。換言之,企業 IT 在升級之前,就需要有經驗的「雲端顧問」來釐清需求、協助規劃「升雲」之旅。而 iKala 就是企業的最佳雲端顧問,旗下 iKala Cloud AIOps Services 會搭配一位專責的技術客戶經理,協助企業提供即時的技術服務與專業建議。

究竟 IT 升級之前,iKala Cloud AIOps Services 有哪些服務?首先是「系統設計規劃」,涵蓋系統架構規劃書、系統上線/遷移計畫書,可因應客戶產業需求,提供對應的解決方案以及顧問服務。而越來越多企業會使用到 Google 的雲端資源,iKala 也有提供 Google 雲端平台訓練服務。

GCP 教育訓練課程多元,包含 GCP 基礎架構(網路設定規劃、權限控管、計算資源等)、大數據與機器學習(大數據分析 Pipeline、BigQuery、ML 模型訓練與應用)、軟體開發技術與流程(容器化、CI/CD、DevOps)等。因為 iKala 團隊取得 10 多項 Google 專業技術證照,才能在企業規劃雲端轉型的前期就一步到位,規劃出整體藍圖,提供更全面的解決方案建議。

火箭升空中的精密操作:iKala AIOps 輔助即時技術維運、資安管理

當火箭準備就緒、升空倒數之際便是決定這趟太空之旅能否成功的關鍵時刻。從太空人的行前訓練與身體檢查,到火箭的引擎測試完成,如果有靜電或一點火花都可能引發爆炸事故。光是在升空階段,太空總部就要有結構、熱控、姿態控制、資料處理、電能、遙傳指令、推進以及飛行軟體等龐大的系統工程師在旁待命。

換言之,企業 IT 移轉雲端過程就像火箭發射的當下,需要有專業、經驗足夠的工程師,才能即時協助企業順利上雲,甚至快速排除緊急的狀況。對此,iKala Cloud AIOps Services 提供兩大關鍵的幫助:技術維運、資訊安全管理。

iKala Cloud AIOps Services 的技術維運服務內容,提供 7 x 24 的 Help Desk,像是緊急 GCP 問題報修、產品使用技術諮詢;或是事故管理,如搭建監控系統、設定規劃告警政策、規劃日誌收集與留存。每月也會提供企業維運報告,報告書有營運效率檢討、流程優化、新服務項目、營運系統建議等。

至於資訊安全管理方面,除了基本的 GCP 專案權限控管掃描、應用程式 OWASP(Open Web Application Security Project)前 10 大項目資安弱點掃描,同時也針對近年相當受重視的 DDoS 防護,iKala 可協助企業導入 GCP 平台的 DDOS 防禦機制。iKala 掌握多年軟體開發和雲端管理經驗,可分享給客戶 DevOps、AI 第一手實務的作法與經驗。

火箭升空後啟動自動導航:iKala AIOps 提供 AI 自動化監控、帳務管理

當火箭成功升空後,太空人為了執行下一階段任務,這時候火箭就需要轉換成自動駕駛模式,或在探索其他星球時,出動機器人來協助執行人力無法負荷的任務,讓太空人專心處理更關鍵的工作。換言之,上雲後的 IT 架構就像升空後的火箭,應該減少 IT 人員的負擔,甚至不需浪費例行時間,就能夠快速掌握整體資訊系統的運作狀況。

不過要讓 IT 架構像火箭具備自動駕駛功能,勢必需要相當高的技術門檻,而 iKala Cloud AIOps Services 正好有相對應的服務。如此一來,IT 人員的生產力就能投入在更具商業價值的研發專案,讓 IT 部門轉型成可創造產值的單位,而非單純的後勤支援角色。

盤點 iKala Cloud AIOps Services 在此環節共有三大類服務。其中一項是 AI 自動化監控與通報服務,幫助 IT 成員主動監控系統,掌握是否有異常操作狀況。其二是帳務方面的管理,幫助企業產出雲端服務月用量帳務分析報告,針對軟體授權需求,整合出帳至  Marketplace 與第三方服務商,自動化做到 License 採購管理。

第三項則是針對服務級別協定(SLA)iKala Cloud AIOps Services 提供 24 x 7、5 x 8 兩種模式,在重大 GCP 服務異常中斷服務時,提供電話、e-mail 聯繫。而且每月會舉辦 1 次月會(以 on-site 或遠端視訊會議方式)提交書面報告。目前 iKala 的企業客戶服務超過 400 多家、涵蓋數 10 種產業,可說是企業成功上雲,最能安心託付的合作夥伴。 

事實上,雲端託管服務(CMS)是目前最夯的新趨勢,根據市調公司 MarketsandMarkets Research 報告指出,全球雲端託管服務的市場規模,預計從 2020 年的 624 億美元,到 2025 年成長至 1,162 億美元,複合年增長率(CAGR)為 13.3%。代表未來有大量企業採用 CMS,以降低 IT 基礎設施的投資成本及風險,藉此提升企業營運的競爭力。

由此看來,企業的數位轉型,就像上個世紀的太空軍備競賽一樣。「時間就是決勝點」,越晚起步的公司與其他數位能力領先群的企業相比,差距只會越來越大。現在就攜手 iKala 嘗試 iKala Cloud AIOps Services,打造穩定的 IT 系統、邁向數據驅動的商業模式,讓企業在數位世代站穩腳步,輕鬆穿梭多雲之間。

了解更多 iKala Cloud AIOps Services