C++_Impala_UDF:使用C++编写impala自定义函数(UDF)环境搭建

1. 安装cmake

1.1 下载

下载链接:

https://cmake.org/download/

选择已编译好的版本进行安装

在这里插入图片描述

1.2 安装

上传安装包到服务器并解压

配置环境变量

export PATH=/home/xxx/cmake-3.21.3-linux-x86_64/bin:$PATH

1.3 验证

验证是否安装成功

[root@xxxx xxxx]# cmake --version
cmake version 3.21.3CMake suite maintained and supported by Kitware (kitware.com/cmake).

2. 安装gcc-g++

2.1 下载

下载地址:

https://pkgs.org/

在这里插入图片描述
在这里插入图片描述

2.2 安装

上传安装包到服务器并解压

执行安装

rpm -ivh gcc-c++-4.8.5-44.el7.x86_64.rpm

安装过程可能会要求其他依赖,可下载后安装再继续

2.3 验证

g++ -v
#gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)

3. 安装boost库

3.1 下载

下载链接:

http://www.boost.org/

3.2 安装

上传文件到服务器并解压

执行脚本

./bootstrap.sh 

脚本执行完成后,多出脚本文件b2,执行该脚本文件

./b2 install [--prefix=/home/xxx/boost/]

4. 编译开发包

4.1 下载impala-udf-devel开发包

下载地址:

https://github.com/laserson/impala-udf-devel

4.2 编译

上传服务器并进入文件进行编译

cd impala-udf-devel-master
cmake .

ERROR:

CMake Error at CMakeLists.txt:46 (add_library):
Cannot find source file:

my-udf-file-1.cc

Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
.hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc

CMake Error at CMakeLists.txt:46 (add_library):
No SOURCES given to target: myudf

FIX:

这个需要修改为自己实现的源文件,即下图中标出的位置

在这里插入图片描述

5. 编写源文件

5.1 位置

impala-udf-devel-master目录下

5.2 头文件

#ifndef FUNCTION_H
#define  FUNCTION_H
#include "udf/udf.h"
#include 
using namespace impala_udf;StringVal function(FunctionContext* context, const StringVal& value);#endif

5.3 源文件

#include "function.h"
StringVal function(FunctionContext* context, const StringVal& value)
{……
}

5.4 参考链接

参考链接:

https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/impala_udf.html

https://github.com/cloudera/impala-udf-samples

6. 生成链接库

完成步骤5后,即可继续步骤4,继续编译,生成动态链接库

cmake .
make

编译完成后,生成build文件夹,里面包含动态链接库

7. 上传库

7.1 上传HDFS

#上传目录没有特殊目标要求
hdfs dfs -put libfunction.so /user/xxx/udf/

上传的路径要求为绝对路径,不然会报错:

ERROR: AnalysisException: URI path must be absolute: tmp/xxx/libfunction.so

7.2 生成函数

#symbol表示动态链接库中的函数名
create function function(string) returns string location '/user/xxx/udf/libfunction.so' symbol='function';

创建成功:

±---------------------------+
| summary |
±---------------------------+
| Function has been created. |
±---------------------------+

8. 测试

成功


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部