Pages

Subscribe:

Ads 468x60px

Labels

2013年12月2日 星期一

創新服務更要小心 雲端運算的安全與風險

花俊傑
談到雲端運算,它究竟是一種「技術」或「概念」,到底是「產品」還是「服務」,在搜尋引擎上只要打入關鍵字,就可以看到許多不同的見解與想法。本文僅從資訊安全的角度,來探討雲端運算可能帶來的資安問題或風險,以提供給資訊管理人員作為參考。
雲端運算(Cloud Computing)從2008年開始就是一個熱門話題,對於雲端運算的應用,無論是應用程式服務、資安服務或資料儲存等等,各家都有不同的說法與見解,但從資安的觀點來看,仍有一些地方值得企業審慎注意,以免落入新資訊科技運用的迷思之中。

首先,讓我們回憶一下,在還沒有所謂的雲端運算之前,企業對於資訊的處理與運作的方式是什麼?一般普遍性的作法是,企業需要自行添購或開發商務運作所需要的軟體和硬體,並且建置專屬的資訊機房和網路環境,然後由內部的資訊人員來執行維運等相關工作。

對大多數的企業而言,隨著營運規模的擴展,為了要增加資訊服務的穩定與效率,在資訊科技的費用支出相對也會節節升高,尤其是面對現今愈來愈複雜的網路環境與技術,再加上好的資訊人才難尋,和營運相關的資訊問題解決能力也需要時間培養,種種問題都讓企業主傷透腦筋,而「雲端運算」的出現,彷彿就像在烏雲之中露出一道曙光。

雲端運算的資安服務 

究竟什麼是雲端運算,Gartner定義它是一種嶄新且具延展性的運算方法,可以將計算、儲存等資訊科技的運用,透過網路以服務方式提供給外部客戶使用。而維基百科則說,「雲端運算是一種基於網際網路的運算新方式,透過網際網路上的服務為個人和企業使用者提供所需即取的運算。」

▲雲端運算具備三大運算架構與服務模式,包括了基礎架構即服務、平台即服務以及軟體即服務等,當然還有人提供許多不同的服務。


目前,雲端運算具備三大運算架構與服務模式,包括了基礎架構即服務(Infrastructure as a Service,IaaS)、平台即服務(Platform as a Service,PaaS)及軟體即服務(Software as a Service,SaaS)等,當然還有人提供許多不同的服務。

各種雲端服務雖然眾說紛紜,但有三樣東西卻是必要組成,分別是網路、運算、服務。換句話說,透過網路連線,由遠端所提供的強大運算和服務,讓企業可藉此改變以往的資訊處理方式,除了可提高作業效率,進而節省成本支出之外,同時更獲得資訊科技的創新應用。

對於資安廠商而言,除了銷售傳統的資安軟硬體設備,若是還能藉由雲端運算的協助加持,提供更多的資安加值應用服務,那是再好也不過了。根據個人的觀察,目前資安廠商運用雲端運算來提供的資安服務,大致有下列幾種:

●病毒防護—讓防毒軟體的使用者,能夠即時回傳電腦上可疑的病毒相關資訊,就能在防毒業者的雲端上比對病毒特徵,不需要再等候防毒軟體更新病毒碼,可以更有效地防止病毒的感染。

●網址過濾—面對日益增加的惡意網站,可協助企業透過雲端進行網址黑名單的比對,透過即時更新的惡意網頁資料庫,可以提高攔截的效率。

●郵件過濾—配合傳統的垃圾郵件過濾機制,比對垃圾郵件如來源IP、信件標頭等資訊,同時也可結合防毒功能,即時掃描郵件的附件是否安全。

●身分識別—企業可透過雲端進行使用者身分認證,做到單一登入功能,讓使用者可在任何地點登入使用各項應用服務,解決使用者的授權問題。

至於業者宣稱雲端運算可為企業帶來的好處,則有以下幾點:

1. 降低營運成本—企業不需要再花錢去購買軟體和硬體,也不需要資訊人員來開發或維運所需的應用服務,只需透過租賃或使用者付費方式,大幅節省不必要的成本支出。

2. 提高工作效率—隨著網路無所不在的連結性,無論工作者身在何處都可享有相同便捷的應用服務,而且藉由雲端強大的運算能力,可有效解決工作端運算效能不足的問題。

3. 擴充未來應用—雲端運算可讓企業快速部署及應用新科技,無論是應用服務的升級或擴展,在短時間之內就可完成,不必擔心資源耗費的問題。

雲端運算可能的資安風險 

