星期日, 7月 25, 2010

Hadoop Lab with openSUSE11.2

這份文件提供 OSSF 工作坊 或是對 Hadoop 有興趣的朋友練習

環境設定小記
作業系統: openSUSE 11.2

分割區規劃
  • swap 1GB
  • /         73.5GB


使用者管理
  • 管理者 root  密碼 linux
  • 使用者 max 密碼 linux


軟體
  • 勾選 基礎開發套件
  • 利用 shell script 更改套件庫到 http://ftp.twaren.net 加快下載速度
  • 更新 opensuse 套件
  • 將 DVD 複製到 /srv/ftp/install/opensuse11-2
  • 安裝 java-1_6_0-sun-devel 套件( 因為openjdk 會有問題  ^^||)(在 update 套件庫內可以安裝)

服務
  • 啟動 sshd 並預設啟動
    • #rcsshd  start
    • #chkconfig  sshd  on

大量複製
  • 修正  /etc/fstab/boot/grub/menu.lst 內的硬碟位置  使用/dev/sda1 非使用 /dev/disk/by-id 的方式以免開機找不到硬碟
  • 藉由刪除 /etc/udev/rules.d/70-persistent-net.rules 讓網卡可以生效(因為新的網卡會變成eth1, 而並非原來的 eth0 )

上課軟體準備
  • 建立資料夾 OSSF 於 /opt
  • 下載 hadoop-0.20.2.tar.gz 存放於 /opt/OSSF
  • http://ftp.twaren.net/Unix/Web/apache/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz



---------------------------------------- 練習步驟 ------------------------------------------

請以  使用者 max 登入系統, 密碼為 linux
請注意 shell 提示符號為  >

Step 1. 建立ssh 金鑰, 以便之後連線ssh 可以不輸入密碼
#利用非互動方式產生 Server1 的 DSA key pair

>ssh-keygen  -N ''  -d  -q  -f  ~/.ssh/id_dsa

將公鑰複製一份為 authorized_keys
>cp  ~/.ssh/id_dsa.pub   ~/.ssh/authorized_keys

>ssh-add   ~/.ssh/id_dsa
Identity added: /root/.ssh/id_dsa (/root/.ssh/id_dsa)


測試是否可以使用金鑰, 透過 SSH 登入系統
>ssh  localhost
The authenticity of host 'localhost (: :1)' can't be established.
RSA key fingerprint is 05:22:61:78:05:04:7e:d1:81:67:f2:d5:8a:42:bb:9f.
Are you sure you want to continue connecting (yes/no)? 請輸入 yes

登出 SSH
>exit

Step 2. 安裝 Hadoop 套件
解壓縮 Hadoop 套件(預先下載於 /opt/OSSF) --使用sudo的方式
(因為 /opt 目錄 一般使用者沒有寫入權限)

>sudo  tar  zxvf   /opt/OSSF/hadoop-0.20.2.tar.gz   -C   /opt

會要求輸入 root 管理者密碼, 請輸入 linux

更改 /opt/hadoop-0.20.2 擁有者為 max 群組為 users
> sudo  chown   -R  max:users   /opt/hadoop-0.20.2/

建立 /var/hadoop 目錄
> sudo  mkdir   /var/hadoop

更改 /var/hadoop  擁有者為 max 群組為 users
> sudo  chown  -R  max:users   /var/hadoop/


Step 3.  設定 Hadoop 設定檔


3-1. 設定環境變數 hadoop-env.sh
>vi   /opt/hadoop-0.20.2/conf/hadoop-env.sh
#請加入以下設定
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-sun
export HADOOP_HOME=/opt/hadoop-0.20.2
export HADOOP_CONF_DIR=/opt/hadoop-0.20.2/conf

3-2.  請於 core-site.xml 內的 configuration 區段內加入紫色部份的設定
>vi   /opt/hadoop-0.20.2/conf/core-site.xml

<configuration>

<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/hadoop-\${user.name}</value>
</property>

</configuration>

3-3. 請於 hdfs-site.xml 內的 configuration 區段內加入紫色部份的設定(設定副本的數量)
>vi   /opt/hadoop-0.20.2/conf/hdfs-site.xml

