这个问题已经不是第一次遇到了,只不过今天痛下决心花费不少时间把它写成文章,给遇到同样问题的朋友一些参考。
我们知道,一个JAVA M-R job跑完后,无论是在命令行,还是在job的信息展示网页上,都会看到输出job counter的信息。在网页上,通过点击job信息页中的"counter"链接就能看到。
Java
[原创] JAVA map-reduce job中,reduce()方法漏写 @Override 注解引起的问题
有一个JAVA写的map-reduce job,mapper输出的key、value类型分别为Text、NullWritable,所以reducer应该像下面这样写:
static class QuerySegmentResultFromKVReducer extends Reducer<Text, NullWritable, NullWritable, NullWritable> {
@Override
protected void setup(Reducer.Context context) throws IOException, InterruptedException {
}
@Override
protected void cleanup(Reducer.Context context) throws IOException, InterruptedException {
}
@Override
protected void reduce(Text key, Iterable<NullWritable> values, Context context) throws IOException, InterruptedException {
//TODO:
}
}
在这里,reducer输出的key、value类型都是NullWritable,我们不用关心,这不是本文的关注点。
[原创] 用JAVA读取本地的TFRecord文件
[原创] 用JAVA程序读取本地的Hadoop sequence file
[原创] 通过第三方工具/JAVA程序访问S3存储
S3是亚马逊2006年推出的简单存储服务(Simple Storage Service),理论上是一个全球存储区域网络,你可以把它想像成一个超大的硬盘,可以在其中存储和检索数字资产,通过 S3 存储和检索的资产被称为对象,对象存储在存储段(bucket)中。
很多公司都推出了自己的对象存储服务,例如阿里云对象存储服务OSS,可以使用S3 API进行访问。
[原创] 使用Google HTTP Client/OkHttpClient来发送同步POST请求(JAVA)
这是一篇很水的文章,纯粹为了记录一些代码。
Google HTTP Client Library for Java 和 OkHttpClient 是两个很流行的http client JAVA库。
下面来看看用它们分别怎样通过POST请求把JSON数据发送到服务器。
JDK版本:1.8.0_221
[原创] JAVA Jackson解析无名(匿名)数组
假设有JSON文件 1.json:
[
{
"sku": "ABC",
"num": 3
},
{
"sku": "DEF",
"num": 2
}
]
由中括号可知,这个JSON字符串映射成JAVA对象是一个List,而它里面又包含了两个JAVA对象(每个大括号对应一个)。
[原创] selenium-java的wait.until(ExpectedConditions)编译出错问题
代码示例:
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
alert.accept();
在升级了pom.xml中的selenium-java版本到3.141.59后,代码编译出错了(挂在第一行),错误信息:
无法将类 org.openqa.selenium.support.ui.FluentWait<T>中的方法 until应用到给定类型;[ERROR] 需要: java.util.function.Function<? super org.openqa.selenium.WebDriver,V>[ERROR] 找到: org.openqa.selenium.support.ui.ExpectedCondition<org.openqa.selenium.Alert>[ERROR] 原因: 无法推断类型变量 V[ERROR] (参数不匹配; org.openqa.selenium.support.ui.ExpectedCondition<org.openqa.selenium.Alert>无法转换为java.util.function.Function<? super org.openqa.selenium.WebDriver,V>)
[原创] Hadoop 2.6.x 下Distributed Cache的用法
仔细记录一下Java的Map-Reduce job使用distributed cache的方法,毕竟以前一直都是copy paste ~
✓ 适用的Hadoop版本
CDH 5.8.0(Hadoop 2.6.0)
别的版本没有测试过,但后面相近的版本应该也能用。
✓ 准备工作:上传本地文件到HDFS
为了在Java代码中把一个文件加入 distributed cache,需要先把它上传到HDFS,之后应使用 HDFS 路径来加入 distributed cache。
假设要加入 distributed cache 的文件为 file.txt:
hadoop fs -put file.txt /your/hdfs/dir/
[原创] 如何用Jackson解析含有转义字符的JSON到Java对象?
如果一个JSON字符串里有一个字段,它的值又是一个完整的JSON字符串,那么这时候,它可能会含有转义字符。举个例子,我们有一个文件 codelast.json,它的内容为一行字符串:
{"aaa":"{\"ccc\":\"ccc\",\"ddd\":\"ddd\"}","bbb":{"ccc":"ccc","ddd":"ddd"}}
现在要用Jackson解析它为一个Java对象,怎么做?
[翻译] 在JAVA中,怎样周期性运行一个任务
本文是对这篇文章的翻译:《How to Schedule a Task to Run in an Interval》
我不知道原作者是否允许这样做,但我翻译本文仅在于传播知识的目的,在此向原作者表示深深的感谢:感谢你们的分享。
[原创] Java动态添加一个目录到classpath中
通常我们写程序,会用到一些配置文件,这些文件与程序在同一个父目录下,配置文件可能放在config之类的目录下,程序中会使用这些配置文件。
我遇到了这么件事情:因为一个特殊需求,需要把配置文件放到jar包中,最终部署出去的只能是一个jar包(所有东西都在jar包里,包括程序和所需的资源),然后在程序中使用 getClass().getResourceAsStream(文件在jar包中的路径) 的方式来读取配置文件。这也倒没什么不爽的,但是在单元测试中怎么办?
[原创](翻译)什么是Java的永久代(PermGen)内存泄漏
本文是我对这篇文章的翻译:What is a PermGen leak? 为了便于阅读,我将原文附于此处,翻译穿插在其中。此外,为了防止原链接在未来某一天失效后,文中的图片再也看不到的问题,我将原文中的图片也保存到了本站的服务器上,我不知道原作者是否允许这样做,但我翻译本文仅在于传播知识的目的,在此向原作者表示深深的感谢:感谢你们的分享。
[原创]如何添加一个文件/目录到IntelliJ项目的classpath中
以下内容的背景:IntelliJ,Java项目。
在单元测试中,我们经常会使用与生产环境里不同的一些配置文件来为提供参数,而你的程序又是以类似下面的方法来读取配置文件:
String configFileName = "config.properties"; Properties properties = new Properties(); properties.load(MyClass.class.getClassLoader().getResourceAsStream(configFileName));
上面的代码中仅使用了配置文件名,而不是其完整路径,这就导致了可能在IntelliJ中运行一个单独的单元测试的时候,找不到该配置文件,因为你只提供文件名的话,该文件必须要在classpath中,否则是找不到它的。
[原创](翻译)Java版的各种Thrift server实现的比较
本文是我对这篇文章的翻译:Thrift Java Servers Compared,为了便于阅读,我将原文附于此处,翻译穿插在其中。此外,为了防止原链接在未来某一天失效后,文中的图片再也看不到的问题,我将原文中的图片也保存到了本站的服务器上,我不知道github或原作者是否允许这样做,但我翻译本文仅在于传播知识的目的,在此向原作者和github表示深深的感谢:感谢你们分享了这样好的文章。
Thrift Java Servers Compared
This article talks only about Java servers. See this page if you are interested in C++ servers.
本文仅讨论Java版的Thrift server.如果你对C++版的感兴趣,请参考 这个 页面。