Hive自定义UDF/UDAF/UDTF中,如何获得List的ObjectInspector

在Hive中,在使用GenercU**F实现自定义UDF/UDAF/UDTF时,经常要制定输出类型,其中要获得一个ObjectInspector。

对于基础类型:
PrimitiveObjectInspectorFactory.javaStringObjectInspector)
对于List等复合类型,要2步:
ObjectInspectorFactory
.getStandardListObjectInspector(PrimitiveObjectInspectorFa[......]

继续阅读

Java对象的深拷贝和克隆

在有的时候,我们希望对Java对象执行“深拷贝”。

在Java中,没有提供类似的C++的拷贝构造函数,但是提供了默认的"克隆"接口 Clonable。

如果我们要对一个只包含基础类型(int / long /String)的对象进行克隆,只需要实现Clonable并实现clone()函数即可。

如下:
public class Row implements Cloneable {

long id;
String data;

@Override[......]

继续阅读

使用异步HTTP提升客户端性能(HttpAsyncClient)

大家都知道,应用层的网络模型有同步、异步之分。

同步,意为着线程阻塞,只有等本次请求全部都完成了,才能进行下一次请求。
异步,好处是不阻塞当前线程,可以“万箭齐发”的将所有请求塞入缓冲区,然后谁的请求先完成就处理谁。

大家也注意到了,同步模式阻塞的只是“线程”。实际上,在异步模式流行之前,人们也经常用多线程的方式处理并发请求。然而,随着数据规模的不断加大,线程开销所带来的CPU、内存剧增,因此这种方法的应用比较有限。

近几年来,随着异步处理方案在node.js、Nginx等系[......]

继续阅读

关于Maven中的version和classifier

今天,在引用mrunit的时候,第一次知道maven中除了version,还有更细粒度的classifier。

我们直接看个例子,要引用mrunit,在maven repo官网查询到gradle的写法为:
'org.apache.mrunit:mrunit:1.1.0'
然而,在执行gradew编译的时候,报错:
Could not resolve all dependencies for configuration ':testCompile'.
> Artifact 'o[......]

继续阅读