Hadoop 【org.apache.hadoop.util】包文件说明1.Daemon 【类】public class Daemon extends Thread { { 注意:这里有一行静
Hadoop 【org.apache.hadoop.util】包文件说明1.Daemon 【类】public class Daemon extends Thread { { 注意:这里有一行静态代码,总是设置线程为守护线程。 } 成员变量: Runnable runnable = null; 函数变量: public Daemon() { 什么都不做 } public Daemon(Runnable runnable) { 将runnable传给父类Thread; 将本地runnable指向参数runnable. 设置线程名字为runnable.toString() } public Runnable getRunnable() { 获取本地的runnable 变量。 }}2 2 LogFormatter【类】日志类不建议过多关注,非系统核心功能。public class LogFormatter extends Formatter { 成员变量: private static final String FORMAT = "yyMMdd HHmmss"; private static final String NEWLINE = System.getProperty("line.separator"); private final Date date = new Date(); private final SimpleDateFormat formatter = new SimpleDateFormat(FORMAT); private static boolean loggedSevere= false; private static boolean showTime = true; private static boolean showThreadIDs = false;函数变量: public static Logger getLogger(String name) { 通过工厂模式获得一个日志记录对象。 } public static void showTime(boolean showTime) { 1 本函数为静态函数 2 设置LogFormatter类的静态变量showTime. } public static void setShowThreadIDs(boolean showThreadIDs) { 1 本函数为静态函数 2 设置LogFormatter类的静态变量showThreadIDs } public static boolean hasLoggedSevere() { 1 本函数为静态函数 2 返回静态变量loggedSevere } public synchronized String format(LogRecord record) { 1 普通方法,意味着要生成一个对象才能调用。 2 返回的字符串根据以下规则生成: 2.1)需要显示时间,则显示当前时间。 2.2)需要显示线程ID,则显示线程ID。 2.3)如果是严重的消息,就显示严重并设置全局静态变量loggedSevere为true. 2.4) 显示record对应的消息。 2.5)如果record.getThrown()存在,则继续打印这个对象的相应消息。 } Public static PrintStream getLogStream (final Logger logger,final Level level) { 返回一个自定义的PrintStream. 细节不用去深究,日志类,不涉及系统核心功能。 }}3 PrintJarMainClass 【类】public class PrintJarMainClass{ 函数成员: public static void main(String[] args) { 打印一个Jar包的主类名字。很简单。 }}4 Progress【类】public class Progress { 成员变量: private String status = ""; private float progress; private int currentPhase; private ArrayList phases = new ArrayList(); private Progress parent; private float progressPerPhase;函数变量: public Progress() { 什么都不做。 } public Progress addPhase() { 1-先生成一个Progress节点。 2 加入到phases列表中,并设置新节点的parent为当前this. 这样构成了父子关系映射。 3 由于phases列表更新了,所以相应重新设置progressPerPhase,实际上也就 是如果一个子节点完成了,相应的进度增加多少。 比如 如果有10个子节点,则每个节点完成则进度增加10% 如果有 5个子节点,则每个节点完成则进度增加20% 4 最终返回新生成的节点。 }public Progress addPhase(String status) { 1 新增一个计算子节点。 2设置这个新节点的status变量。 最终返回新增子节点。 } public void setStatus(String status) { 设置本地status变量的setter方法。 } public void set(float progress) { 设置当前节点的进度progress的setter 方法。 } public void startNextPhase() { currentPhase增加1,很简单。 } public Progress phase() { 返回当前正在运行的子节点对象。 } public void complete() { 通常是子节点调用。 1 设置当前进度为1,表示自己已经完成了任务。 2 如果自己还有父节点的话,则告知父节点请将父节点的currentPhase自 增1. 相当于说”hey,man, 我已经完成了,你可以去让下一个节点工作了。” } private float getInternal() { 返回当前节点的总的进度。 注意:一个树的组织的进度算法是如何计算的,就跟生活中的算法一样的。 } public float get() { 计算当前节点所在的root树的全局进度。 } private void toString(StringBuffer buffer) { 打印出从一个字符串,形式如: “a>b>c” 其中a是当前节点的status名称, b是a节点中当前运行未完成子节点的名称 c是b节点中当前运行未完成子节点的名称 } public String toString() { 打印出从一个字符串,形式如: “a>b>c” 其中a是当前节点的status名称, b是a节点中当前运行未完成子节点的名称 c是b节点中当前运行未完成子节点的名称 }}