Configurar registro em log e depuração do cluster - Amazon EMR

Configurar registro em log e depuração do cluster

Uma das questões a ser decidida quando você planeja o seu cluster é quanto de suporte à depuração você deseja disponibilizar. Quando você está desenvolvendo um aplicativo de processamento de dados pela primeira vez, recomendamos testar o aplicativo em um cluster processando um subconjunto pequeno, mas representativo, dos seus dados. Ao fazer isso, você provavelmente vai aproveitar todas as ferramentas de depuração que o Amazon EMR oferece, tais como o arquivamento de arquivos de log para o Amazon S3.

Uma vez concluído o desenvolvimento, e com o aplicativo de processamento de dados totalmente em produção, você pode optar por reduzir a depuração. Dessa forma, você pode economizar no custo do armazenamento de arquivos de log no Amazon S3 e reduzir a carga de processamento no cluster, pois ele não precisa mais gravar o estado no Amazon S3. O risco, obviamente, é que se ocorrer algum problema, você terá menos ferramentas disponíveis para investigar o erro.

Arquivos de log padrão

Por padrão, cada cluster grava os arquivos de log no nó primário. Esses são gravados no diretório /mnt/var/log/. Você pode acessá-los usando o SSH para se conectar ao nó primário, como descrito em Conectar-se ao nó primário usando SSH.

nota

Se você usa o Amazon EMR versão 6.8.0 ou anterior, os arquivos de log são salvos no Amazon S3 durante o término do cluster, então não é possível acessar os arquivos de log após o término do nó primário. O Amazon EMR libera a versão 6.9.0 e versões posteriores arquiva os registros no Amazon S3 durante a redução da escala verticalmente do cluster, de forma que os arquivos de log gerados no cluster persistam mesmo após o término do nó.

Não é necessário habilitar nada para fazer com que os arquivos de log sejam gravados no nó primário. Esse é o comportamento padrão do Amazon EMR e do Hadoop.

Um cluster gera vários tipos de arquivos de log, incluindo:

  • Logs de etapa: esses logs são gerados pelo serviço do Amazon EMR e contêm informações sobre o cluster e os resultados de cada etapa. Os arquivos de log são armazenados no diretório /mnt/var/log/hadoop/steps/ no nó primário. Cada etapa registra seus resultados em um subdiretório numerado separado: /mnt/var/log/hadoop/steps/s-stepId1/ para a primeira etapa, /mnt/var/log/hadoop/steps/s-stepId2/ para a segunda etapa, e assim por diante. Os identificadores de etapa de 13 caracteres (por exemplo, IdEtapa1, IdEtapa2) são exclusivos dos clusters.

  • Logs de componentes do Hadoop e do YARN: os logs dos componentes associados ao Apache YARN e ao MapReduce, por exemplo, estão armazenados em pastas separadas em /mnt/var/log. Os locais dos arquivos de log para os componentes do Hadoop sob /mnt/var/log são os seguintes: hadoop-hdfs, hadoop-mapreduce, hadoop-httpfs e hadoop-yarn. O diretório hadoop-state-pusher é usado para os dados de saída do processo que envia o estado do Hadoop.

  • Logs de ação de bootstrap: se seu trabalho utiliza ações de bootstrap, os resultados dessas ações são registrados em logs. Os arquivos de log são armazenados em /mnt/var/log/bootstrap-actions no nó primário. Cada ação de bootstrap registra seus resultados em um subdiretório numerado separado: /mnt/var/log/bootstrap-actions/1/ para a primeira ação de bootstrap, /mnt/var/log/bootstrap-actions/2/ para a segunda ação de bootstrap, e assim por diante.

  • Logs de estado de instância: esses logs fornecem informações sobre a CPU, o estado da memória e os threads do coletor de lixo do nó. Os arquivos de log são armazenados em /mnt/var/log/instance-state/ no nó primário.

Arquivamento dos arquivos de log no Amazon S3

nota

Atualmente não é possível usar a agregação de logs para o Amazon S3 com o utilitário yarn logs.

