Pages

Subscribe:

Ads 468x60px

Labels

顯示具有 Hadoop 標籤的文章。 顯示所有文章
顯示具有 Hadoop 標籤的文章。 顯示所有文章

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...

浮雲雅築: [研究] Hadoop 1.2.1 安裝 (CentOS 6.4 x64)

浮雲雅築: [研究] Hadoop 1.2.1 安裝 (CentOS 6.4 x64): [研究] Hadoop 1.2.1 安裝 (CentOS 6.4 x64) 2013-07-27 Hadoop 是個架設雲端的系統,它參考Google Filesystem,以Java開發,提供HDFS與MapReduce API。 The Apache Hadoop...

3秒處理1PB資料!Google Dremel打敗Hadoop引領「巨量資料處理」趨勢

By CADE METZ   | 11 七月 2013
Photo: Chapendra/ Flickr

如果全球巨量資料(Big Data)相關處理技術的研發是一場競賽,Google精益求精,持續保持領先。一如業內人士所熟知,臉書(Facebook)與雅虎(Yahoo)皆用以分析大量網路資料的「Hadoop」架構軟體平台,必需歸功Google先後在2003年末、2004年發表的「Google File System」、「MapReduce」兩份技術研究報告。
Dremel首度現身
8年後,當眾人仍熱衷使用Hadoop於各式資料分析工作,Google又以新技術自我超越,取代不夠完美的「Google File System」與「MapReduce」,並於2009年針對大型網路營運基礎架構發表三份研究報告,分別有關Google網路搜尋引擎的索引製作軟體平台「Caffeine」、可繪製大量網路資訊彼此對應關係的圖表資料庫「Pregel」,以及備受矚目的「Dremel」。
矽谷新創公司Cloudera執行長歐森(Mike Olson),便在不久前的一場座談會中指出,Google再度揭示巨量資料處理的未來走向,「想知道大型、高效能資料處理基礎架構的新面貌,不妨閱讀Google發表的研究報告。」
專精資料中心規模軟體平台的加州大學柏克萊分校資訊工程教授福克斯(Armando Fox),也十分驚豔於Dremel的優越,「以前若有人向我描述Dremel的功能,我絕對會認為那只能存在於想像。」
兼顧資料處理「量」與「速度」,功能空前 
Dremel是一種資訊分析的方式,可以橫跨數千部伺服器,查詢大量資料,例如查詢網路文件、一批電子書的個別作者、某個特定主題的作者列表,甚至是記錄無數垃圾訊息的資料,類似數十年來運用於分析傳統資料庫的「結構式查詢語言」(SQL)技術。
Hadoop也有類似SQL的工具「Pig and Hive」,但耗時較長;向平台提出查詢需求後,需要幾分鐘至幾小時,才會得到結果。
同類的工具已經不少,Google必然同中求異,否則就不必大費周章研發Dremel了;以極短時間處理極龐大的資料量,即是Dremel最空前的突破。
Google在報告中明確指出,「過去MapReduce需要分多次查詢的資料,Dremel可同時處理,並大幅縮短運算時間」,Google基礎架構資深副總裁霍澤說,查詢一拍位元組(Petabyte,PB)、也就是相當十億位元組(Gigabyte,GB)百萬倍的資料量,大概只需要3秒鐘,Dremel完全是為立即查詢設計,「Dremel操作容易,適合處理臨時或定期查詢,直接在指令列輸入查詢項目就行了,不需要任何程式設計技巧。」
福克斯說,這是前所未有見的功能,他說,包括Hadoop在內的現行巨量資料處理工具,都有速度與準確度不及傳統資料分析或「商業智慧」工具的缺點,但Dremel卻成功克服障礙。
「許多人都曾使用巨量資料系統,但規模、速度都無法與Dremel相提並論;一直以來,『資料量』與『速度』總是顧此失彼,Dremel終於找到兼顧兩者的方法。」
承接Google成果,軟體人員還要加把勁
自2006年起,Google的數千名員工已經開始使用Dremel來分析橫跨數十部至數千部不等的伺服器巨量資料,包括服務軟體的故障報告、資料中心的表現等。
面對巨量資料的大趨勢,Cloudera執行長歐森認為,程式人員還需要加快後續開發的速度。
儘管Hadoop已經是相當成功的軟體,它讓打造平台科技基礎的Google稱霸網路世界,也帶來龐大商機,預估至2016年將可創造8.13億美元的軟體收益,以Hadoop運用為主要業務的公司如Cloudea,直接蒙受其利。
不過,歐森還是認為,自家公司與業界程式設計人員的開發速度實在太慢,現在面對新的Dremel,又出現類似現象。
2010年,Google發表Dremel研究報告,但軟體業界幾乎毫無反應。一群以色列工程師目前正著手建置叫做「OpenDremel」的複製品,其中一位開發人員古茲曼(David Gruzman)就說,程式編寫的時程先前停滯了一陣子,最近才又重新開始。
華盛頓大學粒子物理學特聘教授、Cloudant公司首席科學家米勒(Mike Miller),對於創投竟然尚未投資新創公司著手研究Dremel逆向工程,也大感意外。Cloudant已自發投入處理Google多年來面臨的資料問題。
無論業界反應如何,Google的開放態度倒是很一致,提供的Dremel相關雲端服務不勝枚舉。即使非Google工程師,也能透過「Google應用程式引擎」使用Google的基礎架構,來製作、經營、儲存整套應用程式;或透過Dremel,使用應用程式「BigQuery」,將資料上傳至Google,即時存取虛擬伺服器,進行查詢。
世界或許落後Google,但Google正迎向世界。