<configuration>

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

</configuration>

3-4. 請於 mapred-site.xml 內的 configuration 區段內加入紫色部份的設定
(此為 JobTracker 的設定檔)

>vi   /opt/hadoop-0.20.2/conf/mapred-site.xml

<configuration>

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

</configuration>

Step 4. 格式化 HDFS
>/opt/hadoop-0.20.2/bin/hadoop   namenode   -format
10/07/20 00:51:13 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = server/127.0.0.2
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.20.2
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20 -r 911707; compiled by 'chrisdo' on Fri Feb 19 08:07:34 UTC 2010
************************************************************/
10/07/20 00:51:13 INFO namenode.FSNamesystem: fsOwner=max,users,video
10/07/20 00:51:13 INFO namenode.FSNamesystem: supergroup=supergroup
10/07/20 00:51:13 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/07/20 00:51:14 INFO common.Storage: Image file of size 93 saved in 0 seconds.
10/07/20 00:51:14 INFO common.Storage: Storage directory /var/hadoop/hadoop-\max/dfs/name has been successfully formatted.
10/07/20 00:51:14 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at server/127.0.0.2
************************************************************/

Step 5. 啟動 hadoop
>/opt/hadoop-0.20.2/bin/start-all.sh
starting namenode, logging to /opt/hadoop-0.20.2/logs/hadoop-max-namenode-server.out
localhost: starting datanode, logging to /opt/hadoop-0.20.2/logs/hadoop-max-datanode-server.out
localhost: starting secondarynamenode, logging to /opt/hadoop-0.20.2/logs/hadoop-max-secondarynamenode-server.out
starting jobtracker, logging to /opt/hadoop-0.20.2/logs/hadoop-max-jobtracker-server.out
localhost: starting tasktracker, logging to /opt/hadoop-0.20.2/logs/hadoop-max-tasktracker-server.out

Step 6. 檢查運作狀態
Hadoop 管理介面
http://localhost:50030

Hadoop Task Tracker
http://localhost:50060

Hadoop DFS
http://localhost:50070



Lab2 HDFS 常用指令練習

1.
觀察指令相關說明
>/opt/hadoop-0.20.2/bin/hadoop   fs

使用 hadoop 指令列出HDFS 下面的檔案
, 因為還沒有上傳資料到HDFS 上面, 所以會出現錯誤訊息
>/opt/hadoop-0.20.2/bin/hadoop   fs   -ls


2. 上傳 /opt/hadoop-0.20.2/conf 目錄到 HDFS 命名為 input
#hadoop 指令                                        上傳               本機目錄                       HDFS目錄名稱
>/opt/hadoop-0.20.2/bin/hadoop   fs   -put   /opt/hadoop-0.20.2/conf   input


3. 再次檢查 HDFS 上面的檔案
3-1 check the HDFS
> /opt/hadoop-0.20.2/bin/hadoop  fs   -ls
Found 1 items
drwxr-xr-x   - max supergroup       0 2010-07-18 21:16 /user/max/input

如果沒有指定路徑, 預設是  /user/使用者名稱
也可以使用 完整路徑, 例如
> /opt/hadoop-0.20.2/bin/hadoop   fs   -ls   /user/max/

Tips: 也可以上傳前及上傳後觀察 /var/hadoop 下的目錄
(雖然不能看到架構, 但是可以看到資料進到本機)
>ls  -lh  /var/hadoop/hadoop-\\max/dfs/data/current/

