Changes between Version 3 and Version 4 of III131019/Lab9


Ignore:
Timestamp:
Oct 19, 2013, 10:16:51 PM (11 years ago)
Author:
jazz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • III131019/Lab9

    v3 v4  
    1515}}}
    1616
    17 == 最佳的程式範例就是原始碼 ==
     17== 替 Hadoop 上補丁的方法 ==
    1818
    19  * 下一個範例我們使用了一個 jar 的技巧,直接修改 hadoop-$VERSION-core.jar 壓縮檔中某幾個類別(CLASS)的內容
     19 * 在前面的範例中,我們使用 Bash 除錯技巧,得知當我們執行 hadoop fs 時,等同呼叫 FsShell 類別
     20 * 那 FsShell 類別在 Apache Hadoop 中,放在哪裡呢? 我們可以透過 find 指令查出來。
     21{{{
     22user@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{{{
     29user@node1:~$ cd ~/hadoop_labs
     30user@node1:~/hadoop_labs$ lab003/FsShell
     31}}}
    2032
     33 * 但是背後的意義是什麼呢?首先,讓我們用 diff 觀察一下原始碼做了什麼修改
    2134{{{
    22 cd ~/hadoop_labs
    23 lab003/FsShell
     35user@node1:~$ cd ~/hadoop_labs/lab003/
     36user@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)) {
    2462}}}
     63 * 至於 ant 的 build.xml 中,有一個比較特殊的語法,是呼叫 jar 的 update (-u) 功能
     64{{{
     65user@node1:~/hadoop_labs/lab003$ jar
     66用法:jar {ctxui}[vfm0Me] [jar 檔案] [清單檔案] [進入點] [-C 目錄] 檔案 ...
     67選項:
     68    -c  建立新的歸檔
     69    -t  列出歸檔的目錄
     70    -x  從歸檔中擷取已命名的 (或所有) 檔案
     71    -u  更新現有歸檔
     72    -v  在標準輸出中產生詳細輸出
     73    -f  指定歸檔檔案名稱
     74    -m  包含指定清單檔案中的清單資訊
     75    -e  為獨立應用程式指定應用程式進入點
     76        已隨附於可執行 jar 檔案中
     77    -0  僅儲存;不使用 ZIP 壓縮方式
     78    -M  不為項目建立清單檔案
     79    -i  為指定的 jar 檔案產生索引資訊
     80    -C  變更至指定目錄並包含後面所列的檔案
     81}}}