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

本文详细介绍了在Linux服务器上安装cmake、gcc-g++和boost库的过程,并提供了编译Impala用户定义函数(UDF)的步骤,包括下载、编译、解决错误、编写源文件及生成链接库。最后,文章还讲解了如何将编译后的库上传到HDFS并创建Impala函数以及进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.3

CMake 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 <string>
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. 测试

成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值