3-2 進一步觀察 input 目錄
>/opt/hadoop-0.20.2/bin/hadoop   fs    -ls   input
Found 13 items
-rw-r--r--   1 max supergroup    3936 2010-07-21 16:00 /user/max/input/capacity-scheduler.xml
-rw-r--r--   1 max supergroup     535 2010-07-21 16:00 /user/max/input/configuration.xsl
-rw-r--r--   1 max supergroup     379 2010-07-21 16:00 /user/max/input/core-site.xml
-rw-r--r--   1 max supergroup    2367 2010-07-21 16:00 /user/max/input/hadoop-env.sh
-rw-r--r--   1 max supergroup    1245 2010-07-21 16:00 /user/max/input/hadoop-metrics.properties
-rw-r--r--   1 max supergroup    4190 2010-07-21 16:00 /user/max/input/hadoop-policy.xml
-rw-r--r--   1 max supergroup     254 2010-07-21 16:00 /user/max/input/hdfs-site.xml
-rw-r--r--   1 max supergroup    2815 2010-07-21 16:00 /user/max/input/log4j.properties
-rw-r--r--   1 max supergroup     270 2010-07-21 16:00 /user/max/input/mapred-site.xml
-rw-r--r--   1 max supergroup      10 2010-07-21 16:00 /user/max/input/masters
-rw-r--r--   1 max supergroup      10 2010-07-21 16:00 /user/max/input/slaves
-rw-r--r--   1 max supergroup    1243 2010-07-21 16:00 /user/max/input/ssl-client.xml.example
-rw-r--r--   1 max supergroup    1195 2010-07-21 16:00 /user/max/input/ssl-server.xml.example

4. 從  HDFS  上面下載檔案
首先觀察目前的目錄
>ls

使用 hadoop  fs  -get 下載
>/opt/hadoop-0.20.2/bin/hadoop   fs   -get   input    fromHDFS

再次觀察目前的目錄
>ls


5. 觀看 HDFS 內的檔案內容 使用 -cat
>/opt/hadoop-0.20.2/bin/hadoop   fs   -cat   input/slaves
localhost

6. 刪除 HDFS 檔案 使用 -rm  (如果是目錄要使用 -rmr )
首先觀察 input 目錄內的檔案
>> /opt/hadoop-0.20.2/bin/hadoop   fs   -ls   /user/max/input
Found 13 items
-rw-r--r--   1 max supergroup    3936 2010-07-21 16:00 /user/max/input/capacity-scheduler.xml
-rw-r--r--   1 max supergroup     535 2010-07-21 16:00 /user/max/input/configuration.xsl
-rw-r--r--   1 max supergroup     379 2010-07-21 16:00 /user/max/input/core-site.xml
-rw-r--r--   1 max supergroup    2367 2010-07-21 16:00 /user/max/input/hadoop-env.sh
-rw-r--r--   1 max supergroup    1245 2010-07-21 16:00 /user/max/input/hadoop-metrics.properties
-rw-r--r--   1 max supergroup    4190 2010-07-21 16:00 /user/max/input/hadoop-policy.xml
-rw-r--r--   1 max supergroup     254 2010-07-21 16:00 /user/max/input/hdfs-site.xml
-rw-r--r--   1 max supergroup    2815 2010-07-21 16:00 /user/max/input/log4j.properties
-rw-r--r--   1 max supergroup     270 2010-07-21 16:00 /user/max/input/mapred-site.xml
-rw-r--r--   1 max supergroup      10 2010-07-21 16:00 /user/max/input/masters
-rw-r--r--   1 max supergroup      10 2010-07-21 16:00 /user/max/input/slaves
-rw-r--r--   1 max supergroup    1243 2010-07-21 16:00 /user/max/input/ssl-client.xml.example
-rw-r--r--   1 max supergroup    1195 2010-07-21 16:00 /user/max/input/ssl-server.xml.example

使用 hadoop 指令 -rm 的方式刪除檔案
>/opt/hadoop-0.20.2/bin/hadoop   fs   -rm   input/slaves
Deleted hdfs://localhost:9000/user/max/input/slaves

