Processo detalhado de C++ UDF nativo do Apache Doris (1)
1. Informações básicas
Nas versões anteriores, o Apache Doris fornecia UDF nativo em linguagem C++, o que é conveniente para os usuários escreverem suas próprias funções personalizadas para atender aos requisitos de análise de cenários específicos. Porém, devido ao alto grau de acoplamento entre a UDF nativa e o código Doris, quando ocorre um erro na UDF, pode afetar a estabilidade do cluster, e suporta apenas a linguagem C++, há um limite alto para usuários que estão familiarizados com pilhas de tecnologia de big data, como Hive e Spark. A nova versão 1.2.0 da comunidade Apache Doris adicionou funções personalizadas da linguagem Java e oferece suporte à gravação de UDF/UDAF por meio de Java, o que é conveniente para os usuários usarem no Java ecossistema. Ao mesmo tempo, através de tecnologias como memória off-heap e Zero Copy, a eficiência do acesso a dados entre idiomas foi bastante melhorada.
A função UDF personalizada C++ é aplicável principalmente a cenários em que Doris não tem o recurso de análise exigido pelos usuários anteriores à versão 1.2.0 . Por exemplo, quando o Tableau se conecta diretamente à consulta Doris por meio de SQL solidificado, algumas funções são incompatíveis. Os usuários podem implementar funções personalizadas de acordo com suas próprias necessidades e registrá-las no Doris por meio da estrutura UDF para expandir os recursos do Doris e solucionar as necessidades de análise do usuário.
2. Informação ambiental
2.1 Informações de hardware
- CPU : 4C
- Modelo de CPU : x64 (AVX2)
- Memória : 10 GB
- Disco rígido : SSD de 66 GB
2.2 Informações de software
- Versão Linux : CentOS-7
- Versão do Apache Doris : versão 0.15
3. Preparação ambiental
Preparação do ambiente de desenvolvimento C++.
3.1 Seleção de IDE
código: blocos
3.2 Baixe e instale
Se você estiver usando o sistema operacional Windows, é recomendável baixar o da quarta lista, pois ele vem com o compilador GCC/G++ e o depurador GDB. Claro, você também pode baixar o MinGW mais tarde.
3.3 Olá mundo
Depois de montado o ambiente, artesanato tradicional: Hello World
4. Processo de função personalizada
Veja o código-fonte oficial como exemplo.
4.1 Preparação do código-fonte
clone git https://github.com/apache/incubator-doris/tree/branch-0.15/contrib/udf/src/udf_samples
4.2 Carregamento de arquivo
Coloque o arquivo no caminho correspondente de acordo com o documento oficial, preste atenção para modificar o arquivo CMakeLists.txt e concentre-se no conteúdo do 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 arquivo UDF
#进入build文件夹
cd /opt/doris/udf/udf_samples/build
#生成Makefile
cmake ../
#生成对应动态库
make
4.4 Resultados da Compilação
├── thirdparty
├── udf_samples
└── build
└── src
└── udf_samples
├── libudasample.so
└── libudfsample.so
4.5 Construção de serviço Nginx
Como o cliente doris precisa do serviço http para obter a biblioteca tão dinâmica, é necessário construir o 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 da função
4.6.1 Criar função 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 Usando funções UDF
5. Perguntas frequentes
5.1 Problemas de ROS
Problemas de ROS ocorrem durante o make;
Nota : Você precisa adicionar um comando SET(CMAKE_CXX_FLAGS "-std=c++0x") ao cabeçalho de CMakeFiles.txt para resolvê-lo.
5.2 Problema de caminho
Ajuste os caminhos relativos de CMakeFiles.txt para caminhos absolutos ou adicione variáveis de caminho.
Este é o fim da explicação detalhada do processo C++ UDF personalizado do Apache Doris. Se você encontrar algum problema durante o processo de revisão, deixe uma mensagem para comunicação