【Hadoop in Taiwan 2012】Hadoop在精準行銷上的應用 by 陳志昇 (Vincent Chen)

中華電信用Hadoop技術分析通話明細

中華電信利用自行開發的Hadoop大資料運算平臺,找出非結構化資料中的結構性,精簡資料後再置於資料倉儲運算,節省儲存空間
面對資料快速成長以及非結構性資料的增加,中華電信資訊處第四科科長楊秀一表示,中華電信近來利用Hadoop雲端運算技術自行開發了一個專門用來分析非結構化資料的巨量資料(Big Data)運算平臺,嘗試在資料進到資料倉儲系統之前,先進行資料的分析與處理以減少資料倉儲的資料量。

近年來行動語音市場趨於飽和,為了掌握用戶特性進行客製化行銷,一份資料要進行分析,就會被多次複製,因此即使用戶增加趨緩,但中華電信擁有的資料量仍快速暴增。

中華電信用來分析的資料模型最早於10多年前已有雛形,但當初主要用於行動語音分析。一直到2009年,他們完整導入Teradata的電信業邏輯資料模型cLDM 9.0版,整合更多電信服務的用戶資料。楊秀一表示,當初導入該模型的目的主要是為了整合行動語音、固網、數據的資料,進行以人為中心的分析模式。在導入之前,中華電信的資料模型是以設備為中心,因為不同設備的記錄資料儲存在不同的資料庫,無法進行整合性的分析。

舉例來說,同一個顧客在中華電信申辦了行動電話、家用電話以及固網服務,過去沒有整合前,中華電信只能分析單一設備的使用行為,而無法全面性分析單一顧客在不同設備上的使用狀況。

中華電信解決了資料整合分析的問題後,出現了另一個難題,就是蒐集的資料數量越來越多。比如說近年使用者大量利用行動裝置上網,這些上網行為,如網頁瀏覽、登入都會產生一些可分析的資料。於是,中華電信面臨了大量資料需要分析的挑戰。

楊秀一表示,目前中華電信每個月保留的資料記錄約為3~4TB的資料量,若要分析這些原始資料,過程中系統要處理的資料量還要再增加2倍以上,但中華電信現有資料倉儲設備僅能保存6~9個月的通話明細資料量,其餘就必須移到2線設備儲存,也讓資料分散不易整體分析。

精簡資料就先從結構化非結構化資料開始

中華電信資訊處第四科科長楊秀一表示,先透過Hadoop技術的大資料運算平臺精簡非結構化資料,找出結構化的部份後,再放入資料庫進行分析,可減少資料庫的I/O負擔。

楊秀一認為,分析非結構化資料最大的挑戰是沒有便宜的儲存方法,資料倉儲的容量價格高,大量資料的處理成本昂貴,所以必須先將非結構化的資料轉化成真正有分析價值的結構化資料,減少必須儲存在資料倉儲中的資料,建立分析平臺就能夠擴充儲存能量。

所以,中華電信運用了開源雲端運算技術Hadoop技術來建置大資料運算平臺,主要分析的非結構性資料為通話明細與網頁點擊率分析。藉由這個平臺可以儲存資料,並且找到資料的關聯性後,再由資料庫進行分析。

楊秀一表示,通話明細或是網頁點擊率雖不一定是非結構化資料,但是這些資料的結構是變動的,只要能夠找出固定特徵,就能夠放進可對應的資料庫欄位進行分析。

舉例來說,同樣打一通5分鐘的電話,每一通經過的基地臺數量與路徑完全不同,導致每一筆資料的長度並不一樣。因此,在處理資料時,先訂出可讓資料長度相同的規則,就能將相同長度的資料放在同一個欄位,進行結構化的分析。

楊秀一表示,將資料在進入資料倉儲之前就先放進另一個平臺分析,而不是將所有資料放進資料庫後,再將資料取出分析,可以減少一次資料庫的I/O負擔。

