| 1 | ◢ <[wiki:III140118/Lab4 實作四]> | <[wiki:III140118 回課程大綱]> ▲ | <[wiki:III140118/Lab6 實作六]> ◣ |
| 2 | |
| 3 | = 實作五 Lab5 = |
| 4 | |
| 5 | {{{ |
| 6 | #!html |
| 7 | <p style="text-align: center;"><big style="font-weight: bold;"><big>基本除錯技能(一) Bash 除錯<br/>Debug Skill (1) Bash debugging</big></big></p> |
| 8 | }}} |
| 9 | |
| 10 | [[PageOutline]] |
| 11 | {{{ |
| 12 | #!text |
| 13 | 請先連線至 nodeN.3du.me , N 為您的報名編號 |
| 14 | }}} |
| 15 | |
| 16 | * 首先,我們想要瞭解上述練習中一直使用到的指令 hadoop 是什麼。讓我們先用 which 指令,找出它所在的路徑 |
| 17 | {{{ |
| 18 | lab@node1:~/hadoop_labs$ which hadoop |
| 19 | /home/user/hadoop/bin/hadoop |
| 20 | }}} |
| 21 | |
| 22 | * 接著,讓我們用指令 file 來查出這個 hadoop 指令是什麼格式。 |
| 23 | {{{ |
| 24 | lab@node1:~/hadoop_labs$ file `which hadoop` |
| 25 | /home/user/hadoop/bin/hadoop: a bash script, ASCII text executable |
| 26 | }}} |
| 27 | |
| 28 | * 現在我們知道它是 bash script,那如何針對 bash script 進行除錯呢?我們可以用 bash -x 參數來進行除錯! |
| 29 | {{{ |
| 30 | lab@node1:~/hadoop_labs$ bash -x `which hadoop` fs -ls |
| 31 | .... 略 .... |
| 32 | adoop/libexec/../lib/slf4j-api-1.4.3.jar:/home/user/hadoop/libexec/../lib/slf4j-log4j12-1.4.3.jar:/home/user/hadoop/libex |
| 33 | ec/../lib/xmlenc-0.52.jar:/home/user/hadoop/libexec/../lib/jsp-2.1/jsp-2.1.jar:/home/user/hadoop/libexec/../lib/jsp-2.1/j |
| 34 | sp-api-2.1.jar org.apache.hadoop.fs.FsShell -ls |
| 35 | Found 3 items |
| 36 | drwxr-xr-x - user supergroup 0 2013-09-23 00:28 /user/user/input |
| 37 | drwxr-xr-x - user supergroup 0 2013-09-23 00:27 /user/user/tmp |
| 38 | drwxr-xr-x - user supergroup 0 2013-09-23 00:34 /user/user/toHDFS |
| 39 | }}} |
| 40 | |
| 41 | * 從上面指令的執行結果,我們可以觀察到 hadoop fs 指令會幫忙補齊 Java CLASSPATH 的設定,最後會執行某個 Java Class |
| 42 | * 讓我們來看一下其他的 hadoop 指令是使用哪個 Java Class |
| 43 | {{{ |
| 44 | lab@node1:~/hadoop_labs$ bash -x `which hadoop` jar |
| 45 | lab@node1:~/hadoop_labs$ bash -x `which hadoop` fsck |
| 46 | }}} |
| 47 | |
| 48 | * <舉一反三> 未來您想要找任何指令的 Java 原始碼入口,就可以使用這個技巧。例如: hadoop distcp 、 hadoop balancer |
| 49 | |
| 50 | == 實作習題 == |
| 51 | |
| 52 | * <問題 1> 請問 hadoop fs 指令是使用哪個 Java Class ? |
| 53 | {{{ |
| 54 | #!text |
| 55 | (A) FileSystem |
| 56 | (B) FsShell |
| 57 | (C) RunJar |
| 58 | (D) DFSck |
| 59 | }}} |
| 60 | |
| 61 | * <問題 2> 請問 hadoop jar 指令是使用哪個 Java Class ? |
| 62 | {{{ |
| 63 | #!text |
| 64 | (A) FileSystem |
| 65 | (B) FsShell |
| 66 | (C) RunJar |
| 67 | (D) DFSck |
| 68 | }}} |
| 69 | |
| 70 | * <問題 3> 請問 hadoop fsck 指令是使用哪個 Java Class ? |
| 71 | {{{ |
| 72 | #!text |
| 73 | (A) FileSystem |
| 74 | (B) FsShell |
| 75 | (C) RunJar |
| 76 | (D) DFSck |
| 77 | }}} |