Um nó E-MapReduce (EMR) MR divide um grande conjunto de dados em várias tarefas de mapa paralelas para acelerar a computação em larga escala. Este tópico utiliza um exemplo de WordCount que lê texto do Object Storage Service (OSS) e conta palavras para demonstrar o fluxo de trabalho de desenvolvimento de um nó EMR MR.
Pré-requisitos
Registre um cluster EMR no DataWorks. Para mais informações, consulte DataStudio (old version): Bind an EMR compute resource.
(Opcional, para usuários RAM) O usuário RAM responsável pelo desenvolvimento da tarefa deve ser membro do workspace e ter a função Development ou Workspace Administrator. A função Workspace Administrator concede permissões amplas; portanto, atribua-a com cautela. Para mais informações, consulte Add members to a workspace.
Adquira e configure um grupo de recursos serverless, incluindo a vinculação ao workspace e as definições de rede. Para mais informações, consulte Use a serverless resource group.
Crie um workflow no Data Development (DataStudio). Para mais informações, consulte Create a workflow.
Se o job do nó EMR MR precisar referenciar código open-source, carregue primeiro esse código como recurso em um nó de recurso EMR JAR. Para mais informações, consulte Create and use EMR resources.
Se o job do nó EMR MR exigir uma função definida pelo usuário (UDF), carregue a UDF como recurso em um nó de recurso EMR JAR e, em seguida, crie e registre a função. Para mais informações, consulte Create an EMR function.
Para executar o exemplo de desenvolvimento de job deste tópico, crie previamente um bucket no OSS. Para mais informações, consulte Create a bucket in the console.
Limitações
Este tipo de tarefa executa apenas em um serverless resource group (recomendado) ou em um grupo de recursos exclusivo para agendamento.
Para gerenciar metadados de um cluster DataLake ou personalizado no DataWorks, configure o EMR-HOOK no cluster antes de prosseguir. Sem o EMR-HOOK, o DataWorks não exibe metadados em tempo real, não gera logs de auditoria, não mostra linhagem de dados nem realiza tarefas de governança relacionadas ao EMR. Para mais detalhes sobre como configurar o EMR-HOOK, consulte Configure EMR-HOOK for Hive.
Preparar os dados de amostra e o pacote JAR
Preparar os dados de amostra
Crie um arquivo de amostra chamado input01.txt com o seguinte conteúdo:
hadoop emr hadoop dw
hive hadoop
dw emr
Carregar o arquivo de dados de amostra
Faça login no console do OSS. No painel de navegação à esquerda, clique em Buckets.
-
Clique no nome do bucket desejado para abrir a página File Management.
Este tópico usa como exemplo um bucket chamado onaliyun-bucket-2.
-
Clique em New Directory para criar diretórios para os dados de amostra e os recursos JAR.
Defina Directory Name como emr/datas/wordcount02/inputs para criar o diretório dos dados de amostra.
Defina Directory Name como emr/jars para criar o diretório dos recursos JAR.
-
Carregue o arquivo de dados de amostra no diretório de dados.
Acesse o caminho /emr/datas/wordcount02/inputs e clique em Upload File.
Na área Files to Upload, clique em Select Files, adicione o arquivo input01.txt ao bucket e clique em Upload File.
Criar um pacote JAR MapReduce
-
Abra seu projeto no IntelliJ IDEA e adicione as seguintes dependências POM:
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-common</artifactId> <version>2.8.5</version> <!-- EMR MR uses version 2.8.5. --> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.8.5</version> </dependency> -
Para ler e gravar arquivos do OSS no MapReduce, configure os parâmetros abaixo.
ImportanteAviso de risco: A AccessKey da sua conta Alibaba Cloud tem acesso total a todas as APIs. Recomendamos o uso de um usuário RAM para acesso à API e operações diárias de O&M. Não armazene seu AccessKey ID e AccessKey Secret no código do projeto ou em locais onde possam ficar expostos. Uma AccessKey vazada pode comprometer todos os recursos da sua conta. O exemplo de código a seguir serve apenas como referência. Mantenha suas informações de AccessKey seguras.
conf.set("fs.oss.accessKeyId", "${accessKeyId}"); conf.set("fs.oss.accessKeySecret", "${accessKeySecret}"); conf.set("fs.oss.endpoint","${endpoint}");A tabela a seguir descreve os parâmetros.
${accessKeyId}: O AccessKey ID da sua conta Alibaba Cloud.${accessKeySecret}: O AccessKey secret da sua conta Alibaba Cloud.${endpoint}: O endpoint do OSS. O bucket do OSS deve estar na mesma região do cluster EMR, e essa região determina o endpoint. Para mais informações, consulte Regions and endpoints.
O código Java a seguir modifica o exemplo WordCount do site oficial do Hadoop ao adicionar o AccessKey ID e o AccessKey secret para conceder ao job permissão de acesso ao arquivo no OSS.
-
Empacote o código em um arquivo JAR.
Após editar e salvar o código Java, empacote-o em um arquivo JAR. Neste exemplo, o pacote JAR recebe o nome onaliyun_mr_wordcount-1.0-SNAPSHOT.jar.
Etapa 1: Criar um nó EMR MR
-
Faça login no console do DataWorks. Na região desejada, clique em no painel de navegação à esquerda. Selecione um workspace na lista suspensa e clique em Go to Data Development.
-
Crie um nó EMR MR.
-
Clique com o botão direito no workflow desejado e escolha .
NotaAlternativamente, passe o ponteiro sobre o ícone Create e escolha .
-
Na caixa de diálogo Create Node, insira um Name e selecione uma Engine Instance, um Node Type e um Path. Clique em Confirm para abrir o editor do nó EMR MR.
NotaOs nomes dos nós podem conter letras, dígitos, sublinhados (_) e pontos (.).
-
Etapa 2: Desenvolver a tarefa EMR MR
No editor do nó EMR MR, clique duas vezes no nó para abrir a página de desenvolvimento da tarefa. Escolha uma das opções abaixo conforme o cenário:
(Recomendado) Carregue primeiro os recursos da máquina local para o DataStudio e depois referencie-os. Para mais informações, consulte Option 1: Upload and reference a resource.
Referencie recursos do OSS usando o método OSS REF. Para mais informações, consulte Option 2: Use OSS REF.
Opção 1: Carregar e referenciar um recurso
Carregue os recursos da máquina local para o DataStudio e referencie-os no nó. Se um recurso for muito grande para carregar via console, armazene-o no HDFS e referencie-o diretamente no código.
-
Crie um recurso EMR JAR.
Para mais informações, consulte Create and use an EMR resource. Neste exemplo, o pacote JAR gerado na seção Preparar os dados de amostra e o pacote JAR está armazenado no diretório emr/jars. Ao usar este recurso pela primeira vez, clique em Authorize e, em seguida, clique em Click Upload para carregar o recurso JAR. Na árvore de navegação do workflow à esquerda, clique com o botão direito em Resource para abrir a caixa de diálogo Create Resource. Defina Engine Type como EMR e Resource Type como EMR JAR. Em Storage Path, selecione One-click authorization for OSS. Carregue o arquivo, defina seu Name como
onaliyun_mr_wordcount-1.0-SNAPSHOT.jare clique em Create. -
Referencie o recurso EMR JAR.
Abra o nó EMR MR criado e acesse o editor de código.
Na pasta , localize o recurso que deseja referenciar, como
onaliyun_mr_wordcount-1.0-SNAPSHOT.jarneste exemplo. Clique com o botão direito no recurso e escolha Insert Resource Path.-
Ao selecionar a referência, uma mensagem de sucesso aparece na página de edição de código do nó EMR MR, indicando que o recurso de código foi referenciado com êxito. Em seguida, execute o comando abaixo. Os pacotes de recursos, nomes de buckets e informações de caminho no comando são exemplos; substitua-os pelas suas informações reais.
##@resource_reference{"onaliyun_mr_wordcount-1.0-SNAPSHOT.jar"} onaliyun_mr_wordcount-1.0-SNAPSHOT.jar cn.apache.hadoop.onaliyun.examples.EmrWordCount oss://onaliyun-bucket-2/emr/datas/wordcount02/inputs oss://onaliyun-bucket-2/emr/datas/wordcount02/outputsNotaO editor de código para nós EMR MR não suporta instruções de comentário.
Opção 2: Usar OSS REF
O método OSS REF referencia diretamente um recurso do OSS. Quando o nó é executado, o DataWorks carrega automaticamente o recurso do OSS especificado para o job. Essa abordagem é adequada quando uma tarefa EMR depende de um JAR ou script.
-
Carregue o recurso JAR.
Após desenvolver o código, faça login no console do OSS. No painel de navegação à esquerda da sua região, clique em Buckets.
-
Clique no nome do bucket desejado para abrir a página File Management.
Este tópico usa como exemplo um bucket chamado
onaliyun-bucket-2. -
Carregue o recurso JAR no diretório de armazenamento.
Acesse o diretório
emr/jarse clique em Upload File. Na área Files to Upload, clique em Select Files, adicione o arquivoonaliyun_mr_wordcount-1.0-SNAPSHOT.jarao bucket e clique em Upload File.
-
Referencie o recurso JAR.
Edite o código para referenciar o recurso JAR na página de configuração do nó EMR MR.
hadoop jar ossref://onaliyun-bucket-2/emr/jars/onaliyun_mr_wordcount-1.0-SNAPSHOT.jar cn.apache.hadoop.onaliyun.examples.EmrWordCount oss://onaliyun-bucket-2/emr/datas/wordcount02/inputs oss://onaliyun-bucket-2/emr/datas/wordcount02/outputsNotaO formato do comando é:
hadoop jar <path_of_the_JAR_file_to_run> <fully_qualified_name_of_the_main_class> <input_directory> <output_directory>.A tabela a seguir descreve o parâmetro referente ao caminho do arquivo JAR.
Parâmetro
Descrição
Caminho do arquivo JAR a ser executado
O formato é
ossref://{endpoint}/{bucket}/{object}.-
Endpoint: O endpoint do OSS. Este parâmetro é opcional. Se omitido, o sistema assume a região do seu cluster EMR por padrão, permitindo acesso apenas a recursos do OSS dentro dessa mesma região.
-
Bucket: Um contêiner para armazenar objetos no OSS. Cada bucket possui um nome exclusivo. Faça login no console do OSS para visualizar todos os buckets da sua conta.
-
object: Um objeto específico, como um nome de arquivo ou caminho, armazenado em um bucket.
-
(Opcional) Configurar parâmetros avançados
Configure propriedades específicas do nó na aba Advanced Settings. Para mais detalhes sobre as propriedades, consulte Spark Configuration. Os parâmetros avançados disponíveis variam conforme o tipo de cluster EMR, conforme mostrado nas tabelas a seguir.
Cluster DataLake e personalizado
|
Parâmetro avançado |
Descrição |
|
queue |
A fila de agendamento à qual o job é submetido. O valor padrão é |
|
priority |
A prioridade do job. O valor padrão é 1. |
|
Other |
É possível adicionar parâmetros personalizados para tarefas MR na aba Advanced Settings. Ao enviar o código, o DataWorks anexa automaticamente esses parâmetros ao comando no formato |
Cluster Hadoop
|
Parâmetro avançado |
Descrição |
|
queue |
A fila de agendamento à qual o job é submetido. O valor padrão é |
|
priority |
A prioridade do job. O valor padrão é 1. |
|
USE_GATEWAY |
Define se o job será submetido por meio de um cluster gateway.
Nota
Se o cluster onde o nó reside não estiver associado a um cluster gateway e você definir manualmente este parâmetro como |
Executar a tarefa
-
Na barra de ferramentas, clique no ícone
. Na caixa de diálogo Parameter, selecione o grupo de recursos de agendamento e clique em Running.NotaPara acessar um recurso de computação via rede pública ou VPC, utilize um grupo de recursos de agendamento aprovado no teste de conectividade com o recurso de computação. Para mais informações, consulte Network connectivity solutions.
Caso precise alterar o grupo de recursos para tarefas subsequentes, clique no ícone Run with Parameters
e selecione o grupo de recursos desejado.
Clique no ícone
para salvar o código.-
(Opcional) Realize testes de fumaça (smoke testing).
Para executar testes de fumaça no ambiente de desenvolvimento, realize o procedimento antes ou depois de enviar o nó. Para mais informações, consulte Perform smoke testing.
Etapa 3: Configurar propriedades de agendamento
Para que o sistema execute periodicamente uma tarefa no nó, clique em Properties no painel de navegação à direita, na aba de configuração do nó, para definir as propriedades de agendamento da tarefa conforme suas necessidades de negócio. Para mais informações, consulte Overview.
É obrigatório configurar os parâmetros Rerun e Parent Nodes na aba Properties antes de enviar a tarefa.
Etapa 4: Implantar a tarefa
Após configurar uma tarefa em um nó, envie e implante a tarefa. Depois de enviada e implantada, o sistema executa a tarefa regularmente com base nas configurações de agendamento.
Clique no ícone
na barra de ferramentas superior para salvar a tarefa.-
Clique no ícone
na barra de ferramentas superior para enviar a tarefa.Na caixa de diálogo Submit, configure o parâmetro Change description. Em seguida, decida se deseja revisar o código da tarefa após o envio, conforme suas necessidades de negócio.
NotaÉ obrigatório configurar os parâmetros Rerun e Parent Nodes na aba Properties antes de enviar a tarefa.
Utilize o recurso de revisão de código para garantir a qualidade do código das tarefas e evitar erros de execução causados por código inválido. Se o recurso de revisão de código estiver ativado, o código da tarefa enviado só poderá ser implantado após aprovação na revisão. Para mais informações, consulte Code review.
Se você utilizar um workspace no modo padrão, implante a tarefa no ambiente de produção após enviá-la. Para implantar uma tarefa em um nó, clique em Deploy no canto superior direito da aba de configuração do nó. Para mais informações, consulte Deploy a node.
Mais operações
Depois de enviar e implantar a tarefa, ela será executada periodicamente conforme as configurações de agendamento. Clique em Operation Center no canto superior direito da aba de configuração do nó correspondente para acessar o Operation Center e visualizar o status de agendamento da tarefa. Para mais informações, consulte Manage scheduled tasks.
Visualizar os resultados
Faça login no console do OSS. Visualize a saída no diretório especificado do seu bucket. Caminho de exemplo: emr/datas/wordcount02/outputs. Após a conclusão do job wordcount02, um arquivo de sinalização _SUCCESS e vários arquivos de shard de resultado part-r-* são gerados no diretório
/emr/datas/wordcount02/outputs/no OSS, confirmando que o job produziu a saída com êxito.-
Leia as estatísticas no DataWorks.
Crie um nó EMR Hive. Para mais informações, consulte Create an EMR Hive node.
-
No nó EMR Hive, crie uma tabela externa do Hive sobre os dados no OSS. Veja abaixo um exemplo de código:
CREATE EXTERNAL TABLE IF NOT EXISTS wordcount02_result_tb ( `word` STRING COMMENT 'word', `cout` STRING COMMENT 'count' ) ROW FORMAT delimited fields terminated by '\t' location 'oss://onaliyun-bucket-2/emr/datas/wordcount02/outputs/'; SELECT * FROM wordcount02_result_tb;Após executar a consulta, a aba Results exibe as estatísticas de frequência de palavras:
dw(2),hadoop(3),emr(2) ehive(1).