中華電信建置的大資料運算平臺目前仍在測試階段,楊秀一表示,未來希望透過該平臺精簡資料量,讓線上保存的資料增至12~27個月的通話明細,達到擴充容量的目的。文⊙辜雅蕾

資料來源

NCHC Cloud Computing Research Group

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

【Hadoop in Taiwan 2012】快速搭建Hadoop單機開發環境與雲端叢集架設實務

2013年11月16日 星期六

雲端運算平台—Hadoop

作者:周秉誼 / 臺灣大學計算機及資訊網路中心作業管理組碩士後研究人員

雲端運算是資料中心因應網路上資訊暴增而提出的服務及管理思維,資訊服務提供者投入資源進行雲端運算的服務及架構開發,Google可說是最大量使用雲端運算的組織之一。Hadoop就是由Google雲端架構得到啟發而開始的開放原始碼計劃,目前有許多組織參與Hadoop的研究開發,並以Hadoop做為雲端運算的平台。
前言隨著網際網路 (Internet) 的發展,及web2.0概念被提出,網路使用者的行為也由單純的瀏覽轉變為創作與分享;另外,行動式的資訊設備也越來越多,為了方便分享及取用,使用者們把資料從個人的電腦中轉移到web服務提供者的資料中心 (Data Center);而服務提供者為了提供更穩定更迅速的服務,也需要一個新的服務架構,將運算資源及儲存空間更有效率的利用,同時提供服務開發人員更便利的開發環境。
雲端運算 (Cloud Computing) 就是將前述所有的需求整合在一起的概念,一個面向是讓使用者以更加便利的方式使用及取得服務,甚至用最簡單的方式開發新的服務。隨著各種雲端服務產生,對於運算能力及儲存空間的需求,也會驚人地成長,因此雲端運算的另一個面向就是整合組織內部運算資源,以最有效率、最易於管理的方式,提供雲端服務穩定的運算及儲存能量。
以Google為例,許多服務都以雲端運算的形式推出,讓使用者隨時可以取得自己的資料,也能夠透過網路跟其他人分享;還提供了相當便利的開發環境,如 Google App. Engine提供了介面和免費的運算及儲存資源,讓使用者開發各種有趣的web服務。但這些服務需要十分可觀的運算能力和使用者資料的儲存空間,因此,Google開發了許多雲端運算的技術與架構,如MapReduce以分散式運算提供整合的運算資源及減少運算時間、Google File System將大量而分散的儲存空間整合為一個可靠的儲存媒介、BigTable提供高效率的分散式資料庫。這些技術及架構都有一個特點,就是讓服務開發人員不用考慮在這些分散式系統上資料要怎麼放置、運算要怎麼切割,只需要專注在服務的開發就可以了,而資料與運算的切割及分散就交給雲端運算的架構來處理,可說是大大增加了開發服務的速度。
Hadoop計劃Hadoop是Apache軟體基金會 (Apache Software Foundation) 底下的開放原始碼計劃 (Open source project),最初是做為Nutch這個開放原始碼的搜尋引擎的一部份。Hadoop是以java寫成,可以提供大量資料的分散式運算環境,而且Hadoop的架構是由Google發表的BigTable及Google File System等文章提出的概念實做而成,所以跟Google內部使用的雲端運算架構相似。目前Yahoo!及Cloudera等公司都有開發人員投入Hadoop的開發團隊,也有將近一百個公司或組織公開表示使用Hadoop做為雲端運算平台,Google及IBM也使用Hadoop平台為教育合作環境。
Hadoop中包括許多子計劃,其中Hadoop MapReduce如同Google MapReduce,提供分散式運算環境、Hadoop Distributed File System如同Google File System,提供大量儲存空間、HBase是一個類似 BigTable 的分散式資料庫 (見表一),還有其他部份可用來將這三個主要部份連結在一起,方便提供整合的雲端服務。
MapReduceMapReduce是一個分散式程式框架,讓服務開發者可以很簡單的撰寫程式,利用大量的運算資源,加速處理龐大的資料量,一個MapReduce的運算工作可以分成兩個部份—Map和Reduce,大量的資料在運算開始的時候,會被系統轉換成一組組 (key, value) 的序對並自動切割成許多部份,分別傳給不同的Mapper來處理,Mapper處理完成後也要將運算結果整理成一組組 (key, value) 的序對,再傳給Reducer整合所有Mapper的結果,最後才能將整體的結果輸出 (見圖一)。