根據市場調查機構Gartner的研究顯示,未來以雲端運算方式所提供的安全應用服務,將會對市場造成相當大的衝擊,預估在2013年會比目前再成長三倍。而趨勢科技的調查則指出,雖然業界看好雲端運算在資安上的應用,但是也有61%的企業受訪者表示,除非可以確定應用雲端運算不會產生重大的資安風險,否則目前仍不會急於導入雲端運算的相關應用服務。

從資訊安全的觀點來看,企業在運用新的資訊技術時,對於其隱含的資安風險,當然要做審慎的評估,而個人認為在採用雲端運算服務方面,至少有三個層面需要考量。

首先是網路層面,因為一旦商業運作需要仰賴雲端來進行,那麼網路頻寬的消耗,是否真如業者所言來得那麼節省?會不會拖累了原有網路服務的正常使用?這些都需要實地測試才可得知。

另外,網路連線的穩定性也會比以往要求來得更高,因此在網路管理方面,原有的網路設備是否需要擴充?如何進行網路效能的最佳化調校?採用何種網路備援的方式?這些可能都會變成隱藏的成本支出。而網路傳輸的安全性當然也要涵蓋其中,若是有敏感資料需要傳輸,那麼是否有相對安全的加密機制和身分認證機制等等,都是使用雲端服務時必需的要求。

其次是資料層面,企業要放置什麼資料在雲端上,將會決定所需的安全強度,在採用雲端資料服務的初期,建議企業先以非敏感性的資料為主,藉此來測試評估服務的安全性,而非一開始即將最重要的商業資訊,透過雲端方式來進行運算或儲存,以避免當資訊外洩時可能造成的衝擊。

最後則是法規層面,企業要注意雲端服務廠商本身的安全是否值得信賴,是否有可供辨識的安全保證,例如取得政府的許可或國際標準ISO 27001的認證,因為這代表了雲端服務廠商在資料保護、實體安全、應用程式安全、系統可用性、漏洞管理、法規遵循方面是否有一套完善的管理制度,對於資訊安全可提供一定的保障。

另外,萬一不幸發生資安問題,在責任歸屬與賠償機制上,就有賴於事先的合約或服務等級協議(SLA),所以在一開始的服務簽定時,企業法務部門的參與協助也是十分重要。

評估企業整體的應用安全 

事實上,雲端運算服務除了造福企業之外,對於惡意的駭客而言,也算是一大福音,因為這代表了許多企業更加依賴網路連線,會將重要的資訊透過網路傳輸,並且將商業資料儲存在企業環境之外,如果輕忽了可能的資安風險,就等於增加了駭客入侵的機會。

舉例來說,像是駭客可以利用雲端運算的強大能力來破解使用者帳號、密碼,竊取雲端所儲存的資訊;或是發動分散式阻斷網路攻擊(DDoS),癱瘓雲端網路的運作,也就間接導致重要營運服務的停擺。另外,雲端資安服務機制的有效性,是否一如業者宣稱的可有效攔阻惡意程式入侵,是否會有潛藏的安全漏洞反而受到利用等,這些也都是未來需要關注的地方。

▲採用雲端運算服務需要考量網路層面,一旦商業運作需要仰賴雲端來進行,那麼網路頻寬的消耗,是否真如業者所言來得那麼節省?


所以,企業在評估導入雲端運算的服務時,建議一開始先從非關鍵性的應用服務開始,而除了尋找可靠的雲端服務供應商之外,也要考慮有沒有其他的替代選擇。否則一旦企業所倚賴的雲端服務受到攻擊而停擺之後,將會對企業造成重大衝擊,例如關鍵資料無法存取、客戶資料外洩、防毒系統失效、惡意程式入侵等等,這些都有賴於事前整體的考量,絕非像是購置單一硬體和軟體一樣,只要輕鬆以對即可完成。

NCHC Cloud Computing Research Group

http://trac.nchc.org.tw/cloud/

2013年12月1日 星期日

[hadoop]Hadoop 小象安裝測試在 Ubuntu (2)

續前篇 http://codebeta.blogspot.tw/2012/12/hadoophadoop-ubuntu.html,接下來是試跑 wordcount 程式,驗證系統有安裝好。
下載所需資料
要執行 wordcount 程式,要先有資料才行。Noll 好心已經給了三個連結的文件讓你下載。
每一個電子書,請下載 UTF-8 的文字檔,放在你想要的位置。這裡選的是 /tmp/gutenberg
hduser@ubuntu:~$ ls -l /tmp/gutenberg/ 
total 3592 
-rw-r--r-- 1 hduser hadoop  674566 Dec 23 07:37 pg20417.txt 
-rw-r--r-- 1 hduser hadoop 1573150 Dec 23 07:39 pg4300.txt 
-rw-r--r-- 1 hduser hadoop 1423801 Dec 23 07:38 pg5000.txt 
hduser@ubuntu:~$