再次觀察 input 目錄內的檔案
>> /opt/hadoop-0.20.2/bin/hadoop   fs   -ls   /user/max/input
Found 12 items
-rw-r--r--   1 max supergroup    3936 2010-07-22 15:08 /user/max/input/capacity-scheduler.xml
-rw-r--r--   1 max supergroup     535 2010-07-22 15:08 /user/max/input/configuration.xsl
-rw-r--r--   1 max supergroup     379 2010-07-22 15:08 /user/max/input/core-site.xml
-rw-r--r--   1 max supergroup    2367 2010-07-22 15:08 /user/max/input/hadoop-env.sh
-rw-r--r--   1 max supergroup    1245 2010-07-22 15:08 /user/max/input/hadoop-metrics.properties
-rw-r--r--   1 max supergroup    4190 2010-07-22 15:08 /user/max/input/hadoop-policy.xml
-rw-r--r--   1 max supergroup     254 2010-07-22 15:08 /user/max/input/hdfs-site.xml
-rw-r--r--   1 max supergroup    2815 2010-07-22 15:08 /user/max/input/log4j.properties
-rw-r--r--   1 max supergroup     270 2010-07-22 15:08 /user/max/input/mapred-site.xml
-rw-r--r--   1 max supergroup      10 2010-07-22 15:08 /user/max/input/masters
-rw-r--r--   1 max supergroup    1243 2010-07-22 15:08 /user/max/input/ssl-client.xml.example
-rw-r--r--   1 max supergroup    1195 2010-07-22 15:08 /user/max/input/ssl-server.xml.example

使用 hadoop 指令 -rmr 的方式刪除目錄
>/opt/hadoop-0.20.2/bin/hadoop   fs   -rm   input
Deleted hdfs://localhost:9000/user/max/input



Lab 3 Hadoop 範例練習

1.grep 指令練習

1-1上傳 /opt/hadoop-0.20.2/conf 目錄到 HDFS 命名為 source
#hadoop 指令                                        上傳               本機目錄                       HDFS目錄名稱
>/opt/hadoop-0.20.2/bin/hadoop   fs   -put   /opt/hadoop-0.20.2/conf           source

1-2 確認 source 目錄上傳成功

> /opt/hadoop-0.20.2/bin/hadoop   fs   -ls   /user/max/
Found 1 items
drwxr-xr-x   - max supergroup       0 2010-07-23 15:13 /user/max/source


1-3 使用 grep 找出 source 目錄內文件 以 dfs 為開頭的文字, 儲存到 output-1

>/opt/hadoop-0.20.2/bin/hadoop   jar   /opt/hadoop-0.20.2/hadoop-0.20.2-examples.jar grep   source   output-1    'dfs[a-z.]+'

1-4  檢查結果
>/opt/hadoop-0.20.2/bin/hadoop   fs   -ls    output-1
Found 2 items
drwxr-xr-x   - max supergroup       0 2010-07-20 00:33 /user/max/output/_logs
-rw-r--r--   1 max supergroup      96 2010-07-20 00:33 /user/max/output/part-00000

>/opt/hadoop-0.20.2/bin/hadoop  fs   -cat    output-1/part-00000
3    dfs.class
2    dfs.period
1    dfs.file
1    dfs.replication
1    dfs.servers
1    dfsadmin
1    dfsmetrics.log

2. wordcount 練習

2-1 計算 source 目錄內所有文件內的字 並儲存到 output-2
>/opt/hadoop-0.20.2/bin/hadoop   jar /opt/hadoop-0.20.2/hadoop-0.20.2-examples.jar wordcount   source   output-2

2-2 檢查結果
>/opt/hadoop-0.20.2/bin/hadoop   fs   -ls    output-2
Found 2 items
drwxr-xr-x   - max supergroup       0 2010-07-20 02:00 /user/max/output-2/_logs
-rw-r--r--   1 max supergroup   10886 2010-07-20 02:01 /user/max/output-2/part-r-00000

>/opt/hadoop-0.20.2/bin/hadoop   fs  -cat   output-2/part-r-00000
顯示計算結果

3. 解 sudoku 練習 ^__^

3-1 請下載 sudoku 檔案到 /home/max/

3-2 run the sudoku solver
> /opt/hadoop-0.20.2/bin/hadoop  jar  /opt/hadoop-0.20.2/hadoop-0.20.2-examples.jar sudoku    /home/max/sudoku-n.txt



Lab 4  Hadoop Cluster 架設實做

以下操作請在 Server 2 上面操作
請以  使用者 max 密碼 linux 登入系統
1, 準備相關目錄

>sudo  mkdir   /opt/hadoop-0.20.2
會提示輸入 root 密碼, 請輸入 linux

>sudo  mkdir   /var/hadoop
>sudo  chown   -R  max:users   /opt/hadoop-0.20.2/
>sudo  chown   -R  max:users   /var/hadoop