O Amazon EMR libera a versão 6.9.0 e versões posteriores arquiva os registros no Amazon S3 durante a redução da escala verticalmente do cluster, de forma que os arquivos de log gerados no cluster persistam mesmo após o término do nó. Esse comportamento é habilitado automaticamente, então não é necessário ativá-lo. Para as versões 6.8.0 e anteriores do Amazon EMR, é possível configurar um cluster para arquivar periodicamente os arquivos de log armazenados no nó primário no Amazon S3. Isso garante que os arquivos de log estarão disponíveis depois que o cluster for terminado, seja por meio de desligamento normal, seja devido a um erro. O Amazon EMR arquiva os arquivos de log no Amazon S3 em intervalos de cinco minutos.

Para que os arquivos de log sejam arquivados no Amazon S3 para o Amazon EMR 6.8.0 e versões anteriores, você deve habilitar esse recurso ao executar o cluster. Você pode fazer isso usando o console, a CLI ou a API. Por padrão, os clusters executados por meio do console têm a funcionalidade de registro em log habilitada. Para clusters executados usando a CLI ou a API, o registro em log no Amazon S3 deve ser habilitado manualmente.

nota

Reformulamos o console do Amazon EMR para torná-lo mais fácil de usar. Consulte O que há de novo no console? para conhecer as diferenças entre as experiências do console antigo e novo.

New console
Arquivar arquivos de log no Amazon S3 usando o novo console
  1. Faça login no AWS Management Console e abra o console do Amazon EMR em https://console.aws.amazon.com/emr.

  2. Em EMR no EC2, no painel de navegação esquerdo, escolha Clusters e depois Criar cluster.

  3. Em Logs do cluster, marque a caixa de seleção Publicar logs específicos do cluster no Amazon S3.

  4. No campo Local do Amazon S3, digite (ou navegue até) o caminho do Amazon S3 onde os logs serão armazenados. Se você digitar o nome de uma pasta que não existe no bucket, o Amazon S3 a criará.

    Quando esse valor é definido, o Amazon EMR copia os arquivos de log das instâncias do EC2 no cluster para o Amazon S3. Isso evita que os arquivos de log sejam perdidos quando o cluster é encerrado e om EC2 termina as instâncias que hospedam o cluster. Esses logs são úteis para auxiliar na solução de problemas. Para obter mais informações, consulte View log files.

  5. Opcionalmente, marque a caixa de seleção Criptografar logs específicos do cluster. Depois, selecione uma chave do AWS KMS na lista, insira um ARN de chave ou crie uma nova chave. Essa opção só está disponível no Amazon EMR versão 5.30.0 e posteriores, excluindo a versão 6.0.0. Para usar essa opção, adicione permissão ao AWS KMS para seu perfil de instância do EC2 e perfil do Amazon EMR. Para obter mais informações, consulte Como criptografar arquivos de log armazenados no Amazon S3 com uma chave do AWS KMS gerenciada pelo cliente.

  6. Escolha qualquer outra opção que se aplique ao cluster.

  7. Para iniciar o cluster, escolha Criar cluster.

