Proceso detallado de Apache Doris C ++ UDF nativo (1)
1. Información general
En versiones anteriores, Apache Doris proporcionaba UDF nativo en lenguaje C++, lo que resulta conveniente para que los usuarios escriban sus propias funciones personalizadas para cumplir con los requisitos de análisis de escenarios específicos. Sin embargo, debido al alto grado de acoplamiento entre la UDF nativa y el código Doris, cuando ocurre un error en la UDF, puede afectar la estabilidad del clúster y solo admite el lenguaje C++, existe un umbral alto para los usuarios que Están familiarizados con las pilas de tecnología de big data como Hive y Spark. La nueva versión 1.2.0 de la comunidad Apache Doris ha agregado funciones personalizadas del lenguaje Java y admite la escritura UDF/UDAF a través de Java, lo cual es conveniente para los usuarios en Java. ecosistema. Al mismo tiempo, a través de tecnologías como la memoria fuera del montón y Zero Copy, se ha mejorado enormemente la eficiencia del acceso a datos en varios idiomas.
La función UDF personalizada de C++ se aplica principalmente a escenarios donde Doris no tiene la capacidad de análisis requerida por los usuarios antes de la versión 1.2.0 . Por ejemplo, cuando Tableau se conecta directamente a la consulta de Doris a través de SQL solidificado, algunas funciones son incompatibles. Los usuarios pueden implementar funciones personalizadas según sus propias necesidades y registrarlas en Doris a través del marco UDF para ampliar las capacidades de Doris y resolver las necesidades de análisis de los usuarios.
2. Información medioambiental
2.1 Información de hardware
- Procesador : 4C
- Modelo de CPU : x64 (AVX2)
- Memoria : 10GB
- Disco duro : SSD de 66 GB
2.2 Información del software
- Versión de Linux : CentOS-7
- Versión de Apache Doris : versión 0.15
3. Preparación ambiental
Preparación del entorno de desarrollo C++.
3.1 Selección de IDE
código: bloques
3.2 Descargar e instalar
Si está utilizando el sistema operativo Windows, se recomienda descargar el de la cuarta lista, porque viene con el compilador GCC/G++ y el depurador GDB. Por supuesto, también puede descargar MinGW usted mismo más tarde.
3.3 Hola mundo
Una vez montado el entorno, artesanía tradicional: Hola Mundo.
4. Proceso de función personalizada
Tome el código fuente oficial como ejemplo.
4.1 Preparación del código fuente
clon de git https://github.com/apache/incubator-doris/tree/branch-0.15/contrib/udf/src/udf_samples
4.2 Carga de archivos
Coloque el archivo en la ruta correspondiente según el documento oficial, preste atención a modificar el archivo CMakeLists.txt y concéntrese en el contenido del documento oficial.
├── 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 Compilar archivo UDF
#进入build文件夹
cd /opt/doris/udf/udf_samples/build
#生成Makefile
cmake ../
#生成对应动态库
make
4.4 Resultados de la compilación
├── thirdparty
├── udf_samples
└── build
└── src
└── udf_samples
├── libudasample.so
└── libudfsample.so
4.5 Construcción del servicio Nginx
Dado que el cliente doris necesita el servicio http para obtener la biblioteca tan dinámica, es necesario compilar 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 Uso de funciones
4.6.1 Crear función 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 Uso de funciones UDF
5. Preguntas frecuentes
5.1 Problemas de ROS
Los problemas de ROS ocurren durante la creación;
Nota : debe agregar un comando SET(CMAKE_CXX_FLAGS "-std=c++0x") al encabezado de CMakeFiles.txt para resolverlo.
5.2 Problema de ruta
Ajuste las rutas relativas de CMakeFiles.txt a rutas absolutas o agregue variables de ruta.
Este es el final de la explicación detallada del proceso UDF de C ++ personalizado de Apache Doris. Si encuentra algún problema durante el proceso de revisión, deje un mensaje para comunicarse.