啟動 hadoop 叢集

hduser@ubuntu:~$ /usr/local/hadoop/bin/start-all.sh

複製資料到 HDFS (Hadoop 的檔案系統)

使用 hadoop 的指令,把檔案從真實檔案系統,送進 HDFS。
hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop dfs -copyFromLocal /tmp/gutenberg /user/hduser/gutenberg 
hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop dfs -ls /user/hduser 
Found 1 items 
drwxr-xr-x   - hduser supergroup          0 2012-12-25 00:23 /user/hduser/gutenberg 
hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop dfs -ls /user/hduser/gutenberg 
Found 4 items 
drwxr-xr-x   - hduser supergroup          0 2012-12-25 00:23 /user/hduser/gutenberg/gutenberg 
-rw-r--r--   1 hduser supergroup     674566 2012-12-25 00:21 /user/hduser/gutenberg/pg20417.txt 
-rw-r--r--   1 hduser supergroup    1573150 2012-12-25 00:21 /user/hduser/gutenberg/pg4300.txt 
-rw-r--r--   1 hduser supergroup    1423801 2012-12-25 00:21 /user/hduser/gutenberg/pg5000.txt 
hduser@ubuntu:~$

執行 MapReduce 程式

請注意執行的路徑:要先 cd 到 /usr/local/hadoop。
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop jar hadoop*examples*.jar wordcount /user/hduser/gutenberg/* /user/hduser/gutenberg-output
[註1]若在別的工作路徑,會發生:
hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar hadoop*examples*.jar wordcount /user/hduser/gutenberg /user/hduser/gutenberg-output 
Exception in thread "main" java.io.IOException: Error opening job jar: hadoop*examples*.jar
[註3]如果已經執行過,想再執行一次,會因為 output 目錄已經存在而失敗。此時可以執行刪目錄的指令:
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -rmr /user/hduser/gutenberg-output 
Deleted hdfs://localhost:54310/user/hduser/gutenberg-output 
hduser@ubuntu:/usr/local/hadoop$
執行結果如下:
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop jar hadoop*examples*.jar wordcount /user/hduser/gutenberg/* /user/hduser/gutenberg-output 
12/12/25 00:52:27 INFO input.FileInputFormat: Total input paths to process : 6 
12/12/25 00:52:27 INFO util.NativeCodeLoader: Loaded the native-hadoop library 
12/12/25 00:52:27 WARN snappy.LoadSnappy: Snappy native library not loaded 
12/12/25 00:52:28 INFO mapred.JobClient: Running job: job_201212250016_0007 
12/12/25 00:52:29 INFO mapred.JobClient:  map 0% reduce 0% 
12/12/25 00:52:44 INFO mapred.JobClient:  map 16% reduce 0% 
12/12/25 00:52:47 INFO mapred.JobClient:  map 33% reduce 0% 
12/12/25 00:52:53 INFO mapred.JobClient:  map 50% reduce 0% 
12/12/25 00:52:56 INFO mapred.JobClient:  map 66% reduce 11% 
12/12/25 00:52:59 INFO mapred.JobClient:  map 83% reduce 11% 
12/12/25 00:53:01 INFO mapred.JobClient:  map 100% reduce 11% 
12/12/25 00:53:04 INFO mapred.JobClient:  map 100% reduce 22% 
12/12/25 00:53:10 INFO mapred.JobClient:  map 100% reduce 100% 
12/12/25 00:53:15 INFO mapred.JobClient: Job complete: job_201212250016_0007 
12/12/25 00:53:15 INFO mapred.JobClient: Counters: 29 
12/12/25 00:53:15 INFO mapred.JobClient:   Job Counters 
12/12/25 00:53:15 INFO mapred.JobClient:     Launched reduce tasks=1 
12/12/25 00:53:15 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=45175 
12/12/25 00:53:15 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0 
12/12/25 00:53:15 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0 
12/12/25 00:53:15 INFO mapred.JobClient:     Launched map tasks=6 
12/12/25 00:53:15 INFO mapred.JobClient:     Data-local map tasks=6 
12/12/25 00:53:15 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=25718 
12/12/25 00:53:15 INFO mapred.JobClient:   File Output Format Counters 
12/12/25 00:53:15 INFO mapred.JobClient:     Bytes Written=886978 
12/12/25 00:53:15 INFO mapred.JobClient:   FileSystemCounters 
12/12/25 00:53:15 INFO mapred.JobClient:     FILE_BYTES_READ=4429692 
12/12/25 00:53:15 INFO mapred.JobClient:     HDFS_BYTES_READ=7343786 
12/12/25 00:53:15 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=7529522 
12/12/25 00:53:15 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=886978 
12/12/25 00:53:15 INFO mapred.JobClient:   File Input Format Counters 
12/12/25 00:53:15 INFO mapred.JobClient:     Bytes Read=7343034 
12/12/25 00:53:15 INFO mapred.JobClient:   Map-Reduce Framework 
12/12/25 00:53:15 INFO mapred.JobClient:     Map output materialized bytes=2948682 
12/12/25 00:53:15 INFO mapred.JobClient:     Map input records=155864 
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce shuffle bytes=2681669 
12/12/25 00:53:15 INFO mapred.JobClient:     Spilled Records=511924 
12/12/25 00:53:15 INFO mapred.JobClient:     Map output bytes=12152190 
12/12/25 00:53:15 INFO mapred.JobClient:     Total committed heap usage (bytes)=978935808 
12/12/25 00:53:15 INFO mapred.JobClient:     CPU time spent (ms)=7070 
12/12/25 00:53:15 INFO mapred.JobClient:     Combine input records=1258344 
12/12/25 00:53:15 INFO mapred.JobClient:     SPLIT_RAW_BYTES=752 
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce input records=204644 
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce input groups=82335 
12/12/25 00:53:15 INFO mapred.JobClient:     Combine output records=204644 
12/12/25 00:53:15 INFO mapred.JobClient:     Physical memory (bytes) snapshot=1124028416 
12/12/25 00:53:15 INFO mapred.JobClient:     Reduce output records=82335 
12/12/25 00:53:15 INFO mapred.JobClient:     Virtual memory (bytes) snapshot=2677747712 
12/12/25 00:53:15 INFO mapred.JobClient:     Map output records=1258344
檢查輸出結果,使用以下指令:
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls /user/hduser/gutenberg-output 
Found 3 items 
-rw-r--r--   1 hduser supergroup          0 2012-12-25 00:53 /user/hduser/gutenberg-output/_SUCCESS 
drwxr-xr-x   - hduser supergroup          0 2012-12-25 00:52 /user/hduser/gutenberg-output/_logs 
-rw-r--r--   1 hduser supergroup     886978 2012-12-25 00:53 /user/hduser/gutenberg-output/part-r-00000 
hduser@ubuntu:/usr/local/hadoop$
把結果的內容顯示出來的指令:
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -cat /user/hduser/gutenberg-output/part-r-00000
把結果搬回真實檔案系統,然後看內容的指令:
hduser@ubuntu:/usr/local/hadoop$ mkdir /tmp/gutenberg-output 
hduser@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -getmerge /user/hduser/gutenberg-output /tmp/gutenberg-output 
12/12/25 01:03:58 INFO util.NativeCodeLoader: Loaded the native-hadoop library 
hduser@ubuntu:/usr/local/hadoop$ head /tmp/gutenberg-output/gutenberg-output 
"(Lo)cra"    2 
"1490    2 
"1498,"    2 
"35"    2 
"40,"    2 
"A    4 
"AS-IS".    2 
"A_    2 
"Absoluti    2 
"Alack!    2 
hduser@ubuntu:/usr/local/hadoop$

Hadoop Web Interface

目前版本有提供 web 介面,只能看狀態,不能改。
  • http://localhost:50070/ – 可以看 NameNode 的狀態
  • http://localhost:50030/ – 可以看 JobTracker 的狀態
  • http://localhost:50060/ – 可以看 TaskTracker 的狀態

結語

到這裡,單電腦叢集的 Hadoop 系統,算是非常簡單的介紹完畢。可以從這裡的操作知道,若是需要一個可用的 Hadoop,要經過:(1)操作系統的安裝、(2)java系統的安裝、(3)hadoop系統的安裝、(4)以上三個系統的設定。要執行程式,則要:(1)程式資料的準備、(2)將資料搬進至Hadoop檔案系統、(3)撰寫執行 MapReduce 程式、(4)將資料搬出Hadoop檔案系統。這些工作都不是簡單買個套裝程式回來,拖一拖、拉一拉,或是按一按鈕就可以解決的事情。而且,這個單叢集系統,還不具備備援、分散式計算的功能,都還需要進一步的規劃及調整。
從這個最簡單的系統,接下來則會因著各人的工作項目而有不同的發展方向:
  • 系統工程師,要開始研究 hadoop 設定,使之成為分散式系統。並且建立備援機制。研究 hadoop 管理工具
  • 軟體工程師,依據需求,安裝 HBASE 或 Cassandra 資料庫,或者利用檔案來存放資料。研究 MapReduce 程式風格。建立自用的介面程式與資料系統、檔案系統做存取。

[hadoop]Hadoop 小象安裝測試在 Ubuntu

小象要開始跑

在了解大概 hadoop 能做什麼之後,就來安裝試試吧。Michael G. Noll 寫了幾份非常好的教學。 這裡就按照他的教學,一步步重做一遍。就從他的 Running Hadoop On Ubuntu Linux (Single-Node Cluster) 開始讓小象跑。
而我這篇是讓我自己這個新手能夠不忘記我是怎麼安裝的筆記。

安裝 ubuntu 在 vmware 裡,完成 vmware-tool 安裝。

這一步是原來教學沒有的步驟。為了大家可以在公司、或自家的電腦試用,所以用 vmware 裝一個虛擬電腦。首先要注意,vmware-tool 的安裝跟 vmware 版本有關。vmware-tool 最重要的是可以讓 host 系統 及 guest 系統用「拖拉」、「複製貼上」的方式,交換檔案及文字。我使用的版本是 vmware 8,在裝好 ubuntu 12.04 之後,vmware-tool 可使用隨附的 8.8.0 版安裝。(vmware 7 可裝 ubuntu 11.04 配合 6.0.2。)在確認完 vmware 版本之後,就不用擔心之後會有問題了。
到 http://www.ubuntu.com/download/desktop 下載 12.04 LTS,下載 iso 檔。選擇 desktop 是因為有桌面可用,比較方便。
將 ubuntu 安裝完畢,先加入一個使用者 hduser,這是之後專門執行 hadoop 程式的使用者。
$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hduser
hduser 要加入 sudoer 名單中,才能安裝 vmware-tool。
先用安裝者的帳號執行
$ sudo visudo
再把 hduser (ALL:ALL)=ALL 加在 root (ALL:ALL)=ALL 底下。
或把 hduser 加到 admin 的 group 裡面。(首先要確定有 admin 的 group。可參考)
$ sudo usermod -g admin hduser
然後切換使用者為 hduser。
接下來,在 vmware 的「VM」選單,按下「install VMware tool」,在虛擬電腦裡,會 mount 一個檔案。點兩下,會使用 archie manager 開啟檔案,把裡面的目錄「vmware-tools-distrib」拖到桌面上。
啟動 terminal,切換到 ~/Desktop/vmware-tools-distrib,執行
$ sudo ./vmware-install.pl
中間經過一連串的問題,都是按 enter 通過。如果有因為任何的錯誤而停下,都是因為 vmware-tools 的版本與 ubuntu 版本不合導致。我花了很多冤枉時間,才知道是版本問題。vmware 出 vmware-tools 程式一定是可以用才釋出,把版本弄對就不用白花時間。
安裝完畢,重開機一次。

設定 SSH

因為 hadoop 使用 ssh 管理它的 node,接下來要設定 ssh。
首先,產生 ssh key。
$ su - hduser # 換成 root 權限 
hduser@ubuntu:~$ ssh-keygen -t rsa -P "" 
Generating public/private rsa key pair. 
Enter file in which to save the key (/home/hduser/.ssh/id_rsa): 
Created directory '/home/hduser/.ssh'. 
Your identification has been saved in /home/hduser/.ssh/id_rsa. 
Your public key has been saved in /home/hduser/.ssh/id_rsa.pub. 
The key fingerprint is: 
db:35:f4:ae:e3:79:48:d3:95:fa:2d:22:a8:43:5c:dd hduser@ubuntu 
The key's randomart image is: 
... 
hduser@ubuntu:~$
第二行是產生一個不用密碼的 RSA key pari。這樣就不用 hadoop 與 node 溝通時,都要人去打密碼。
再來,把新產生的 key 放到已認證的 key 中。
hduser@ubuntu:~$ cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
因為 desktop 版沒有 ssh server,因此,要加裝 openssh-server
hduser@ubuntu:~$ sudo apt-get install openssh-server
測試一下能不能連上 ssh server。因為這版的 server 預設使用 ECDSA 所以,ssh 的指令要強迫使用 rsa。
hduser@ubuntu:~$ ssh -oHostKeyAlgorithms='ssh-rsa' localhost 
The authenticity of host 'localhost (127.0.0.1)' can't be established. 
RSA key fingerprint is a3:99:7f:2b:8e:92:34:20:59:2f:2d:10:94:c9:60:74. 
Are you sure you want to continue connecting (yes/no)? yes 
Warning: Permanently added 'localhost' (RSA) to the list of known hosts. 
Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic i686)
* Documentation:  https://help.ubuntu.com/
222 packages can be updated. 
52 updates are security updates.
Last login: Mon Dec 24 00:56:30 2012 from localhost 
hduser@ubuntu:~$ exit 
logout 
Connection to localhost closed. 
hduser@ubuntu:~$
另一個解決辦法是產生 ECDSA,並使用 ECDSA。
hduser@ubuntu:~$ ssh-keygen -t ecdsa -P "" 
Generating public/private ecdsa key pair. 
Enter file in which to save the key (/home/hduser/.ssh/id_ecdsa): 
Your identification has been saved in /home/hduser/.ssh/id_ecdsa. 
Your public key has been saved in /home/hduser/.ssh/id_ecdsa.pub. 
The key fingerprint is: 
27:64:63:de:16:4b:97:f4:58:96:11:46:6d:a2:24:7e hduser@ubuntu 
The key's randomart image is:
因為後續的過程中,按照這個教學的話,hadoop 會自然的使用 ECDSA,所以,還是要用 ECDSA 的方式把 key 加到 .ssh/authorized_keys 裡面。
hduser@ubuntu:~$ cat $HOME/.ssh/id_ecdsa.pub >> $HOME/.ssh/authorized_keys
Noll 先生說,如果有遇到問題,要檢查一下在 /etc/ssh/sshd_config 裡:
  • PubkeyAuthentication 應該是 yes。
  • AllowUsers 如果有打開,則要把 hduser 加進去。
  • 如果 ssh server 的設定有異動,要強迫 ssh server 重載設定。 $ sudo /etc/init.d/ssh reload

安裝 java

java 至少要用到 ,我們可以使用指令來檢查 java 版本
hduser@ubuntu:~$ java -version 
The program 'java' can be found in the following packages: 
* default-jre 
* gcj-4.6-jre-headless 
* gcj-4.7-jre-headless 
* openjdk-7-jre-headless 
* openjdk-6-jre-headless 
Try: sudo apt-get install
新安裝的 ubuntu 12.04 desktop LTS 沒有裝 java runtime。要自己安裝。
hduser@ubuntu:~$ sudo apt-get install default-jre
hduser@ubuntu:~$ java -version 
java version "1.7.0_09" 
OpenJDK Runtime Environment (IcedTea7 2.3.3) (7u9-2.3.3-0ubuntu1~12.10.1) 
OpenJDK Client VM (build 23.2-b09, mixed mode, sharing) 
hduser@ubuntu:~$

安裝小象

從 Apache 下載 hadoop,目前穩定版是 1.0.4,到 http://www.apache.org/dyn/closer.cgi/hadoop/common/ 它會給你最近的 mirror 站點。下載 1.0.4 版的 hadoop-1.0.4.tar.gz。
 image
使用 firefox 下載,預設會放到 ~/Downloads 裡面。點兩下 hadoop-1.0.4.tar.gz,archive manager 會打開該壓縮檔,把裡面的目錄 hadoop-1.0.4 拉到桌面,改名為 hadoop,再移到 /usr/local 裡面去。使用指令
hduser@ubuntu:~$ sudo mv Desktop/hadoop/ /usr/local/ 
[sudo] password for hduser: 
hduser@ubuntu:~$ ls -l /usr/local 
total 36 
drwxr-xr-x  2 root   root   4096 Oct 17 07:56 bin 
drwxr-xr-x  2 root   root   4096 Oct 17 07:56 etc 
drwxr-xr-x  2 root   root   4096 Oct 17 07:56 games 
drwxr-xr-x 14 hduser hadoop 4096 Dec 24 01:09 hadoop 
drwxr-xr-x  2 root   root   4096 Oct 17 07:56 include 
drwxr-xr-x  4 root   root   4096 Oct 17 07:59 lib 
lrwxrwxrwx  1 root   root      9 Dec 13 10:10 man -> share/man 
drwxr-xr-x  2 root   root   4096 Oct 17 07:56 sbin 
drwxr-xr-x  7 root   root   4096 Oct 17 08:00 share 
drwxr-xr-x  2 root   root   4096 Oct 17 07:56 src
接下來要設定 .bashrc。(ubuntu 預設是用 bash。)使用指令開啟 .bashrc 來改。
hduser@ubuntu:~$ gedit .bashrc
在檔案的最後加進以下的設定。(原文中的 HADOOP_HOME 的設定已經要改用 HADOOP_PREFIX。)
################# for hadoop settings ############## 
# Set Hadoop-related environment variables 
export HADOOP_PREFIX=/usr/local/hadoop
# Set JAVA_HOME (we will also configure JAVA_HOME directly for Hadoop later on) 
export JAVA_HOME=/usr/lib/jvm/default-java
# Some convenient aliases and functions for running Hadoop-related commands 
unalias fs &> /dev/null 
alias fs="hadoop fs" 
unalias hls &> /dev/null 
alias hls="fs -ls"
# If you have LZO compression enabled in your Hadoop cluster and 
# compress job outputs with LZOP (not covered in this tutorial): 
# Conveniently inspect an LZOP compressed file from the command 
# line; run via: 

# $ lzohead /hdfs/path/to/lzop/compressed/file.lzo 

# Requires installed 'lzop' command. 

lzohead () { 
    hadoop fs -cat $1 | lzop -dc | head -1000 | less 
}
# Add Hadoop bin/ directory to PATH 
export PATH=$PATH:$HADOOP_PREFIX/bin

其他使用者要用 hadoop 的,也要更新這個 ~/.bashrc

設定 hadoop -- 1

第一個要處理的是 hadoop-env.sh
hduser@ubuntu:~$ gedit /usr/local/hadoop/conf/hadoop-env.sh
把裡面的
# export JAVA_HOME=/usr/lib/j2sdk1.5-sun
的底下,加上
export JAVA_HOME=/usr/lib/jvm/default-java
再來要把 ipv6 關掉。檔案的最後加上
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

設定 hadoop -- 2

接下來是 core-site.xml,這是設定 hadoop 要在真實檔案系統的位置。因此,先建立一個目錄給 hadoop 使用。
hduser@ubuntu:~$ sudo mkdir -p /app/hadoop/tmp 
[sudo] password for hduser: 
hduser@ubuntu:~$ ls -l /app/hadoop/ 
total 4 
drwxr-xr-x 2 root root 4096 Dec 24 02:02 tmp 
hduser@ubuntu:~$ sudo chown hduser:hadoop /app/hadoop/tmp 
hduser@ubuntu:~$ ls -l /app/hadoop/ 
total 4 
drwxr-xr-x 2 hduser hadoop 4096 Dec 24 02:02 tmp 
hduser@ubuntu:~$ sudo chmod 750 /app/hadoop/tmp 
hduser@ubuntu:~$ ls -l /app/hadoop/ 
total 4 
drwxr-x--- 2 hduser hadoop 4096 Dec 24 02:02 tmp 
hduser@ubuntu:~$
把下列的文字,加到 /usr/local/hadoop/conf/core-site.xml 的  ...  中間:


  hadoop.tmp.dir
  /app/hadoop/tmp
  A base for other temporary directories.



  fs.default.name
  hdfs://localhost:54310
  The name of the default file system.  A URI whose
  scheme and authority determine the FileSystem implementation.  The
  uri's scheme determines the config property (fs.SCHEME.impl) naming
  the FileSystem implementation class.  The uri's authority is used to
  determine the host, port, etc. for a filesystem.
把下列的文字,加到 /usr/local/hadoop/conf/mapred-site.xml 的  ...  中間:


  mapred.job.tracker
  localhost:54311
  The host and port that the MapReduce job tracker runs
  at.  If "local", then jobs are run in-process as a single map
  and reduce task.
  
把下列的文字,加到 /usr/local/hadoop/conf/hdfs-site.xml 的  ...  中間:


  dfs.replication
  1
  Default block replication.
  The actual number of replications can be specified when the file is created.
  The default is used if replication is not specified in create time.
  

如果要對設定檔多了解,可以到以下連結查看:

格式化 HDFS 的檔案系統

Noll 先生在這非常強調,不要對正在使用中的系統做格式化的動作。該系統資料會消失。
我們這個新系統要啟用,則必須先格式化檔案系統。
hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop namenode -format
結果如下:
hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop namenode -format 
12/12/24 02:14:23 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG:   host = ubuntu/127.0.1.1 
STARTUP_MSG:   args = [-format] 
STARTUP_MSG:   version = 1.0.4 
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1393290; compiled by 'hortonfo' on Wed Oct  3 05:13:58 UTC 2012 
************************************************************/ 
12/12/24 02:14:23 INFO util.GSet: VM type       = 32-bit 
12/12/24 02:14:23 INFO util.GSet: 2% max memory = 19.33375 MB 
12/12/24 02:14:23 INFO util.GSet: capacity      = 2^22 = 4194304 entries 
12/12/24 02:14:23 INFO util.GSet: recommended=4194304, actual=4194304 
12/12/24 02:14:24 INFO namenode.FSNamesystem: fsOwner=hduser 
12/12/24 02:14:24 INFO namenode.FSNamesystem: supergroup=supergroup 
12/12/24 02:14:24 INFO namenode.FSNamesystem: isPermissionEnabled=true 
12/12/24 02:14:24 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100 
12/12/24 02:14:24 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s) 
12/12/24 02:14:24 INFO namenode.NameNode: Caching file names occuring more than 10 times 
12/12/24 02:14:25 INFO common.Storage: Image file of size 112 saved in 0 seconds. 
12/12/24 02:14:25 INFO common.Storage: Storage directory /app/hadoop/tmp/dfs/name has been successfully formatted. 
12/12/24 02:14:25 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at ubuntu/127.0.1.1 
************************************************************/ 
hduser@ubuntu:~$

