Como migrar jobs do Hadoop no local para o Dataproc

Este guia descreve como mover os jobs do Apache Hadoop para o Google Cloud (Google Cloud) usando o Dataproc.

Este é o terceiro dos três guias que descrevem como migrar do Hadoop local:

Como executar jobs do Hadoop no Google Cloud

É possível usar o Dataproc para executar a maioria dos jobs do Hadoop no Google Cloud. A lista a seguir resume o procedimento básico:

  1. Atualize o job para apontar para os dados permanentes armazenados no Cloud Storage.

  2. Crie um cluster do Dataproc para executar o job. Esse tipo de cluster temporário de uso único é chamado de cluster efêmero.

  3. Envie o job para o cluster efêmero.

  4. Se quiser, monitore os registros de jobs usando o Cloud Logging ou o Cloud Storage. Os registros são capturados no Cloud Storage por padrão, usando o bucket de preparo que você especifica ao criar o cluster.

  5. Verifique a saída do job no Cloud Storage.

  6. Quando o job for concluído, exclua o cluster.

Jobs compatíveis

O Dataproc executa o Hadoop. Portanto, muitos tipos de jobs são compatíveis automaticamente. Quando você cria um cluster com o Dataproc, as seguintes tecnologias são configuradas por padrão:

  • Hadoop
  • Spark
  • Hive
  • Pig

O Dataproc fornece várias versões de imagens de máquina com versões diferentes do software de código aberto pré-instalado. É possível executar muitos jobs apenas com o software pré-configurado em uma imagem. Para alguns jobs, pode ser necessário instalar outros pacotes. O Dataproc fornece um mecanismo chamado ações de inicialização, que permite personalizar o software em execução nos nós do cluster. É possível usar ações de inicialização para criar scripts que são executados em cada nó quando ele é criado.

Como atualizar locais de dados (URIs)

Com o conector do Cloud Storage, pré-instalado nos nós do cluster do Dataproc, os jobs usam o Cloud Storage como um sistema de arquivos compatível com Hadoop (HCFS, na sigla em inglês). Armazene os dados no Cloud Storage para aproveitar o conector. Se você fizer isso, a única alteração necessária nos jobs será atualizar os URIs, substituindo hdfs:// por gs://.

Se você reorganizar os dados como parte da migração, anote todos os caminhos de origem e de destino para poder atualizar facilmente os jobs e trabalhar com a nova organização de dados.

É possível armazenar os dados no HDFS em clusters persistentes na nuvem, mas isso não é recomendado. Saiba mais sobre como migrar os dados neste guia.

Como configurar clusters para executar jobs

Na abordagem recomendada para execução dos jobs no Google Cloud, você cria clusters efêmeros quando necessário e os exclui quando os jobs são concluídos. Essa abordagem oferece muita flexibilidade na maneira como você configura os clusters. Você pode usar uma configuração diferente para cada job ou criar várias configurações de clusters padrão que atendam a grupos de jobs.

Veja as etapas básicas para criar clusters na documentação do Dataproc. O restante desta seção descreve algumas considerações importantes sobre configuração de cluster para ajudá-lo a decidir como proceder.

Como dimensionar o cluster

O primeiro passo para definir um novo cluster é decidir qual hardware virtual usar para ele. Pode ser difícil calcular a configuração perfeita do cluster, porque cada job tem necessidades e idiossincrasias específicas. Teste diferentes configurações para encontrar a certa para o job.

Quando você configura um cluster, precisa determinar no mínimo:

  • quantos nós usar;
  • o tipo de máquina virtual a ser usada como nó principal (mestre);
  • o tipo de máquina virtual a ser usada em worker nodes.

Os tipos de node são definidos pelo número de CPUs virtuais e pela quantidade de memória disponível. As definições correspondem aos tipos de máquina do Compute Engine. Geralmente, é possível localizar um tipo de node que corresponda à configuração de nodes locais de que você está migrando. Você pode usar essa equivalência como ponto de partida, configurando um cluster semelhante ao cluster local. A partir daí, a melhor abordagem é ajustar a configuração e monitorar o efeito na execução do job. Ao iniciar a otimização da configuração dos jobs, você começará a ter uma ideia de como lidar com outros jobs no sistema.

Lembre-se de que é possível escalonar o cluster conforme necessário, assim você não precisa ter a especificação perfeita definida desde o início.

Como escolher opções de disco principal

É possível especificar o tamanho do disco principal usado pelos nós de trabalho. As opções corretas para um cluster dependem dos tipos de jobs que você executará nele. Use o valor padrão e avalie os resultados, a menos que você saiba que os jobs têm demandas incomuns no uso do disco principal.

