O Apache Spark é um mecanismo de análise de big data versátil, de alto desempenho e fácil de usar, que executa análises complexas em memória e cria aplicações de análise de dados em grande escala e com baixa latência. O DataWorks fornece nós EMR Spark para desenvolver tarefas Spark e implementar agendamentos periódicos. Este tópico explica como criar um nó EMR Spark e demonstra seus recursos com um exemplo detalhado.
Pré-requisitos
-
Para personalizar o ambiente do componente antes do desenvolvimento do nó, crie uma custom image com base na imagem oficial
dataworks_emr_base_task_pode use the image in DataStudio.Por exemplo, é possível substituir um pacote JAR do Spark ou depender de
libraries,filesouJAR packagesespecíficos ao criar uma imagem personalizada. É necessário registrar um cluster EMR no DataWorks. Para mais informações, consulte DataStudio (legacy version): Bind an EMR computing resource.
(Opcional) Se usar um usuário RAM para o desenvolvimento de tarefas, adicione-o ao workspace correspondente e atribua a função de 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, incluindo a vinculação ao workspace e as configurações de rede. Para mais informações, consulte Use a Serverless resource group.
Crie um fluxo de negócios. O DataStudio organiza as operações de desenvolvimento em fluxos de negócios, logo, não é possível criar um nó sem um. Para mais informações, consulte Create a business flow.
Se as tarefas de desenvolvimento exigirem um ambiente específico, use o recurso de imagem personalizada do DataWorks para criar uma imagem que contenha os componentes necessários à execução da tarefa. Para mais informações, consulte Custom image.
Limitações
Execute esse tipo de tarefa apenas em um serverless resource group (recomendado) ou em um grupo de recursos exclusivo para agendamento. Se precisar usar uma imagem no desenvolvimento de dados, use um grupo de recursos serverless.
Em clusters DataLake ou personalizados, configure o EMR-HOOK no cluster para gerenciar metadados no DataWorks. Sem o EMR-HOOK configurado, não é possível visualizar metadados em tempo real, gerar logs de auditoria, exibir linhagem de dados ou executar tarefas de governança relacionadas ao EMR no DataWorks. Para mais informações, consulte Configure EMR-HOOK for Spark SQL.
Os clusters EMR Serverless Spark suportam a visualização da linhagem de dados, ao passo que os clusters EMR on ACK Spark não oferecem esse suporte.
Os clusters EMR on ACK Spark e EMR Serverless Spark aceitam a referência a recursos OSS com
ossrefe o upload de recursos para o OSS, mas não aceitam o upload de recursos para o HDFS.Os clusters DataLake e personalizados aceitam a referência a recursos OSS com
ossref, o upload de recursos para o OSS e o upload de recursos para o HDFS.
Observações
Se o controle de acesso do Ranger para o Spark estiver ativado no cluster EMR associado ao workspace atual:
As tarefas Spark com a imagem padrão aceitam esse recurso automaticamente.
Para executar uma tarefa Spark com uma imagem personalizada, envie um ticket ao suporte técnico e solicite a atualização da imagem.
Preparação: Desenvolver um JAR de job Spark
Antes de agendar um job EMR Spark com o DataWorks, desenvolva o job no EMR, compile-o e gere um pacote JAR. Para mais informações sobre o desenvolvimento de jobs EMR Spark, consulte Spark overview.
Em seguida, faça o upload do pacote JAR para o DataWorks e agende o job EMR Spark periodicamente.
I. Crie um nó EMR Spark
-
Acesse o console do DataWorks. Na região de destino, 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 Spark.
-
Clique com o botão direito no fluxo de negócios de destino e escolha .
NotaTambém é possível passar o mouse sobre Create e escolher .
-
Na caixa de diálogo Create Node, insira um Name, selecione a Engine Instance, o Node Type e o Path e clique em Confirm para acessar o editor de nós EMR Spark.
NotaO nome do nó pode conter letras maiúsculas, minúsculas, caracteres chineses, dígitos, sublinhados (
_) e pontos (.).
-
2. Desenvolva um job Spark
Para abrir o editor de código, clique duas vezes no nó EMR Spark e selecione um método com base no seu cenário.
(Recomendado) Faça o upload de recursos da máquina local para o DataStudio e referencie-os. Para mais informações, consulte Method 1: Upload resources before you reference EMR JAR resources.
Referencie um recurso OSS pelo método OSS REF. Para mais informações, consulte Method 2: Directly reference an OSS resource.
Método 1: Faça o upload e referencie um recurso JAR do EMR
No DataWorks, faça o upload de um recurso do computador local para o DataStudio e referencie-o. Após compilar um job EMR Spark em um pacote JAR, selecione um método de armazenamento com base no tamanho do arquivo.
Faça o upload e envie um pacote JAR como recurso EMR do DataWorks ou armazene-o no HDFS de um cluster EMR. Os clusters EMR on ACK Spark e EMR Serverless Spark não aceitam uploads de recursos para o HDFS.
Pacote JAR menor que 500 MB
-
Crie um recurso JAR do EMR.
Este método permite o gerenciamento visual de recursos no console do DataWorks. Após criar o recurso, envie-o. Para mais informações, consulte Create and use EMR resources.
Na caixa de diálogo Create Resource, defina Engine Type como EMR e selecione uma Engine Instance. Defina Resource Type como EMR JAR, especifique o Path e selecione Upload as EMR Resource. Escolha um tipo de Storage Path (OSS One-click Authorization ou HDFS). Defina File Source como Local e clique em Upload para enviar o arquivo. Especifique um Name para o recurso, que deve terminar com
.jar, e clique em Create.NotaAo criar um recurso EMR para armazenamento no OSS pela primeira vez, autorize o acesso conforme solicitado.
-
Referencie o recurso JAR do EMR.
Clique duas vezes no nó EMR Spark para abrir o editor de código.
Na árvore de navegação à esquerda, escolha . Encontre o recurso JAR do EMR, clique com o botão direito nele e selecione Insert Resource Path.
-
Após a referência, o sistema adiciona automaticamente um trecho de código ao editor do nó. O exemplo a seguir ilustra esse trecho.
##@resource_reference{"spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar"} spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jarA presença desse trecho indica a referência ao recurso. No código anterior, spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar é o nome do recurso JAR do EMR enviado.
-
Modifique o código do nó EMR Spark e adicione um comando spark-submit, conforme o exemplo a seguir.
NotaO editor de código para nós EMR Spark não aceita comentários. Modifique o código do job com base no exemplo a seguir e não adicione comentários; caso contrário, ocorrerá um erro durante a execução do nó.
##@resource_reference{"spark-examples_2.11-2.4.0.jar"} spark-submit --class org.apache.spark.examples.SparkPi --master yarn spark-examples_2.11-2.4.0.jar 100A tabela a seguir descreve os parâmetros.
org.apache.spark.examples.SparkPi: a classe principal do job no pacote JAR compilado.
spark-examples_2.11-2.4.0.jar: o nome do recurso JAR do EMR enviado.
-
Mantenha os demais parâmetros como no exemplo acima ou execute o comando a seguir para visualizar a ajuda do
spark submite modifique-o conforme necessário.NotaPara usar parâmetros simplificados do comando
spark-submitem um nó Spark, adicione-os ao código. Exemplo:--executor-memory 2G.Os nós Spark aceitam o envio de jobs apenas no modo de cluster YARN.
Para jobs enviados com o comando
spark-submit, defina o parâmetro do modo de implantação como cluster, e não client.
spark-submit --helpspark-submit --help Process Output>>> Process Output>>> Options: Process Output>>> --master MASTER_URL spark://host:port, mesos://host:port, yarn, Process Output>>> k8s://https://host:port, or local (Default: local[*]). Process Output>>> --deploy-mode DEPLOY_MODE Whether to launch the driver program locally ("client") or Process Output>>> on one of the worker machines inside the cluster ("cluster") Process Output>>> (Default: client). Process Output>>> --class CLASS_NAME Your application's main class (for Java / Scala apps). Process Output>>> --name NAME A name of your application. Process Output>>> --jars JARS Comma-separated list of jars to include on the driver Process Output>>> and executor classpaths. Process Output>>> --packages Comma-separated list of maven coordinates of jars to include Process Output>>> on the driver and executor classpaths. Will search the local Process Output>>> maven repo, then maven central and any additional remote Process Output>>> repositories given by --repositories. The format for the Process Output>>> coordinates should be groupId:artifactId:version. Process Output>>> --exclude-packages Comma-separated list of groupId:artifactId, to exclude while Process Output>>> resolving the dependencies provided in --packages to avoid Process Output>>> dependency conflicts. Process Output>>> --repositories Comma-separated list of additional remote repositories to Process Output>>> search for the maven coordinates given with --packages. Process Output>>> --py-files PY_FILES Comma-separated list of .zip, .egg, or .py files to place Process Output>>> on the PYTHONPATH for Python apps. Process Output>>> --files FILES Comma-separated list of files to be placed in the working Process Output>>> directory of each executor. File paths of these files
Pacote JAR de 500 MB ou maior
-
Crie um recurso JAR do EMR.
Se o pacote JAR tiver 500 MB ou mais, não será possível fazer o upload dele do computador local como recurso do DataWorks. Armazene o pacote JAR no HDFS do cluster EMR e registre o caminho de armazenamento para referenciar o pacote ao agendar o job Spark.
-
Referencie o recurso JAR do EMR.
Se o pacote JAR estiver no HDFS, referencie-o diretamente ao especificar o caminho no código do nó EMR Spark.
Clique duas vezes no nó EMR Spark criado para abrir o editor de código.
-
Escreva um comando spark-submit, conforme o exemplo a seguir.
spark-submit --master yarn --deploy-mode cluster --name SparkPi --driver-memory 4G --driver-cores 1 --num-executors 5 --executor-memory 4G --executor-cores 1 --class org.apache.spark.examples.JavaSparkPi hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar 100A tabela a seguir descreve os parâmetros.
hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar: o caminho do pacote JAR no HDFS.
org.apache.spark.examples.JavaSparkPi: a classe principal do job no pacote JAR compilado.
-
Os demais parâmetros pertencem ao cluster EMR e devem ser modificados conforme os requisitos do negócio. Execute o comando a seguir para visualizar a ajuda do spark-submit e modifique-o conforme necessário.
ImportantePara usar parâmetros simplificados do comando Spark-submit em um nó Spark, adicione-os ao código. Exemplo:
--executor-memory 2G.Os nós Spark aceitam o envio de jobs apenas no modo de cluster YARN.
Para jobs enviados com o comando spark-submit, defina o parâmetro do modo de implantação como cluster, e não client.
spark-submit --help
Método 2: Referencie diretamente um recurso OSS
(Opcional) Parâmetros avançados
Configure parâmetros específicos do Spark na seção Advanced Settings de um nó. Para mais informações sobre as propriedades do Spark, consulte Spark Configuration. Os parâmetros avançados configuráveis variam conforme o tipo de cluster EMR, como mostra a tabela a seguir.
Cluster DataLake ou personalizado: EMR on ECS
|
Parâmetro |
Descrição |
|
queue |
A fila de agendamento para a qual os jobs são enviados. Valor padrão: default. Se configurar uma Endpoint no nível do workspace ao registrar um cluster EMR em um workspace do DataWorks, aplicam-se as seguintes regras:
Para mais informações sobre o EMR YARN, consulte Basic queue configurations. Para mais informações sobre como configurar uma fila ao registrar um cluster EMR, consulte Set the global YARN resource queue. |
|
priority |
A prioridade. Valor padrão: 1. |
|
FLOW_SKIP_SQL_ANALYZE |
O método usado para executar instruções SQL. Valores válidos:
Nota
Use este parâmetro apenas para execuções de teste no Data Development. |
|
Outros |
|
Cluster EMR Serverless Spark
Para mais informações sobre como configurar parâmetros, consulte Configure parameters for a Spark job.
|
Parâmetro |
Descrição |
|
queue |
A fila de agendamento para a qual os jobs são enviados. Valor padrão: dev_queue. |
|
priority |
A prioridade. Valor padrão: 1. |
|
FLOW_SKIP_SQL_ANALYZE |
O método usado para executar instruções SQL. Valores válidos:
Nota
Use este parâmetro apenas para execuções de teste no Data Development. |
|
SERVERLESS_RELEASE_VERSION |
A versão do mecanismo Spark. Por padrão, usa-se a Default Engine Version configurada para o cluster na seção Cluster Management da página Management Center. Configure este parâmetro para especificar versões diferentes do mecanismo para jobs distintos. |
|
SERVERLESS_QUEUE_NAME |
A fila de recursos a ser especificada. Por padrão, usa-se a Default Resource Queue configurada para o cluster na seção Cluster Management da página Management Center. Para isolar e gerenciar recursos, adicione filas. Para mais informações, consulte Manage resource queues. |
|
Outros |
|
Cluster Spark: EMR on ACK
|
Parâmetro |
Descrição |
|
queue |
Parâmetro não suportado. |
|
priority |
Parâmetro não suportado. |
|
FLOW_SKIP_SQL_ANALYZE |
O método usado para executar instruções SQL. Valores válidos:
Nota
Use este parâmetro apenas para execuções de teste no Data Development. |
|
Outros |
|
Cluster Hadoop: EMR on ECS
|
Parâmetro |
Descrição |
|
queue |
A fila de agendamento para a qual os jobs são enviados. Valor padrão: default. Se configurar uma YARN resource queue no nível do workspace ao registrar um cluster EMR em um workspace do DataWorks, aplicam-se as seguintes regras:
Para mais informações sobre o EMR YARN, consulte Basic queue configurations. Para mais informações sobre como configurar uma fila ao registrar um cluster EMR, consulte Set the global YARN resource queue. |
|
priority |
A prioridade. Valor padrão: 1. |
|
FLOW_SKIP_SQL_ANALYZE |
O método usado para executar instruções SQL. Valores válidos:
Nota
Use este parâmetro apenas para execuções de teste no Data Development. |
|
USE_GATEWAY |
Especifica se os jobs serão enviados do nó atual por um cluster Gateway. Valores válidos:
Nota
Se o cluster do nó atual não estiver associado a um cluster Gateway e este parâmetro for definido como |
|
Outros |
|
Job SQL
-
Na barra de ferramentas, clique no ícone
. Na caixa de diálogo Yes, selecione o grupo de recursos de agendamento criado e clique em Parameter.NotaPara acessar recursos de computação implantados em uma rede pública ou VPC, use um grupo de recursos de agendamento que possa se conectar a esses recursos. Para mais informações, consulte Solutions for network connections.
Para modificar o grupo de recursos usado na execução de um job, clique no ícone Running
e selecione o grupo de recursos desejado.Ao consultar dados com um nó EMR Spark, o resultado limita-se a no máximo 10.000 registros e 10 MB de tamanho total.
Clique no ícone
e salve as instruções SQL.-
(Opcional) Execute testes de fumaça.
Para executar testes de fumaça no ambiente de Desenvolvimento, execute-os ao enviar para um nó de execução ou após o envio do nó. Para mais informações, consulte Run a smoke test.
Etapa 3: Configure o agendamento do nó
Para que o sistema execute periodicamente uma tarefa no nó, clique em Run with Parameters no painel de navegação à direita, na guia de configuração do nó, e defina as propriedades de agendamento da tarefa conforme os requisitos do negócio. Para mais informações, consulte Overview.
Configure as propriedades Properties e Rerun attribute do nó antes de enviá-lo.
-
Para personalizar o ambiente do componente, crie uma custom image com base na imagem oficial
dataworks_emr_base_task_pode use it in DataStudio.Por exemplo, substitua pacotes JAR do Spark ou inclua
libraries,filesouJAR packagesespecíficos ao criar a imagem personalizada.
Etapa 4: Implante o nó
Após configurar uma tarefa em um nó, envie e implante a tarefa. Em seguida, o sistema a executará regularmente com base nas configurações de agendamento.
Clique no ícone
na barra de ferramentas superior e salve a tarefa.-
Clique no ícone
na barra de ferramentas superior para enviar a tarefa.Na caixa de diálogo Parent Nodes, configure o parâmetro Submit e determine se deseja revisar o código da tarefa após o envio, conforme os requisitos do negócio.
NotaConfigure os parâmetros Change description e Rerun na guia Properties antes de enviar a tarefa.
Use o recurso de revisão de código para garantir a qualidade do código das tarefas e evitar erros de execução por código inválido. Se o recurso de revisão de código estiver ativado, o código enviado só poderá ser implantado após aprovação. Para mais informações, consulte Code review.
Em workspaces no modo padrão, implante a tarefa no ambiente de produção após o envio. Para implantar uma tarefa em um nó, clique em Parent Nodes no canto superior direito da guia de configuração do nó. Para mais informações, consulte Deploy a node.
Mais operações
Após o envio e a implantação, a tarefa é executada periodicamente com base nas configurações de agendamento. Clique em Deploy no canto superior direito da guia 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.
Perguntas frequentes
-
P: Como resolvo um tempo limite de conexão do nó?
R: Certifique-se de que o grupo de recursos e o cluster possam se conectar pela rede. Acesse a lista de recursos de computação e clique em Resource Initialization. Na caixa de diálogo exibida, clique em Operation Center e verifique se a inicialização foi bem-sucedida.
e selecione o grupo de recursos de agendamento para executar o nó EMR Spark. Quando o job for concluído, registre o