Old console
Arquivar arquivos de log no Amazon S3 usando o console antigo
  1. Navegue até o novo console do Amazon EMR e selecione Alternar para o console antigo na navegação lateral. Para obter mais informações sobre o que esperar ao alternar para o console antigo, consulte Usar o console antigo.

  2. Selecione Create cluster (Criar cluster).

  3. Escolha Go to advanced options (Ir para opções avançadas).

  4. Na seção Opções gerais, no campo Registro em log, aceite a opção padrão: Ativado.

    Isso determina se o Amazon EMR captura dados de log detalhados para o Amazon S3. Você só pode definir esta opção quando o cluster é criado. Para obter mais informações, consulte Exibir arquivos de log do .

  5. No campo Pasta do S3, digite (ou navegue até) um caminho do Amazon S3 para armazenar seus logs. Você também pode permitir que o console gere um caminho do Amazon S3. Se você digitar o nome de uma pasta que não existe no bucket, ela será criada.

    Quando esse valor é definido, o Amazon EMR copia os arquivos de log das instâncias do EC2 no cluster para o Amazon S3. Isso evita que os arquivos de log sejam perdidos quando o cluster é encerrado e as instâncias do EC2 que hospedam o cluster são encerradas. Esses logs são úteis para auxiliar na solução de problemas.

    Para obter mais informações, consulte View log files.

  6. No campo Criptografia de log, selecione Criptografar logs armazenados no S3 com uma chave gerenciada pelo cliente do AWS KMS. Depois, selecione uma chave do AWS KMS na lista ou insira um ARN de chave. Você também pode criar uma nova chave AWS KMS.

    Essa opção só está disponível no Amazon EMR versão 5.30.0 e posteriores, excluindo a versão 6.0.0. Para usar essa opção, adicione permissão ao AWS KMS para seu perfil de instância do EC2 e perfil do Amazon EMR. Para obter mais informações, consulte Como criptografar arquivos de log armazenados no Amazon S3 com uma chave do AWS KMS gerenciada pelo cliente.

  7. Prossiga com a criação do cluster conforme descrito em Planejar e configurar clusters.

CLI
Arquivar arquivos de log no Amazon S3 usando a AWS CLI

Para arquivar os arquivos de log no Amazon S3 usando a AWS CLI, digite o comando create-cluster e especifique o caminho de log do Amazon S3 usando o parâmetro --log-uri.

  1. Para arquivar os arquivos de log no Amazon S3, digite o seguinte comando e substitua myKey pelo nome do par de chaves do EC2.

    aws emr create-cluster --name "Test cluster" --release-label emr-5.36.1 --log-uri s3://DOC-EXAMPLE-BUCKET/logs --applications Name=Hadoop Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m5.xlarge --instance-count 3
  2. Quando você especifica a contagem de instâncias sem usar o parâmetro --instance-groups, um único nó primário é executado, e as instâncias restantes são executadas como nós centrais. Todos os nós usarão o tipo de instância especificado no comando.

    nota

    Se você não criou a perfil de serviço do Amazon EMR padrão e o perfil de instância do EC2, insira aws emr create-default-roles para criá-los antes de digitar o subcomando create-cluster.

Como criptografar arquivos de log armazenados no Amazon S3 com uma chave do AWS KMS gerenciada pelo cliente

No Amazon EMR versão 5.30.0 e posterior (exceto o Amazon EMR 6.0.0), você pode criptografar arquivos de log armazenados no Amazon S3 com uma chave do AWS KMS gerenciada pelo cliente. Para habilitar essa opção no console, siga as etapas em Arquivamento dos arquivos de log no Amazon S3. O perfil de instância do Amazon EC2 e o perfil do Amazon EMR devem atender aos seguintes pré-requisitos:

  • O perfil de instância do Amazon EC2 usado para o cluster deve ter permissão para usar kms:GenerateDataKey.

  • O perfil do Amazon EMR usada para o cluster deve ter permissão para usar kms:DescribeKey.

  • O perfil de instância do Amazon EC2 e o perfil do Amazon EMR devem ser adicionados à lista de usuários da chave do AWS KMS gerenciada pelo cliente especificada, conforme demonstrado pelas etapas a seguir:

    1. Abra o console do AWS Key Management Service (AWS KMS) em https://console.aws.amazon.com/kms.

    2. Para alterar a região da AWS, use o Region selector (Seletor de regiões) no canto superior direito da página.

    3. Selecione o alias da chave do KMS a ser modificada.

    4. Na página de detalhes da chave, em Key Users (Usuários de chaves), escolha Add (Adicionar).

    5. Na caixa de diálogo Adicionar usuários de chave, selecione o perfil de instância do Amazon EC2 e o perfil do Amazon EMR.

    6. Escolha Add (Adicionar).

Para obter mais informações, consulte IAM service roles used by Amazon EMR e Using key policies no Guia do desenvolvedor do AWS Key Management Service.

Agregar logs no Amazon S3 usando a AWS CLI