再更仔細地介紹流程中每一步的細節,一開始需要建立一個JobConf類別的物件,用來設定運算工作的內容,如 setMapperClass/setReducerClass設定 Mapper及Reducer 的類別,setInputFormat/setOutputFormat 設定輸出輸入資料的格式,  setOutputKeyClass / setOutputValueClass 設定輸出資料的類型,設定完成後,依設定內容提交運算工作。資料來源會依InputFormat的設定取得,並分割轉換為一組組的 (key, value) 序對,交由不同的Mapper同時進行運算,Mapper要將運算的結果輸出為一組組(key, value) 序對,也稱為中介資料 (intermediate),系統會將這些暫時的結果排序 (sort) 並暫存起來,等到所有Mapper的運算工作結束之後,依照不同的key值傳送給不同的Reducer彙整,所有同一key值的中介資料的value值,會放在一個容器 (container) 裡傳給同一個Reducer處理,所以在Reducer中可以利用values.next()依序取得不同value值,快速地完成結果整理,再依OutputFormat的設定輸出為檔案。
進行運算的Mapper和Reducer會由系統會自動指派不同的運算節點擔任,所以程式設計時完全不用做資料和運算的切割 (decomposition),運算資源會由JobTracker分配到各個運算節點上的TaskTracker,並指派不同的節點擔任Mapper和Reducer。

HDFSHadoop Distributed File System (HDFS) 將分散的儲存資源整合成一個具容錯能力、高效率且超大容量的儲存環境,在Hadoop系統中大量的資料和運算時產生的暫存檔案,都是存放在這個分散式的檔案系統上。
HDFS是master/slave架構,由兩種角色組成,Name node及data nodes,Name node負責檔案系統中各個檔案屬性權限等資訊 (metadata, namespace) 的管理及儲存;而data node通常由數以百計的節點擔任,一個資料檔會被切割成數個較小的區塊 (block) 儲存在不同的data node上,每一個區塊還會有數份副本 (replica) 存放在不同節點,這樣當其中一個節點損壞時,檔案系統中的資料還能保存無缺,因此name node還需要紀錄每一份檔案存放的位置,當有存取檔案的需求時,協調data node負責回應;而有節點損壞時,name node也會自動進行資料的搬遷和複製。
HDFS雖然沒有整合進Linux kernel,只能透過Hadoop的dfs shell進行檔案操作,或使用FUSE成為User space下的檔案系統,但Hadoop下的系統都與HDFS整合,做為資料儲存備份及分享的媒介。如前面提到的MapReduce在系統分配運算工作時,會將運算工作分配到存放有運算資料的節點上進行,減少大量資料透過網路傳輸的時間。

HBaseHBase是架構在HDFS上的分散式資料庫,與一般關聯式資料庫 (relational database) 不同。HBase使用列 (row) 和行 (column) 為索引存取資料值,因此查詢的時候比較像在使用map容器 (container);HBase的另一個特點是每一筆資料都有一個時間戳記 (timestamp),因此同一個欄位可依不同時間存在多筆資料。
一個HBase的資料表 (table) 是由許多row及數個column family組成,每個列都有一個row key做為索引;一個column family就是一個column label的集合 (set),裡面可有很多組label,這些label可以視需要隨時新增,而不用重新設定整個資料表 (見表二)。在存取資料表的時候,通常就使用 (‘row key’, ‘family:label’) 或 (‘row key’, ‘family:label’, ‘timestamp’) 的組合取出需要的欄位。

HBase為了方便分散資料和運算工作,又將整個資料表分為許多region,一個region是由一到數個列所組成的,可以分別存放在不同HBase主機上,這些存放region的主機就是region server,另外還有master server用來紀錄每一個region對應的region server;master server也會自動將不能提供服務的region server上的region重新分配到其他的region server上。
HBase也可供MapReduce的程式當作資料來源或儲存媒介,在HBase 0.20版之後提供了TableMapper及TableReducer的類別讓程式中的Mapper及Reducer類別繼承,可以把MapReuce中的 (key, value) 更方便地從HBase中取出和存入。
Web InterfaceMapReduce的JobTracker、HDFS、及HBase都有各自的web監控介面,可以及時觀察目前每個運算工作的運作情況、檔案系統的容量、及資料表和region的使用情況, 讓系統管理者輕鬆地監控大量資源 (見圖二、圖三、圖四)。


 


 
結論Hadoop是目前最常見且實際運用在大規模商業環境上的雲端運算平台之一,強大而完整的基礎架構可以減少大量的雲端架構開發的時間,大量部署時也相當迅速,不但有許多重量級的雲端運算服務提供者正在使用及投入開發,也與Google的雲端環境相似,使Hadoop成為教育訓練、學術研究及雲端服務開發的最佳平台。
雖然有Hadoop這麼便利的雲端運算環境,又有成功的雲端服務可以參考,然而在組織內部導入雲端運算的架構及文化時,仍需做好充分的規劃及時程表,不然將會影響原有服務的穩定及品質,不但不能享受雲端運算帶來的便利,反而徒然增加管理及營運成本,使雲端運算淪為失敗的行銷名詞。