知识点
相关文章
更多最近更新
更多Hadoop中的VersionInfo类
2019-03-28 13:23|来源: 网络
这个类是个比较普通的类,但是管理了Hadoop的版本信息,包括用户、编译时间、版本信息等内容。在这个类中,封装了HadoopVersionAnnotation这个注释类。由于个人觉得这个设置挺巧妙,值得学习,所以特别拿出来说明进行分享。
下面就VersionInfo的几个调用场景进行说明
(1)打印系统版本信息。运行hadoop VERSION时,对应的执行类即为VersionInfo在main中直接打印消息。
public static void main(String[] args) {
System.out.println("Hadoop " + getVersion());
System.out.println("Subversion " + getUrl() + " -r " + getRevision());
System.out.println("Compiled by " + getUser() + " on " + getDate());
System.out.println("From source with checksum " + getSrcChecksum());
}
(2)在namenode等后台进程启动时,会调用StringUtils.startupShutdownMessage(NameNode.class, argv, LOG);打印当前的进程和系统消息。
其中startupShutdownMessage打印进程启动或停止的消息日志。
当进程启动时:
LOG.info(
toStartupShutdownString("STARTUP_MSG: ", new String[] {
"Starting " + classname, //打印类名
" host = " + hostname, //机器名和IP地址
" args = " + Arrays.asList(args), //参数列表
" version = " + VersionInfo.getVersion(), //后面的都是从VersionInfo获取的系统信息。
" build = " + VersionInfo.getUrl() + " -r "
+ VersionInfo.getRevision()
+ "; compiled by '" + VersionInfo.getUser()
+ "' on " + VersionInfo.getDate()}
)
);
当进程停止时,执行run中的内容。可以搜索addShutdownHook,即可理解这部分代码。这个部分和VersionInfo无关,只是顺便说明。
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
LOG.info(toStartupShutdownString("SHUTDOWN_MSG: ", new String[]{
"Shutting down " + classname + " at " + hostname}));
}
});
好了,到此为止,对VersionInfo的功能进行了介绍,下面介绍其工作的原理。
(3)VersionInfo的工作原理。
定义了静态变量:myPackeage和version。其中version是HadoopVersionAnnotation的实例。HadoopVersionAnnotation是Annotation接口类,在这里,hadoop项目组通过这种方式来获取系统版本信息。并不是直接写在代码中。后面会说到,这实际是从build过程就开始的工作。
private static Package myPackage;
private static HadoopVersionAnnotation version;
static {
myPackage = HadoopVersionAnnotation.class.getPackage();
version = myPackage.getAnnotation(HadoopVersionAnnotation.class);
}
/**
* Get the meta-data for the Hadoop package.
* @return
*/
static Package getPackage() {
return myPackage;
}
/**
* Get the Hadoop version.
* @return the Hadoop version string, eg. "0.6.3-dev"
*/
//代码较多,这里就取getVersion()方法来说明,实际是获取了HadoopVersionAnnotation实例的version()方法的返回值。
public static String getVersion() {
return version != null ? version.version() : "Unknown";
}
}
相关问答
更多-
原因是类型擦除[1]。 您将输出K / V类设置为泛型。 在作业设置(运行时间,不是编译时间)期间,这些泛型会被删除。 输入k / v类可以从输入文件中读取,对于SequenceFiles类,这些类位于标题中 - 可以在编辑器中打开序列文件时读取它们。 这个头文件必须被写入,因为每个映射输出都是一个SequenceFile,所以你需要提供这些类。 [1] http://download.oracle.com/javase/tutorial/java/generics/erasure.html The rea ...
-
我不确定您的XML结构是什么样的,但是例如,如果您有XML结构:
102A5RET Blue-Moon-12-PK-BTTLE 2 问题是hadoop.ProcessUnits应该指向你想要运行的mainClass 。 您的类称为WordCount ,因此它应该类似于: $ hadoop jar WordCount.jar.WordCount input_dir output_dir 您的代码不包含软件包名称,因此我替换了 The problem is that hadoop.ProcessUnits should point to the mainClass you want to run. Yo ... Inno Setup不支持此功能。 您必须在编译时自己修改版本信息。 Imo,在链接到安装程序之前访问卸载程序可执行文件的唯一方法是滥用SignTool “回调”。 设置为SignTool的命令实际上可以对可执行文件执行任何操作,而不仅仅是“签名”它。 但它必须在任何情况下“签署”它(Inno Setup在“工具”完成后明确检查可执行文件是否已签名)。 您可以通过将SignTool设置为最终将运行实际signtool.exe的批处理文件(或其他脚本)来实现这一目的,但在此之前,它将修改版本信息(例如,使用R ...将您要发出的所有列作为键和值组合成一个分隔的字符串,并将它们作为文本发出。 假设您的输入如下所示: 不,姓名,年龄,国家 1,塔里克,25,印度 2,萨米,25,XYZ 并且您希望将“No + Age”作为键,将“Name + Country”作为值。 public static class MyMapper extends Mapper{ String line = ""; String val = ""; ... Hadoop Text类(Hadoop Text class)[2022-02-21]
他们已经实现了自己的Text for String,LongWritable for Long,IntWritable for Integers。 添加这些类的目的是为优化的网络序列化定义自己的基本类型。 这些可以在org.apache.hadoop.io包中找到。 此类型生成紧凑的序列化对象,以充分利用网络带宽。 Hadoop旨在处理大数据,因此网络带宽是他们想要以非常有效的方式使用的最宝贵的资源。 此外,与Java的本机类型相比,它们减少了这些对象的序列化和反序列化的开销。 They have impl ...您不能返回在配置中定义的类的子类,因为Hadoop显式检查setMapOutputValueClass指定的类类型以及它从setMapOutputValueClass接收的类型。 它这样做是因为它需要序列化/反序列化从映射器发出的对象。 当它执行反序列化时,它会创建在setMapOutputValueClass调用中指定的新对象类型,然后使用WriteableComparable接口的方法用数据填充新创建的对象。 为了能够发出不同的对象类型,您可以定义容器非抽象类,并将实际对象及其类型标识符放在其中 ...使用maven和m2e插件,hadoop项目就像:... 这是我的2美分。 我遇到了同样的问题,我在unix环境中重新安装了hadoop并且运行正常。 Cygwin有一些奇怪的问题,hadoop plus windows不是hadoop的好平台。 Here is my 2 cents. I had the same issue, I re-installed hadoop in a unix environment and it worked fine. Cygwin has some weird issues with hadoop plus windows i ...你必须在文本信息和裸VS_FIXEDFILEINFO块之间做出改变。 第一个块只存在一次。 文本信息取决于语言。 “Windows”不喜欢特定的一个;)探险家所做的是另一回事。 它只显示资源信息。 但实际上这只是字符串信息而不是固定版本信息中的信息。 当您调用GetFileVersionInfo时,您将获得所有语言块! VerQueryValue用于访问单独的块。 Windows中的安装程序和其他例程仅使用VS_FIXEDFILEINFO块。 他们不关心任何文本块。 而这个块只存在一次。 我假设资源管理器只 ...