Changes between Initial Version and Version 1 of III110813/Lab9


Ignore:
Timestamp:
Oct 21, 2011, 3:04:46 PM (13 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • III110813/Lab9

    v1 v1  
     1◢ <[wiki:III110813/Lab8 實作八]> | <[wiki:III110813 回課程大綱]> ▲ | <[wiki:III110813/Lab10 實作十]> ◣
     2
     3= 實作九 Lab 9 =
     4[[PageOutline]]
     5{{{
     6#!html
     7<div style="text-align: center;"><big style="font-weight: bold;"><big>Hadoop Streaming 搭配不同程式語言練習<br/>Hadoop Streaming in different Language</big></big></div>
     8}}}
     9
     10{{{
     11#!text
     12以下練習,請連線至 hadoop.nchc.org.tw 操作。底下的 hXXXX 等於您的用戶名稱。
     13}}}
     14
     15== Existing Binary ==
     16
     17{{{
     18~$ hadoop fs -put /etc/hadoop/conf lab7_input
     19~$ hadoop jar hadoop-streaming.jar -input lab7_input -output lab7_out1 -mapper /bin/cat -reducer /usr/bin/wc
     20~$ hadoop fs -cat lab7_out1/part-00000
     21}}}
     22
     23== Bash Shell Script ==
     24
     25{{{
     26~$ echo "sed -e \"s/ /\n/g\" | grep ." > streamingMapper.sh
     27~$ echo "uniq -c | awk '{print \$2 \"\t\" \$1}'" > streamingReducer.sh
     28~$ chmod a+x streamingMapper.sh
     29~$ chmod a+x streamingReducer.sh
     30~$ hadoop jar hadoop-streaming.jar -input lab7_input -output lab7_out2 -mapper streamingMapper.sh -reducer streamingReducer.sh -file streamingMapper.sh -file streamingReducer.sh
     31~$ hadoop fs -cat lab7_out2/part-00000
     32}}}
     33
     34== PHP Script ==
     35
     36 * 編輯 mapper 的 php 程式
     37{{{
     38~$ cat > mapper.php << EOF
     39#!/usr/bin/php
     40<?php
     41
     42\$word2count = array();
     43
     44// 標準輸入為 STDIN (standard input)
     45while ((\$line = fgets(STDIN)) !== false) {
     46   // 移除小寫與空白
     47   \$line = strtolower(trim(\$line));
     48   // 將行拆解成各個字於 words 陣列中
     49   \$words = preg_split('/\W/', \$line, 0, PREG_SPLIT_NO_EMPTY);
     50   // 將字 +1
     51   foreach (\$words as \$word) {
     52       \$word2count[\$word] += 1;
     53   }
     54}
     55
     56// 將結果寫到 STDOUT (standard output)
     57foreach (\$word2count as \$word => \$count) {
     58   // 印出 [字 , "tab符號" ,  "數字" , "結束字元"]
     59   echo \$word, chr(9), \$count, PHP_EOL;
     60}
     61?>
     62EOF
     63}}}
     64 * 編輯 reduce 的 php 程式
     65{{{
     66~$ cat > reducer.php << EOF
     67#!/usr/bin/php
     68<?php
     69
     70\$word2count = array();
     71
     72// 輸入為 STDIN
     73while ((\$line = fgets(STDIN)) !== false) {
     74    // 移除多餘的空白
     75    \$line = trim(\$line);
     76    // 每一行的格式為 (單字 "tab" 數字) ,紀錄到(\$word, \$count)
     77    list(\$word, \$count) = explode(chr(9), \$line);
     78    // 轉換格式string -> int
     79    \$count = intval(\$count);
     80    // 加總
     81    if (\$count > 0) \$word2count[\$word] += \$count;
     82}
     83
     84// 此行不必要,但可讓output排列更完整
     85ksort(\$word2count);
     86
     87// 將結果寫到 STDOUT (standard output)
     88foreach (\$word2count as \$word => \$count) {
     89    echo \$word, chr(9), \$count, PHP_EOL;
     90}
     91?>
     92EOF
     93}}}
     94 * 修改執行權限
     95{{{
     96~$ chmod a+x *.php
     97}}}
     98 * 測試是否能運作
     99{{{
     100~$ echo "i love hadoop, hadoop love u" | ./mapper.php | ./reducer.php
     101}}}
     102 * 開始執行
     103{{{
     104~$ hadoop jar hadoop-streaming.jar -mapper mapper.php -reducer reducer.php -input lab7_input -output lab7_out3 -file mapper.php -file reducer.php
     105}}}
     106 * 檢查結果
     107{{{
     108~$ hadoop fs -cat lab7_out3/part-00000
     109}}}