快捷搜索:  汽车  科技

impala分批读取数据:0518-如何在Impala中使用UDF获取SessionId

impala分批读取数据:0518-如何在Impala中使用UDF获取SessionId2. 因此在编译该UDF文件时,只能通过引入impala的源码和编译源码时需要的依赖来实现。按照正常的Impala用C 来实现UDF的流程,context->impl()->state()->session_id()将不能编译成功。https://github.com/cloudera/Impala/blob/cdh5-2.9.0_5.12.2/be/src/udf/udf.h#L234 https://github.com/cloudera/Impala/blob/cdh5-2.9.0_5.12.2/be/src/runtime/runtime-state.h#L112 但是从源码中方法的注释上我们可以看到,context的impl()方法是不允许在UDA/UDF中使用的:因此从官方提供的UDF依赖包impala-udf-devel安装后的库中也可以看到,并没有run

作者:李继武

1.文档编写目的

Hive在UDF中获取sessionId可以直接使用提供的java API,但是该UDF如果移植到Impala中是无法获取到Impala连接的SessionId的,要想获取Impala的SessionId 需要用C 来编写。

2.实现思路

1. 根据Impala的源码可知可通过UDF参数中的context上下文对象来取得该SessionId 具体调用关系如下:

context->impl()->state()->session_id();

源码参考:

https://github.com/cloudera/Impala/blob/cdh5-2.9.0_5.12.2/be/src/udf/udf.h#L234 https://github.com/cloudera/Impala/blob/cdh5-2.9.0_5.12.2/be/src/runtime/runtime-state.h#L112

但是从源码中方法的注释上我们可以看到,context的impl()方法是不允许在UDA/UDF中使用的:

impala分批读取数据:0518-如何在Impala中使用UDF获取SessionId(1)

因此从官方提供的UDF依赖包impala-udf-devel安装后的库中也可以看到,并没有runtime-state.h等编译需要的依赖文件:

impala分批读取数据:0518-如何在Impala中使用UDF获取SessionId(2)

上图的五个声明文件是官方提供的UDF依赖。

按照正常的Impala用C 来实现UDF的流程,context->impl()->state()->session_id()将不能编译成功。

impala分批读取数据:0518-如何在Impala中使用UDF获取SessionId(3)

2. 因此在编译该UDF文件时,只能通过引入impala的源码和编译源码时需要的依赖来实现。

3.编译流程

1. 安装maven

下载maven:

wget http://mirror.cogentco.com/pub/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz

impala分批读取数据:0518-如何在Impala中使用UDF获取SessionId(4)

解压:

tar -zxvf apache-maven-3.6.0-bin.tar.gz mv apache-maven-3.6.0 /usr/local/

impala分批读取数据:0518-如何在Impala中使用UDF获取SessionId(5)

猜您喜欢: