A linguagem de programação procedural em Greenplum (2)

índice

1. Introdução ao PL / R

Em segundo lugar, instale o pacote R

2.1 Instale a coleção de pacotes R de cálculo de dados Greenplum

Três, PL / Container

3.1 Processo de execução do programa PL / Container

3.2 Vantagens do PL / Container

Quatro, apêndice


1. Introdução ao PL / R

R é outra linguagem amplamente usada no campo da ciência de dados (como aprendizado de máquina). Engenheiros de dados com experiência em linguagem R podem usar PL / R para escrever código e, em seguida, executá-lo em paralelo em todos os nós Greenplum. Como PL / Python, PL / R é uma linguagem de programação procedural não confiável. Antes de criar o PL / R, você precisa instalar o pacote de instalação R e o pacote de instalação PL / R primeiro. Devido à relação de autorização de licença de software (R e PL / R são contratos GPL, e Greenplum não), Greenplum PL / R e a base de código principal Greenplum não estão juntos, mas estão localizados no seguinte endereço: https: // github .com / greenplum- A base de código db / plr contém código de integração contínua para gerar arquivos binários R e PL / R. Os leitores podem implantar CI e então gerar um pacote de formato gppkg contendo R e PL / R. Claro, você também pode baixar o pacote de instalação binário gppkg compilado do site oficial do Pivotal. Observe que a versão de R no Greenplum 5.X é 3.3.3 e esta versão foi testada.

Use gppkg para instalar pacotes R e PL / R em todos os nós Greenplum:

Como o PL / Python, antes de usar o PL / R, precisamos chamar o createlang para instalar o PL / R no banco de dados postgres:

 bin]$ createlang plr -d postgres
createlang: language installation failed: ERROR:  could not open extension control file "/usr/local/greenplum-db-6.2.1/share/postgresql/extension/plr.control": No such file or directory

Exemplo simples de PL / R 

Exemplo de chamada de função PL / R para gerar tabela de distribuição exponencial:

PL / R fornece algumas funções auxiliares, que não são instaladas por padrão, porque nem todas as funções PL / R precisam dessas funções. Se o usuário precisar, você mesmo pode instalar e carregar. Os comandos para instalar essas funções auxiliares são os seguintes:

Instale as funções auxiliares necessárias em uma sessão. Por exemplo, a função a seguir nos permite fazer referência a alguns TYPENAMEOIDs internos, como INT4OID, na função PL / R.

Devido às limitações de espaço, este capítulo não apresenta as funções suportadas pelo PL / R em detalhes. Os leitores interessados ​​podem consultar os seguintes recursos:

  • https://gpdb.docs.pivotal.io/5180/ref_guide/extensions/pl_r.html
  • http://www.joeconway.com/doc/index.html

Se você não usa mais o PL / R, pode chamar o seguinte comando para excluí-lo do banco de dados postgres.

Se você precisar excluir completamente o pacote PL / R do pacote Greenplum, você precisa chamar a ferramenta gppkg para excluir os pacotes PL / R e R gppkg primeiro e, em seguida, reiniciar o cluster.

Em segundo lugar, instale o pacote R

2.1 Instale a coleção de pacotes R de cálculo de dados Greenplum

Para a conveniência dos usuários, como PL / Python, o lançamento do Greenplum do Pivotal também fornece um pacote de linguagem R contendo bibliotecas comumente usadas relacionadas à ciência de dados. O método de instalação e desinstalação é semelhante ao do pacote Python, portanto, não o repetirei aqui. A função PL / R no Greenplum é basicamente a mesma que a função PL / R no PostgreSQL. Semelhante ao PL / Python, a conversão de tipo precisa ser fornecida na entrada e saída da função. Também suporta a função para armazenar dados compartilhados . tal como:

Apenas a função install_rcmd () não é temporariamente suportada no Greenplum 5.X, mas o Greenplum 6 planeja oferecer suporte a essa função (esta função depende de uma nova tabela replicada de função no Greenplum 6, e esta função está atualmente implementada no código Greenplum 6)

Três, PL / Container

PL / Container é uma linguagem de programação procedural que executa várias UDFs de linguagem de programação em contêineres Docker. O usuário define o nome da configuração no código UDF. O nome da configuração corresponde à imagem em execução do contêiner do Docker, ao programa de análise (R, Python) que é executado depois que o contêiner é iniciado e à configuração do tempo de execução do contêiner. As linguagens de programação analítica atualmente suportadas são Python e R. Funcionalmente, os programas Python e R em PL / Container são compatíveis com muitas funções internas PL / Python e PL / R. O número da versão atual do PL / Container é 1.2.0. PL / Container foi desenvolvido e com código aberto pela Pivotal, e agora suporta CentOS 6, CentOS 7, RedHat Enterprise Linux 6 ou Red Hat Enterprise Linux 7. O ponto de partida para a implementação de PL / Container é resolver o problema de que PL / Python e PL / R não são uma linguagem de programação procedural confiável. Como não é fácil criar uma área restrita para executar código R ou Python, consideramos o uso de tecnologia de contêiner para construir uma área restrita no nível do sistema. Além disso, o PL / Container tem algumas outras vantagens, que apresentaremos mais tarde. PL / Container atualmente oferece suporte a Greenplum e PostgreSQL.