啟動 cluster

到了要啟動系統的時候,使用指令:
hduser@ubuntu:~$ /usr/local/hadoop/bin/start-all.sh
看到以下的 log 就代表成功了。
hduser@ubuntu:~$ /usr/local/hadoop/bin/start-all.sh 
starting namenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-namenode-ubuntu.out 
localhost: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-datanode-ubuntu.out 
localhost: starting secondarynamenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-secondarynamenode-ubuntu.out 
starting jobtracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-jobtracker-ubuntu.out 
localhost: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-tasktracker-ubuntu.out 
hduser@ubuntu:~$

利用 jps 來看是否已啟動

Noll 先生說可以使用 jps 來看啟動是否成功。但新裝的 ubuntu 沒有這東西。
The program 'jps' can be found in the following packages: 
* openjdk-6-jdk 
* openjdk-7-jdk 
Ask your administrator to install one of them
於是,安裝 openjdk-7-jdk
sudo apt-get install openjdk-7-jdk
再試一次
hduser@ubuntu:~$ jps 
7516 TaskTracker 
7287 SecondaryNameNode 
7839 DataNode 
12038 Jps 
6491 NameNode 
6901 JobTracker 
hduser@ubuntu:~$

也可以用 netstat 來看監聽的 port 是否有開。
hduser@ubuntu:~$ sudo netstat -plten | grep java