nota

Atualmente não é possível usar a agregação de logs com o utilitário yarn logs. Você só pode usar a agregação compatível com esse procedimento.

A agregação de logs (Hadoop 2.x) compila os logs de todos os contêineres de um aplicativo individual em um único arquivo. Para habilitar a agregação de logs no Amazon S3 usando a AWS CLI, você pode usar uma ação de bootstrap quando o cluster é executado para habilitar a agregação de logs e especificar o bucket que armazenará os logs.

  • Para habilitar a agregação de logs, crie o arquivo de configuração chamado myConfig.json, que contém o seguinte:

    [ { "Classification": "yarn-site", "Properties": { "yarn.log-aggregation-enable": "true", "yarn.log-aggregation.retain-seconds": "-1", "yarn.nodemanager.remote-app-log-dir": "s3:\/\/DOC-EXAMPLE-BUCKET\/logs" } } ]

    Digite o seguinte comando, substituindo myKey pelo nome do par de chaves do EC2. Além disso, você pode substituir os textos em vermelho por suas próprias configurações.

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 \ --applications Name=Hadoop \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3 \ --configurations file://./myConfig.json

    Quando você especifica a contagem de instâncias sem usar o parâmetro --instance-groups, um único nó primário é executado, e as instâncias restantes são executadas como nós centrais. Todos os nós usarão o tipo de instância especificado no comando.

    nota

    Se você não tiver criado o perfil de serviço padrão do EMR e o perfil de instância do EC2, execute aws emr create-default-roles para criá-los antes de executar o subcomando create-cluster.

Para obter mais informações sobre o uso de comandos do Amazon EMR na AWS CLI, consulte AWS CLI Command Reference.

Locais de log

A lista a seguir inclui todos os tipos de log e seus locais no Amazon S3. Use-os para solucionar problemas do Amazon EMR.

Logs de etapa

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/steps/<step-id>/

Logs de aplicativos

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/containers/

Esse local inclui contêiner stderr e stdout, directory.info, prelaunch.out e logs launch_container.sh.

Logs do gerenciador de recursos

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hadoop-yarn/

HDFS do Hadoop

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-hdfs/

Esse local inclui logs de NameNode, DataNode e YARN TimelineServer.

Logs do gerenciador de nós

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/applications/hadoop-yarn/

Logs de estado de instância

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<all-instance-id>/daemons/instance-state/

