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)) { |