Apache Doris 自定义C++ UDF之流程详解(1)

简介: Apache Doris 自定义C++ UDF之流程详解(1)

一、背景信息

在过去版本中,Apache Doris 提供了 C++ 语言的原生 UDF,便于用户通过自己编写自定义函数来满足特定场景的分析需求。但由于原生 UDF 与 Doris 代码耦合度高、当 UDF 出现错误时可能会影响集群稳定性,且只支持 C++ 语言,对于熟悉 Hive、Spark 等大数据技术栈的用户而言存在较高门槛,因此在 1.2.0 新版本Apache Doris社区增加了 Java 语言的自定义函数,支持通过 Java 编写 UDF/UDAF,方便用户在 Java 生态中使用。同时,通过堆外内存、Zero Copy 等技术,使得跨语言的数据访问效率大幅提升。

C++自定义UDF函数主要适用于,1.2.0版本之前,用户需要的分析能力 Doris 并不具备的场景,比如Tableau通过固化sql直连doris查询时出现部分函数不兼容问题。用户可以自行根据自己的需求,实现自定义的函数,并且通过 UDF 框架注册到 Doris 中,来扩展 Doris 的能力,并解决用户分析需求。

二、环境信息

2.1 硬件信息

  1. CPU :4C
  2. CPU型号:x64(AVX2)
  3. 内存 :10GB
  4. 硬盘 :66GB SSD

2.2 软件信息

  1. Linux版本 :CentOS-7
  2. Apahce Doris版本 :0.15-release

三、环境准备

C++开发环境准备。

3.1 IDE选型

code:blocks

codeblocks下载

3.2 下载安装

如果使用的是windows操作系统,建议下载第四个列表中的,因为它自带了GCC/G++ compliler 和 GDB debugger,当然也可以后续自己下载MinGW。

3.3 Hello World

环境搭好后,传统手艺:Hello World

四、自定义函数流程

以官方源码为例。

4.1 源码准备

git clone https://github.com/apache/incubator-doris/tree/branch-0.15/contrib/udf/src/udf_samples

4.2 文件上传

根据官文将文件放置对应的路径下,注意修改CMakeLists.txt文件,以官文内容为主。

├── thirdparty
│ │── include
│ │ └── udf.h
│ └── lib
│   └── libDorisUdf.a
└── udf_samples
  ├── CMakeLists.txt
  ├── uda_sample.cpp
  ├── uda_sample.h
  ├── udf_sample.cpp
  └── udf_sample.h

4.3 编译UDF文件

#进入build文件夹
cd /opt/doris/udf/udf_samples/build
#生成Makefile
cmake ../
#生成对应动态库
make

4.4 编译结果

├── thirdparty
├── udf_samples
  └── build
    └── src
      └── udf_samples
        ├── libudasample.so
        └── libudfsample.so

4.5 Nginx服务搭建

由于doris client需要http服务获取so动态库,故需搭建nginx。

#安装部署nginx步骤省略
 server {
        listen       8088;
        server_name  localhost;
        location /udf {
          alias   /opt/doris/udf;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
         root   html;
        }
   }

4.6 函数使用

4.6.1 创建 UDF 函数

CREATE FUNCTION 
MyADD00(INT,INT) 
RETURNS INT PROPERTIES ( 
"symbol" = "_ZN9doris_udf6AddUdfEPNS_15FunctionContextERKNS_6IntValES4_",
"object_file" = "http://10.192.119.68:8088/udf/udf_samples/build/src/udf_samples/libudfsample.so" );

4.6.2 使用UDF 函数

五、常见问题

5.1 ROS问题

make时出现ROS问题;

注意:需要在CMakeFiles.txt头部加一条SET(CMAKE_CXX_FLAGS “-std=c++0x”)命令解决。

5.2 路径问题

将CMakeFiles.txt的相对路径都调整为绝对路径或新增路径变量。

Apache Doris 自定义C++ UDF流程详解至此结束,查阅过程中若遇到问题欢迎留言交流

相关文章
|
2月前
|
存储 自然语言处理 BI
|
2月前
|
消息中间件 分布式计算 大数据
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
81 5
|
2月前
|
Apache Java 数据库连接
Apache Doris 2.0.15 版本发布
Apache Doris 2.0.15 版本已于 2024 年 9 月 30 日正式与大家见面,该版本提交了 157 个改进项以及问题修复,进一步提升了系统的性能及稳定性,欢迎大家下载体验。
|
3月前
|
存储 SQL 缓存
快手:从 Clickhouse 到 Apache Doris,实现湖仓分离向湖仓一体架构升级
快手 OLAP 系统为内外多个场景提供数据服务,每天承载近 10 亿的查询请求。原有湖仓分离架构,由离线数据湖和实时数仓组成,面临存储冗余、资源抢占、治理复杂、查询调优难等问题。通过引入 Apache Doris 湖仓一体能力,替换了 Clickhouse ,升级为湖仓一体架构,并结合 Doris 的物化视图改写能力和自动物化服务,实现高性能的数据查询以及灵活的数据治理。
快手:从 Clickhouse 到 Apache Doris,实现湖仓分离向湖仓一体架构升级
|
1天前
|
存储 SQL Apache
Apache Doris 创始人:何为“现代化”的数据仓库?
3.0 版本是 Apache Doris 研发路程中的重要里程碑,他将这一进展总结为“实时之路”、“统一之路”和“弹性之路”,详细介绍了所对应的核心特性的设计思考与应用价值,揭晓了 2025 年社区发展蓝图
Apache Doris 创始人:何为“现代化”的数据仓库?
|
3天前
|
SQL 存储 数据处理
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
27 1
别让你的CPU打盹儿:Apache Doris并行执行原理大揭秘!
|
28天前
|
存储 消息中间件 分布式计算
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
Cisco WebEx 早期数据平台采用了多系统架构(包括 Trino、Pinot、Iceberg 、 Kyuubi 等),面临架构复杂、数据冗余存储、运维困难、资源利用率低、数据时效性差等问题。因此,引入 Apache Doris 替换了 Trino、Pinot 、 Iceberg 及 Kyuubi 技术栈,依赖于 Doris 的实时数据湖能力及高性能 OLAP 分析能力,统一数据湖仓及查询分析引擎,显著提升了查询性能及系统稳定性,同时实现资源成本降低 30%。
Cisco WebEx 数据平台:统一 Trino、Pinot、Iceberg 及 Kyuubi,探索 Apache Doris 在 Cisco 的改造实践
|
18天前
|
SQL 存储 Apache
Apache Doris 3.0.3 版本正式发布
亲爱的社区小伙伴们,Apache Doris 3.0.3 版本已于 2024 年 12 月 02 日正式发布。该版本进一步提升了系统的性能及稳定性,欢迎大家下载体验。
|
1月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
1月前
|
SQL 存储 数据处理
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
Apache Doris 物化视图进行了支持。**早期版本中,Doris 支持同步物化视图;从 2.1 版本开始,正式引入异步物化视图,[并在 3.0 版本中完善了这一功能](https://www.selectdb.com/blog/1058)。**

推荐镜像

更多