Logs de provisionamento do Amazon EMR

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/provision-node/*

Logs do Hive

s3://DOC-EXAMPLE-LOG-BUCKET/<cluster-id>/node/<leader-instance-id>/applications/hive/*

  • Para encontrar logs do Hive no cluster, remova o asterisco (*) e anexe /var/log/hive/ ao link acima.

  • Para encontrar logs do HiveServer2, remova o asterisco (*) e anexe var/log/hive/hiveserver2.log ao link acima.

  • Para encontrar logs do HiveCLI, remova o asterisco (*) e anexe /var/log/hive/user/hadoop/hive.log ao link acima.

  • Para encontrar os logs do Hive Metastore Server, remova o asterisco (*) e anexe /var/log/hive/user/hive/hive.log ao link acima.

Se sua falha estiver no nó primário ou no nó de tarefa da aplicação Tez, forneça logs do contêiner Hadoop apropriado.

Habilitar ferramenta de depuração

A ferramenta de depuração permite procurar mais facilmente os arquivos de log do console do Amazon EMR. Para obter mais informações, consulte Visualizar arquivos de log na ferramenta de depuração. Quando a depuração é habilitada em um cluster, o Amazon EMR arquiva os arquivos de log no Amazon S3 e, em seguida, indexa esses arquivos. Você pode usar o console para pesquisar nos logs das etapas, trabalhos, tarefas e tentativas de tarefas do cluster de uma maneira intuitiva.

Para usar a ferramenta de depuração no console do Amazon EMR, você deve habilitar a depuração ao iniciar o cluster usando o console, a CLI ou a API. O novo console do Amazon EMR não oferece a ferramenta de depuração.

Old console
Ativar a ferramenta de depuração usando o console antigo
  1. Navegue até o novo console do Amazon EMR e selecione Alternar para o console antigo na navegação lateral. Para obter mais informações sobre o que esperar ao alternar para o console antigo, consulte Usar o console antigo.

  2. Selecione Create cluster (Criar cluster).

  3. Escolha Go to advanced options (Ir para opções avançadas).

  4. Na seção Cluster Configuration (Configuração do cluster), no campo Logging (Registro), escolha Enabled (Habilitado). Não é possível habilitar a depuração sem habilitar o registro em log.

  5. No campo Local do S3 da pasta de logs, digite o caminho do Amazon S3 onde os logs serão armazenados.

  6. No campo Debugging (Depuração), escolha Enabled (Habilitado). A opção de depuração cria uma troca no Amazon SQS para publicar mensagens de depuração no serviço de back-end do Amazon EMR. Podem ser cobrados encargos pela publicação de mensagens nessa troca. Para obter mais informações, consulte a página do produto do Amazon SQS.

  7. Prossiga com a criação do cluster conforme descrito em Planejar e configurar clusters.

AWS CLI
Ativar a ferramenta de depuração usando a AWS CLI

Para habilitar a depuração usando a AWS CLI, digite o subcomando create-cluster com o parâmetro --enable-debugging. Especifique também o parâmetro --log-uri ao habilitar a depuração.

  • Para habilitar a depuração usando a AWS CLI, digite o seguinte comando e substitua myKey pelo nome do seu par de chaves do EC2.

    aws emr create-cluster --name "Test cluster" \ --release-label emr-5.36.1 \ --log-uri s3://DOC-EXAMPLE-BUCKET/logs \ --enable-debugging \ --applications Name=Hadoop Name=Hive Name=Pig \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m5.xlarge \ --instance-count 3

    Quando você especifica a contagem de instâncias sem usar o parâmetro --instance-groups, um único nó primário é executado, e as instâncias restantes são executadas como nós centrais. Todos os nós usarão o tipo de instância especificado no comando.

    nota

    Se você não criou a função de serviço do EMR padrão e o perfil de instância do EC2, digite aws emr create-default-roles para criá-los antes de digitar o subcomando create-cluster.

API
Ativar a ferramenta de depuração usando a API do Amazon EMR
  • Habilite a depuração usando a configuração do Java SDK a seguir.

    StepFactory stepFactory = new StepFactory(); StepConfig enabledebugging = new StepConfig() .withName("Enable debugging") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(stepFactory.newEnableDebuggingStep());

    Neste exemplo, new StepFactory() usa us-east-1 como a região padrão. Se o cluster for iniciado em uma região diferente, será necessário especificar a região usando new StepFactory("region.elasticmapreduce"), como new StepFactory("ap-northeast-2.elasticmapreduce").

Informações sobre as opções de depuração

O Amazon EMR versões 4.1.0 a 5.27.0 oferece suporte à depuração em todas as regiões. Outras versões do Amazon EMR não oferecem suporte à opção de depuração. A partir de 23 de janeiro de 2023, o Amazon EMR descontinuará a ferramenta de depuração em todas as versões.

O Amazon EMR cria uma fila do Amazon SQS para processar os dados de depuração. Podem ser cobrados encargos pelas mensagens. No entanto, o Amazon SQS disponibiliza um nível gratuito de até 1 milhão de solicitações. Para obter mais informações, consulte https://aws.amazon.com/https://aws.amazon.com/sqs.

A depuração requer o uso de perfis. É necessário que o perfil de serviço e o perfil de instância permitam utilizar todas as operações de API do Amazon SQS. Se seus perfis estão anexados às políticas gerenciadas do Amazon EMR, você não precisará modificar os perfis. Se você tiver funções personalizadas, precisará adicionar as permissões sqs:*. Para obter mais informações, consulte Configurar perfis de serviço do IAM para permissões do Amazon EMR aos serviços e recursos da AWS.