設定名稱解析
>sudo   vi   /etc/hosts
請註解 server2 的 127.0.0.2 名稱解析
#127.0.0.2    server2.digitalairlines.com    server2
請新增 server1 及 server2 的IP
10.10.x.y    server.digitalairlines.com    server
10.10.v.w    server2.digitalairlines.com    server2


-----------------------------------------------------------------------------------------------------------------------

請在 Server 1 上面( 第一台主機 )

1-1 stop hadoop
>/opt/hadoop-0.20.2/bin/stop-all.sh

1-2 刪除  hadoop 相關資料
>rm  -rf   /var/hadoop/*

1-3 修改相關設定 Namenode 設定
>vi   /opt/hadoop-0.20.2/conf/core-site.xml
請修改
                            <value>hdfs://localhost:9000</value>
請改為 server1 的 IP
                            <value>hdfs://Srv1’s ip:9000</value>

***可以使用 “>ip address show” “/sbin/ifconfig” 觀察 IP address***

1-4  修改 HDFS 副本數量
>vi   /opt/hadoop-0.20.2/conf/hdfs-site.xml
請修改
            <value>1</value>
請改為
            <value>2</value>

1-5
>vi  /opt/hadoop-0.20.2/conf/mapred-site.xml
請修改
<value>localhost:9001</value>
請改為
<value>Srv1’s ip:9001</value>

1-6  設定 slaves 檔案(列於 slaves 的主機就會擔任 datanode 及 tasktracker  角色)
>vi  /opt/hadoop-0.20.2/conf/slaves
請刪除 localhost
請加入 Srv1’s ip
請加入 Srv2’s ip

***在此次的工作坊  ip addree 應該會是 10.10.x.y ***

1-7 設定名稱解析
>sudo   vi   /etc/hosts
請註解 server1 的 127.0.0.2 名稱解析
#127.0.0.2    server.digitalairlines.com    server
請新增 server1 及 server2 的IP
10.10.x.y    server.digitalairlines.com    server
10.10.v.w    server2.digitalairlines.com    server2

1-8 修改 ssh 相關設定檔
>sudo   vi   /etc/ssh/ssh_config
請修改
# StrictHostKeyChecking ask
請取消註解並改為 no
StrictHostKeyChecking  no

1-9 將 SSH 金鑰複製到 其他的Node

>scp   -r   ~/.ssh   Srv2-IP:~/
Warning: Permanently added '10.10.v.w' (RSA) to the list of known hosts.
Password: 請輸入 max 密碼

測試 SSH 登入免密碼
測試連線 server1
>ssh    Srv1’s IP
>exit
測試連線 server2
>ssh    Srv2’s IP
>exit

1-10 複製 hadoop 到 Server 2
>scp   -r   /opt/hadoop-0.20.2/*    Srv2-IP:/opt/hadoop-0.20.2/

1-11 格式化 HDFS
>/opt/hadoop-0.20.2/bin/hadoop   namenode   -format
請注意 IP 是否為 10.10.x.y

1-12 啟動 DFS (會根據 /opt/hadoop-0.20.2/conf/slaves 內去啟動 datanode  )
>/opt/hadoop-0.20.2/bin/start-dfs.sh
請確認是否啟動 2個 datanode
starting namenode, logging to /opt/hadoop-0.20.2/logs/hadoop-max-namenode-linux-7tce.out
10.10.x.y: starting datanode, logging to /opt/hadoop-0.20.2/logs/hadoop-max-datanode-linux-7tce.out
10.10.v.w: starting datanode, logging to /opt/hadoop-0.20.2/logs/hadoop-max-datanode-server2.out
localhost: starting secondarynamenode, logging to /opt/hadoop-0.20.2/logs/hadoop-max-secondarynamenode-linux-7tce.out

請檢查  “ http://Srv1’s IP:50070/ ”
請確認 “Live Nodes” 應該是 2 個

1-13 啟動 JobTracker 
>/opt/hadoop-0.20.2/bin/start-mapred.sh

請檢查  “ http://Srv1’s IP:50030/ ”
請確認 “Nodes” 應該是 2 個

Now, just run programs like Lab3 to examine

沒有留言: