No DataWorks, é possível criar um nó E-MapReduce (EMR) MapReduce (MR) para dividir grandes conjuntos de dados em tarefas de mapa paralelas, o que melhora significativamente a eficiência do processamento de dados. Este tópico apresenta um exemplo de desenvolvimento e configuração de um job EMR MR que lê um arquivo de texto do Object Storage Service (OSS) e conta as palavras contidas nele.
Pré-requisitos
Crie um cluster Alibaba Cloud EMR e registre-o no DataWorks. Para mais informações, consulte New Data Studio: Attach an EMR compute resource.
-
(Opcional, para usuários RAM) O usuário do Resource Access Management (RAM) responsável pelo desenvolvimento da tarefa deve ser adicionado ao workspace e receber a função Development ou Workspace Administrator (esta função inclui permissões amplas e deve ser concedida com cautela). Para mais informações, consulte Add workspace members.
Se você estiver usando uma conta raiz, pule esta etapa.
Para acompanhar o exemplo deste tópico, crie um bucket no Object Storage Service (OSS). Para mais informações, consulte Create buckets.
Limitações
A execução deste tipo de nó é suportada 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 primeiro o EMR-HOOK no cluster. Para mais informações, consulte Configure Hive EMR-HOOK.
NotaSem a configuração do EMR-HOOK no cluster, o DataWorks não consegue exibir metadados em tempo real, gerar logs de auditoria, mostrar linhagem de dados ou executar tarefas de governança de dados relacionadas ao EMR.
Preparar dados iniciais e pacote JAR
Preparar os dados iniciais
Crie um arquivo de amostra chamado input01.txt com o seguinte conteúdo.
hadoop emr hadoop dw
hive hadoop
dw emr
Fazer upload do arquivo de dados iniciais
Faça login no OSS console. No painel de navegação à esquerda, clique em Buckets.
-
Clique no nome do bucket desejado para abrir a página File Management.
Este exemplo utiliza um bucket chamado
onaliyun-bucket-2. -
Clique em Create Directory para criar diretórios destinados aos dados iniciais e ao recurso JAR.
Defina Directory Name como
emr/datas/wordcount02/inputspara criar o diretório dos dados iniciais.Defina Directory Name como
emr/jarspara criar o diretório do recurso JAR.
-
Faça o upload do arquivo de dados iniciais para seu respectivo diretório.
Acesse o caminho
/emr/datas/wordcount02/inputse clique em Upload File.Na área Files to Upload, clique em Select Files, adicione o arquivo
input01.txtao bucket e, em seguida, clique em Upload File.
Criar job MapReduce e pacote JAR
-
Abra seu projeto no IntelliJ IDEA e adicione as seguintes dependências ao arquivo pom.xml.
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-common</artifactId> <version>2.8.5</version> <!--Use version 2.8.5, which is the version used by EMR MR.--> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.8.5</version> </dependency> -
Para ler e gravar em arquivos do OSS via MapReduce, configure os seguintes parâmetros.
ImportanteAviso de risco: O par de AccessKey da sua conta Alibaba Cloud concede acesso total a todas as operações de API. A exposição do seu AccessKey ID e AccessKey Secret compromete a segurança de todos os recursos sob sua conta. Recomendamos fortemente o uso de um usuário RAM para chamadas de API e operações diárias. Não codifique rigidamente (hardcode) seu AccessKey ID ou AccessKey Secret no código do projeto ou em qualquer outro local publicamente acessível. O código abaixo serve apenas para fins de demonstração. 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 público do OSS. O endpoint depende da região onde seu cluster EMR está localizado. O bucket do OSS e o cluster devem estar na mesma região. Para mais informações, consulte Regions and endpoints.
O código Java a seguir é uma versão modificada do exemplo oficial Hadoop WordCount. Ele inclui configurações para o AccessKey ID e AccessKey Secret, concedendo ao job permissão para acessar arquivos no OSS.
Após editar o código Java, empacote-o em um arquivo JAR. Este exemplo gera um arquivo JAR chamado
onaliyun_mr_wordcount-1.0-SNAPSHOT.jar.
Procedimento
-
Na aba de configuração do nó EMR MR, desenvolva a tarefa conforme descrito abaixo:
Desenvolver a tarefa EMR MR
Escolha um dos métodos a seguir conforme sua necessidade:
Método 1: Fazer upload e referenciar JAR
Também é possível fazer upload de um recurso da máquina local para o DataStudio e referenciá-lo em um nó. Caso o recurso seja muito grande para upload via console DataWorks, armazene-o no HDFS e referencie-o no código.
-
Crie um recurso JAR.
Para mais informações, consulte Manage resources. Armazene o pacote JAR da etapa Preparar dados iniciais e pacote JAR no diretório
emr/jars. Clique em Click Upload.Configure os parâmetros Storage Path, Data Sources e Resource Group.
Clique em Save.

-
Referencie o recurso JAR.
Abra o nó EMR MR para acessar sua aba de configuração.
No painel Resource Management à esquerda, localize o recurso que deseja referenciar. Neste exemplo, o recurso é
onaliyun_mr_wordcount-1.0-SNAPSHOT.jar. Clique com o botão direito no recurso e selecione Insert Resource Path.-
Após referenciar o recurso, uma instrução de referência aparecerá na aba de configuração do nó EMR MR, indicando sucesso na operação. Execute o comando abaixo, substituindo o pacote de recursos, o nome do bucket e o caminho 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 comentários.
Método 2: Referenciar recurso OSS
Utilize o método OSS REF para referenciar diretamente um recurso do OSS. Durante a execução do nó, o DataWorks baixa automaticamente o recurso OSS referenciado para o ambiente local. Essa abordagem é comum em cenários onde uma tarefa EMR depende de um arquivo JAR ou script.
-
Faça o upload do recurso JAR.
Após desenvolver o código, faça login no OSS console. No painel de navegação à esquerda, clique em Buckets.
-
Clique no nome do bucket desejado para abrir a página File Management.
Este exemplo utiliza um bucket chamado
onaliyun-bucket-2. -
Faça o upload do recurso JAR para seu diretório.
Acesse o diretório
emr/jars. Clique em Upload File. Na área Files to Upload, clique em Select Files, adicione o arquivoonaliyun_mr_wordcount-1.0-SNAPSHOT.jare, em seguida, clique em Upload File.
-
Referencie o recurso JAR.
Na aba de configuração do nó EMR MR, escreva o código para referenciar o recurso JAR.
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 comando segue o formato:
hadoop jar <Caminho do JAR a ser executado> <Nome completo da classe principal> <Diretório do arquivo de entrada> <Diretório de saída>.A tabela a seguir descreve os parâmetros do caminho do JAR.
Parâmetro
Descrição
Caminho do JAR a ser executado
O formato é
ossref://{endpoint}/{bucket}/{object}-
Endpoint: O endpoint público do OSS. Se este parâmetro for deixado em branco, só será possível referenciar recursos de um bucket na mesma região do cluster EMR.
-
Bucket: Um contêiner usado pelo OSS para armazenar objetos. Cada Bucket possui um nome único. Faça login no OSS console para visualizar todos os Buckets da sua conta.
-
object: Um objeto específico, que pode ser um arquivo ou um caminho, armazenado em um bucket.
-
(Opcional) Configurar parâmetros avançados
No painel à direita, clique na aba Scheduling Settings. Configure os seguintes parâmetros na seção .
NotaOs parâmetros avançados disponíveis variam conforme o tipo de cluster EMR, conforme mostrado nas tabelas a seguir.
Configure propriedades adicionais do Spark open-source na aba Scheduling Settings, dentro da seção .
Cluster DataLake e personalizado: EMR on ECS
Parâmetro
Descrição
queue
A fila onde os jobs são submetidos. O valor padrão é default. Para mais informações sobre o EMR YARN, consulte Basic queue configurations.
priority
A prioridade do job. O valor padrão é 1.
FLOW_SKIP_SQL_ANALYZE
O modo de execução para instruções SQL. Valores válidos:
-
true: Executa múltiplas instruções SQL simultaneamente. -
false(Padrão): Executa uma instrução SQL por vez.
NotaEste parâmetro é suportado apenas para execuções de teste no ambiente de desenvolvimento de dados.
Outros
Também é possível adicionar parâmetros personalizados de job MR na seção de configuração avançada. Ao enviar o código, o DataWorks adiciona automaticamente os novos parâmetros ao comando usando a instrução
-D key=value.Cluster Hadoop: EMR on ECS
Parâmetro
Descrição
queue
A fila onde os jobs são submetidos. O valor padrão é default. Para mais informações sobre o EMR YARN, consulte Basic queue configurations.
priority
A prioridade do job. O valor padrão é 1.
USE_GATEWAY
Define se os jobs deste nó serão submetidos através de um cluster gateway. Valores válidos:
-
true: Submete jobs através de um cluster gateway. -
false(Padrão): Não submete jobs através de um cluster gateway. Por padrão, os jobs são submetidos ao nó mestre.
NotaSe você definir este parâmetro como
true, mas o cluster do nó não estiver associado a um cluster gateway, a submissão do job EMR falhará.Executar a tarefa
-
Em Run Configuration, dentro de Compute Resource, configure Compute Resource e Resource Group.
NotaEspecifique as CUs for Scheduling conforme as necessidades da sua tarefa. O valor padrão é
0.25.Para acessar uma fonte de dados pela internet pública ou em uma Virtual Private Cloud (VPC), utilize um grupo de recursos para agendamento que tenha conectividade com essa fonte. Para mais informações, consulte Network connectivity solutions.
Na caixa de diálogo de parâmetros da barra de ferramentas, selecione a fonte de dados criada e clique em Run.
-
Caso precise executar a tarefa do nó periodicamente, configure suas propriedades de agendamento. Para mais informações, consulte Configure scheduling properties for a node.
Após configurar o nó, faça o deploy dele. Para mais informações, consulte Deploy nodes.
Depois que a tarefa for implantada, visualize seu status no Operation Center. Para mais informações, consulte Introduction to Operation Center.
Visualizar os resultados
Faça login no OSS console. O arquivo de saída estará disponível no diretório de destino dentro do seu bucket. Neste exemplo, o caminho é emr/datas/wordcount02/outputs.

-
Leia os resultados estatísticos no DataWorks.
Crie um nó EMR Hive. Para mais informações, consulte Create a node for a scheduled workflow.
-
No nó EMR Hive, crie uma tabela externa do Hive mapeada para os dados no OSS e consulte os dados da tabela. Veja abaixo um exemplo de código:
CREATE EXTERNAL TABLE IF NOT EXISTS wordcount02_result_tb ( `word` STRING COMMENT 'Word', `count` STRING COMMENT 'Count' ) ROW FORMAT delimited fields terminated by '\t' location 'oss://onaliyun-bucket-2/emr/datas/wordcount02/outputs/'; SELECT * FROM wordcount02_result_tb;A figura a seguir mostra o resultado.
