Processo detalhado de UDF C++ personalizado 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.

insira a descrição da imagem aqui

2. Informação ambiental

2.1 Informações de hardware

  1. CPU : 4C
  2. Modelo de CPU : x64 (AVX2)
  3. Memória : 10 GB
  4. Disco rígido : SSD de 66 GB

2.2 Informações de software

  1. Versão Linux : CentOS-7
  2. 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

download de blocos de código

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.

insira a descrição da imagem aqui

3.3 Olá mundo

Depois de montado o ambiente, artesanato tradicional: Hello World

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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.

insira a descrição da imagem aqui

#安装部署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

insira a descrição da imagem aqui

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.

insira a descrição da imagem aqui
insira a descrição da imagem aqui

5.2 Problema de caminho

Ajuste os caminhos relativos de CMakeFiles.txt para caminhos absolutos ou adicione variáveis ​​de caminho.

insira a descrição da imagem aqui
insira a descrição da imagem aqui

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

Acho que você gosta

Origin blog.csdn.net/ith321/article/details/132162800
Recomendado
Clasificación