停止 single-node cluster

使用這個指令:
hduser@ubuntu:~$ /usr/local/hadoop/bin/stop-all.sh
會看到:
hduser@ubuntu:~$ /usr/local/hadoop/bin/stop-all.sh 
stopping jobtracker 
localhost: Agent admitted failure to sign using the key. 
localhost: stopping tasktracker 
stopping namenode 
localhost: Agent admitted failure to sign using the key. 
localhost: stopping datanode 
localhost: Agent admitted failure to sign using the key. 
localhost: no secondarynamenode to stop 
hduser@ubuntu:~$
原篇照我的方式走,真的太長。因此下一篇來驗證,這個系統真的可以用。


資料來源 

Hadoop 第一次安裝就上手 CDH3 | Michael Hsu.tw

Hadoop 第一次安裝就上手 CDH3 | Michael Hsu.tw

浮雲雅築: [研究] Hadoop 2.2.0 Single Cluster 安裝 (二)(CentOS 6.4...

浮雲雅築: [研究] Hadoop 2.2.0 Single Cluster 安裝 (二)(CentOS 6.4...: [研究] Hadoop 2.2.0 Single Cluster 安裝 (二)(CentOS 6.4 x64) 請先完成下面的安裝 [研究] Hadoop 2.2.0 Single Cluster 安裝 (一)(CentOS 6.4 x64) http://shauro...

浮雲雅築: [研究] Hadoop 2.2.0 Single Cluster 安裝 (一)(CentOS 6.4...

浮雲雅築: [研究] Hadoop 2.2.0 Single Cluster 安裝 (一)(CentOS 6.4...: [研究] Hadoop 2.2.0 Single Cluster 安裝 (一)(CentOS 6.4 x64) 2013-11-08 這是學習兼分享,可能不夠完善,或100%完全正確。 Hadoop 是個架設雲端的系統,提供分散式平行運算,它參考Google File...