Se o job exigir muito disco e estiver sendo executado lentamente em nós individuais, será possível adicionar mais espaço no disco principal. Para jobs que exigem particularmente muito disco, especialmente aqueles com muitas operações individuais de leitura e gravação, você pode melhorar a operação com a adição de SSDs locais. Adicione SSDs suficientes para conter todo o espaço necessário para a execução local. Os diretórios de execução local estão espalhados em todos os SSDs que você adiciona.

Como usar worker nodes preemptivos

Você pode ter poder de processamento de baixo custo para jobs com a adição de worker nodes preemptivos ao cluster. Esses nodes usam máquinas virtuais preemptivas.

Pense na falta de confiabilidade inerente dos nós preemptivos antes de optar por usá-los. O Dataproc tenta lidar com a preempção sem problemas, mas os jobs poderão apresentar falha se perderem muitos nós. Use apenas nós preemptivos para jobs que sejam tolerantes a falhas ou que tenham prioridade baixa o suficiente para que algumas falhas de jobs não atrapalhem a empresa.

Se você decidir usar worker nodes preemptivos, pense na proporção de nodes normais para nodes preemptivos. Não existe uma fórmula universal para conseguir os melhores resultados, mas, geralmente, quanto mais nodes preemptivos forem usados em relação aos nodes padrão, maiores as chances de que o job não tenha nodes suficientes para concluir a tarefa. Você pode determinar a melhor proporção de nodes preemptivos e regulares para um job testando diferentes proporções e analisando os resultados.

Observe que SSDs não estão disponíveis em worker nodes preemptivos. Se você usar SSDs nos nodes dedicados, os worker nodes preemptivos usados corresponderão a todos os outros aspectos dos nodes dedicados, mas não terão SSDs disponíveis.

Como executar jobs

O Dataproc fornece várias interfaces que podem ser usadas para iniciar os jobs, todas elas descritas na documentação do produto. Esta seção descreve as opções e operações a serem consideradas ao executar os jobs do Hadoop no Google Cloud.

Como conseguir a saída do job

Os jobs executados no Dataproc costumam ter vários tipos de saída. O job pode gravar muitos tipos de saída diretamente. Por exemplo, em arquivos em um bucket do Cloud Storage ou em outro produto na nuvem, como o BigQuery. O Dataproc também coleta registros e a saída do console e os coloca no bucket de preparo do Cloud Storage associado ao cluster em que o job é executado.

Como usar jobs reinicializáveis

Quando você envia um job, é possível configurá-lo para reiniciar automaticamente caso haja problemas. Essa opção é útil para jobs que dependem de recursos ou circunstâncias altamente variáveis. Por exemplo, jobs que transmitem dados em canais potencialmente não confiáveis (como Internet pública) são especialmente propensos a falhas aleatórias por causa de erros de tempo limite e problemas de rede semelhantes. Execute jobs como reinicializáveis se puder imaginar situações em que o job falhe, mas seja executado com sucesso pouco tempo depois.

Como escalonar o cluster

O Dataproc facilita a adição ou remoção de nós do cluster a qualquer momento, inclusive durante a execução do job. A documentação do Dataproc contém instruções detalhadas para escalonamento do cluster. O escalonamento inclui a opção para nós com desativação otimizada. Com essa opção, os nodes que serão excluídos terão tempo para concluir o processamento em andamento.

Como gerenciar jobs ao longo do tempo

Lidar com jobs individuais geralmente não é uma tarefa complexa, mas um sistema Hadoop pode incluir dezenas ou centenas de jobs. Com o passar do tempo, o número de registros, arquivos de saída e outras informações associadas a cada job prolifera, o que pode dificultar a localização de uma informação individual. Veja a seguir algumas opções para facilitar o gerenciamento dos jobs para o futuro:

  • Use rótulos personalizados para identificar jobs, clusters e outros recursos. O uso de rótulos facilita o uso de um filtro para encontrar recursos posteriormente. O Dataproc é compatível com rótulos personalizados usando o sistema de rótulo padrão do Google Cloud. Portanto, quando você rotula um recurso, isso pode ajudar no gerenciamento dele em outros serviços do GCP.
  • Organize os buckets do Cloud Storage para manter diferentes tipos de jobs separados. Agrupar os dados em buckets que correspondam à sua estrutura de negócios ou às suas áreas funcionais também pode facilitar o gerenciamento de permissões.
  • Defina clusters para jobs individuais ou para grupos de jobs intimamente relacionados. É muito mais fácil atualizar a configuração dos clusters efêmeros se você usar cada configuração apenas para jobs com escopo definido.

A seguir