| 19 |   |  * 下一個範例我們使用了一個 jar 的技巧,直接修改 hadoop-$VERSION-core.jar 壓縮檔中某幾個類別(CLASS)的內容 | 
                      
                      
                        |   | 19 |  * 在前面的範例中,我們使用 Bash 除錯技巧,得知當我們執行 hadoop fs 時,等同呼叫 FsShell 類別 | 
                      
                        |   | 20 |  * 那 FsShell 類別在 Apache Hadoop 中,放在哪裡呢? 我們可以透過 find 指令查出來。 | 
                      
                        |   | 21 | {{{ | 
                      
                        |   | 22 | user@node1:~$ find ~/hadoop/src -name "FsShell.java" | 
                      
                        |   | 23 | /home/user/hadoop/src/core/org/apache/hadoop/fs/FsShell.java | 
                      
                        |   | 24 | }}} | 
                      
                        |   | 25 |  * 現在,我們知道 FsShell.java 原始碼的位置,我們想要對它做小幅的修正。 | 
                      
                        |   | 26 |  * 下一個範例我們使用了一個 update jar 檔的技巧,直接修改 hadoop-core-$VERSION.jar 壓縮檔中某幾個類別(CLASS)的內容,來達成我們觀察 Hadoop 行為模式的目的 | 
                      
                        |   | 27 |  * 執行的方式很簡單,請剪貼以下指令: | 
                      
                        |   | 28 | {{{ | 
                      
                        |   | 29 | user@node1:~$ cd ~/hadoop_labs | 
                      
                        |   | 30 | user@node1:~/hadoop_labs$ lab003/FsShell | 
                      
                        |   | 31 | }}} | 
                      
            
                      
                        | 22 |   | cd ~/hadoop_labs | 
                      
                        | 23 |   | lab003/FsShell | 
                      
                      
                        |   | 35 | user@node1:~$ cd ~/hadoop_labs/lab003/ | 
                      
                        |   | 36 | user@node1:~/hadoop_labs/lab003$ diff -Naur ~/hadoop/src/core/org/apache/hadoop/fs/FsShell.java src/FsShell.java  | 
                      
                        |   | 37 | --- /home/user/hadoop/src/core/org/apache/hadoop/fs/FsShell.java        2012-10-03 13:17:16.000000000 +0800 | 
                      
                        |   | 38 | +++ src/FsShell.java    2013-10-19 11:25:16.419320587 +0800 | 
                      
                        |   | 39 | @@ -571,6 +571,9 @@ | 
                      
                        |   | 40 |      Path srcPath = new Path(srcf); | 
                      
                        |   | 41 |      FileSystem srcFs = srcPath.getFileSystem(this.getConf()); | 
                      
                        |   | 42 |      FileStatus[] srcs = srcFs.globStatus(srcPath); | 
                      
                        |   | 43 | +    // Add by Jazz | 
                      
                        |   | 44 | +    System.out.println("srcFs = " + srcFs.getClass().toString()); | 
                      
                        |   | 45 | +    System.out.println("Uri   = " + srcFs.getUri().toString()); | 
                      
                        |   | 46 |      if (srcs==null || srcs.length==0) { | 
                      
                        |   | 47 |        throw new FileNotFoundException("Cannot access " + srcf +  | 
                      
                        |   | 48 |            ": No such file or directory."); | 
                      
                        |   | 49 | @@ -1786,8 +1789,12 @@ | 
                      
                        |   | 50 |          exitCode = FsShellPermissions.changePermissions(fs, cmd, argv, i, this); | 
                      
                        |   | 51 |        } else if ("-ls".equals(cmd)) { | 
                      
                        |   | 52 |          if (i < argv.length) { | 
                      
                        |   | 53 | +          // Add by Jazz | 
                      
                        |   | 54 | +          System.out.println("doall("+cmd+","+argv+","+i+")"); | 
                      
                        |   | 55 |            exitCode = doall(cmd, argv, i); | 
                      
                        |   | 56 |          } else { | 
                      
                        |   | 57 | +          // Add by Jazz | 
                      
                        |   | 58 | +          System.out.println("ls("+Path.CUR_DIR+",false)"); | 
                      
                        |   | 59 |            exitCode = ls(Path.CUR_DIR, false); | 
                      
                        |   | 60 |          }  | 
                      
                        |   | 61 |        } else if ("-lsr".equals(cmd)) { |