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中使用的:
因此从官方提供的UDF依赖包impala-udf-devel安装后的库中也可以看到,并没有runtime-state.h等编译需要的依赖文件:
上图的五个声明文件是官方提供的UDF依赖。
按照正常的Impala用C 来实现UDF的流程,context->impl()->state()->session_id()将不能编译成功。
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
解压:
tar -zxvf apache-maven-3.6.0-bin.tar.gz mv apache-maven-3.6.0 /usr/local/