3.1 Processo de execução do programa PL / Container

Como pode ser visto na figura, diferentes linguagens correspondem a diferentes procedimentos de processamento. No estágio inicial, o executor extrai os itens de configuração do ambiente operacional analisando o código UDF e, em seguida, inicia o contêiner correspondente por meio da API Docker. Depois que o contêiner é iniciado, o executor e o programa no contêiner passam o handshake PING / PONG, estabelecem uma conexão por meio do IPC ou da rede e se comunicam usando um protocolo privado. Para o código relacionado à linguagem (Python ou R), o programa back-end chama o interpretador da linguagem correspondente para interpretar e executar e, finalmente, passa o resultado de volta para o executor. Se necessário (por exemplo, para chamadas SPI, o programa de back-end não pode lidar com isso neste momento), o programa de back-end enviará a solicitação de volta ao executor para execução e, em seguida, enviará o resultado de volta para o back-end programa de processamento. Preste atenção ao ciclo de vida de todo o contêiner. O contêiner é iniciado quando o UDF de PL / Container é executado pela primeira vez, e então é reutilizado após estabelecer uma conexão com o executor, até que a sessão saia (o processo do executor sai) ou o UDF sai ativamente (o código de saída é ativamente chamado na função do usuário). Isso melhorará muito o desempenho, porque iniciar e parar um contêiner exige um determinado preço. Em outras palavras, as etapas 8 a 10 na figura serão repetidas até que a sessão seja encerrada.

3.2 Vantagens do PL / Container

1) PL / Container é uma linguagem de programação procedural segura: Como o código Python ou R é executado em um contêiner Docker, os usuários não podem acessar ou criar arquivos no host Greenplum, nem podem acessar diretamente o Banco de Dados Greenplum., Usuários comuns do banco de dados podem com segurança criar e executar funções baseadas em R ou Python.

2) Os erros do código do usuário podem ser bem isolados: ao executar UDFs nessas linguagens de programação procedurais, o programa pode travar devido a bugs no código do usuário ou porque algumas bibliotecas são instáveis. Às vezes, o cluster do banco de dados Greenplum precisa ser reiniciado para evitar corrupção de dados. Se colocarmos o código Python ou R do usuário em um contêiner separado para ser executado, mesmo se o programa que executa o código Python ou R falhar, a consulta SQL apenas relatará a falha, sem afetar o cluster e outras sessões no cluster.

3) Suporte a várias versões do Python / R: Não é conveniente para o PL / Python e o PL / R implantar várias versões diferentes em uma máquina ao mesmo tempo. Mas para PL / Container, podemos criar imagens diferentes para versões diferentes para completar facilmente o suporte a várias versões.

4) Controle de recursos: Greenplum suporta a função Grupo de recursos para realizar o controle de recursos (memória e CPU), mas o código da linguagem de programação procedural em si não pode ser tocado para a granularidade do controle de memória. Porque o controle de memória no Greenplum é realizado por meio da função de alocação de memória embutida (incluindo estatísticas), e o gerenciamento de memória na linguagem de programação procedural é geralmente realizado pela própria linguagem, o que não é percebido pelo kernel Greenplum. PL / Container separa a parte do executor do banco de dados e a parte do código de interpretação da linguagem de programação procedural. Podemos controlar facilmente o uso de recursos pela linguagem de programação procedural por meio do controle de recursos do Docker.

5) Fácil de estender: uma extensão está no nível do idioma. Greenplum tentou extrair os códigos comuns de diferentes idiomas. No momento, se adicionarmos suporte para um idioma, podemos nos concentrar mais no código relevante do próprio idioma . Outra extensão é o nível de back-end. Embora o código PL / Container atualmente suporte apenas containers Docker, sua implementação abstrai a API de back-end, tornando mais fácil para PL / Container suportar diferentes interfaces. Por exemplo, você pode escrever um back-end que não requer um contêiner, mas precisa apenas de um processo separado para interpretar funções de linguagem de programação procedimental (isso perde a segurança, mas pode isolar erros de código do usuário); ou implementar um sistema operacional em nuvem baseado em contêiner No backend, o controle de gerenciamento de recursos será outra situação neste momento.

Quatro, apêndice

Leitura adicional

  • ❏https: //gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_python.html
  • ❏https: //gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_r.html
  • ❏http: //www.joeconway.com/plr.html
  • ❏https: //gpdb.docs.pivotal.io/5190/ref_guide/extensions/pl_container.html

 

Acho que você gosta

Origin blog.csdn.net/MyySophia/article/details/113835841
Recomendado
Clasificación