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

成功

Impala UDF是指在Impala使用的用户自定义函数。在Impala中,可以通过创建UDF来扩展Impala的功能。UDF可以用于对数据进行复杂的计算和转换操作,以满足用户特定的数据处理需求。 在创建Impala UDF之前,需要确保在所有Impala Daemon服务器上创建了/var/lib/impala/udfs目录,并将其所有权设置为impala用户。可以使用以下命令来完成此操作: ``` [ec2-user@ip-172-31-10-156 lib]$ sudo mkdir -p /var/lib/impala/udfs [ec2-user@ip-172-31-10-156 lib]$ sudo chown -R impala:impala /var/lib/impala/udfs ``` 这将确保UDF程序能够正确加载和执行。 ImpalaUDF函数是支持使用Hive的UDF函数的。这是因为Impala和Hive共享相同的Metastore数据库,可以共享和重用Hive中定义的UDF函数。这使得在Impala使用Hive的UDF变得更加方便。 另外,还可以直接将Hive中的UDF加载到Impala使用。这样做的好处是不需要对UDF进行任何修改,完全可以按照在Hive中的使用方式在Impala使用。 因此,Impala UDF提供了一种在Impala中扩展功能和进行自定义计算的强大方式。通过创建和加载UDF函数,用户可以灵活地处理和转换数据,满足自己的特定需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [0011-如何在Hive & Impala使用UDF](https://blog.csdn.net/Hadoop_SC/article/details/83994512)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【impalaImpala 加载Hive的UDF函数,并设置为持久化persistent](https://blog.csdn.net/Mrerlou/article/details/120770760)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值