更新:Hadoop概要分析
我曾寄過Karmasphere創始人Shevek的幫助。他曾在ApacheCon 2011上做過關於hadoop分析的演示。他建議尋找Throwable。 Catch block for Throwable顯示:
localhost: java.lang.IncompatibleClassChangeError: class com.kannan.mentor.sourcewalker.ClassInfoGatherer has interface org.objectweb.asm.ClassVisitor as super class
localhost: at java.lang.ClassLoader.defineClass1(Native Method)
localhost: at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
Hadoop有ASM3.2 jar和我正在使用5.0。在5.0中,ClassVisitor是一個超級類,在3.2中它是一個接口。我打算將我的分析器更改爲3.2。有沒有其他更好的方法來解決這個問題?
順便說一句,Shevek是超級酷。一位創始人兼首席執行官迴應了一些匿名的電子郵件。想象一下。
結束時更新
我想簡介的Hadoop(JobTracker的,名稱節點,數據節點等)。使用ASM5創建一個分析器。在Spring上測試它,一切正常。
然後以僞分佈模式在Hadoop上測試分析器。
@Override
public byte[] transform(ClassLoader loader, String className,
Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
byte[] classfileBuffer) throws IllegalClassFormatException {
try {
/*1*/ System.out.println(" inside transformer " + className);
ClassReader cr = new ClassReader(classfileBuffer);
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
/* c-start */ // CheckClassAdapter cxa = new CheckClassAdapter(cw);
ClassVisitor cv = new ClassInfoGatherer(cw);
/* c-end */ cr.accept(cv, ClassReader.EXPAND_FRAMES);
byte[] b = cw.toByteArray();
/*2*/System.out.println(" inside transformer - returning" + b.length);
return b;
} catch (Exception e) {
System.out.println(" class might not be found " + e.getMessage()) ;
try {
throw new ClassNotFoundException(className, e);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return null;
}
我可以看到打印出來的第一條sysout語句,但不是第二條。也沒有錯誤。如果我從/ * c-start /到/ c-stop * /註釋掉,並用classFileBuffer替換cw,我可以看到第二個sysout語句。那一刻我去掉線
ClassVisitor cv = new ClassInfoGatherer(cw);
ClassInfoGatherer構造:
public ClassInfoGatherer(ClassVisitor cv) {
super(ASM5, cv);
}
我沒有看到第二個系統輸出語句。
我在這裏做錯了什麼。 Hadoop是否吞噬我的系統。也試過系統錯誤。即便是這種情況,爲什麼我可以看到第一個sysout語句?
任何建議都會有幫助。我想我在這裏錯過了一些簡單而明顯的事情......但無法弄清楚。加入
以下行hadoop-env.sh
出口HADOOP_NAMENODE_OPTS = 「 - javaagent:路徑罐子$ HADOOP_NAMENODE_OPTS」
出口HADOOP_SECONDARYNAMENODE_OPTS = 「 - 路徑罐子$ HADOOP_SECONDARYNAMENODE_OPTS」
出口HADOOP_DATANODE_OPTS = 「 - javaagent:路徑罐子$ HADOOP_DATANODE_OPTS」
出口HADOOP_BALANCER_OPTS = 「 - javaagent:路徑罐子$ HADOOP_BALANCER_OPTS」
出口HADOOP_JOBTRACKER_OPTS = 「 - javaagent:路徑罐子$ HADOOP_JOBTRACKER_OPTS」
我試過使用sjf4j記錄器。沒有工作。創建一個日誌休息服務,並在變換器中使用httpclient爲這個新服務發佈帖子。它適用於分析其他工具,但不適用於Hadoop。 –
我寄過Karmasphere創始人Shevek的幫助。我曾在ApacheCon 2011上做過關於hadoop剖析的演示。他建議尋找Throwable。 Throwable節目的捕獲塊: –