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

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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.

  • Registros de componentes do Hadoop e do YARN — Os registros dos componentes associados ao Apache YARN e MapReduce, por exemplo, estão contidos 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 hadoop-state-pusher diretório é para a saída do processo de envio de 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 Console do Amazon EMR 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. Em seguida, selecione uma AWS KMS chave na lista, insira o ARN da 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 AWS KMS para seu perfil de instância do EC2 e função do Amazon EMR. Para ter 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 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 ter 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 registros, selecione Criptografar registros armazenados no S3 com uma chave gerenciada pelo cliente AWS KMS. Em seguida, selecione uma chave AWS KMS na lista ou insira um ARN da chave. Você também pode criar uma nova AWS KMS 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 ter 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
Para arquivar arquivos de log no Amazon S3 com o AWS CLI

Para arquivar arquivos de log no Amazon S3 usando o AWS CLI, digite o create-cluster comando 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-7.1.0 --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

Com o 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 gerenciada pelo cliente KMS. AWS 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 da instância do Amazon EC2 e a função do Amazon EMR devem ser adicionados à lista de usuários-chave da chave gerenciada pelo cliente AWS KMS especificada, conforme demonstrado nas etapas a seguir:

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

    2. Para alterar a AWS região, use o seletor de região 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 Adicionar.

Para obter mais informações, consulte Funções de serviço do IAM usadas pelo Amazon EMR e Como usar políticas de chaves 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 para o Amazon S3 usando AWS CLI o, você usa uma ação de bootstrap na inicialização do cluster para habilitar a agregação de logs e especificar o bucket para 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-7.1.0 \ --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 dos comandos do Amazon EMR no AWS CLI, consulte Referência de AWS CLI comandos.

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 aplicações

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 NameNode, DataNode, e TimelineServer registros do YARN.

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 HiveServer 2 registros, 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.