Evitar dhclient-script overte ntp no amazon linux ami

0

Estamos usando o emr cluster em webservices amazon 'aws'. Estamos usando imagens padrão 'Amazon Linux AMI' sem personalização. Parece-me que o script dhclient está buscando configurações de nossas empresas dhcp (protocolo de configuração de host dinâmico), especialmente ntp (network time protocol)

Como exemplo no nó mestre, o script dhclient anexa os servidores ntp das empresas ao arquivo /etc/ntp.conf .

[hadoop@ip-10-5-21-157 ~]$ grep ^server /etc/ntp.conf 
server 0.amazon.pool.ntp.org iburst
server 1.amazon.pool.ntp.org iburst
server 2.amazon.pool.ntp.org iburst
server 3.amazon.pool.ntp.org iburst
server 10.2.78.21   # added by /sbin/dhclient-script
server 10.2.78.22   # added by /sbin/dhclient-script
server 10.2.78.23   # added by /sbin/dhclient-script
server 10.2.78.24   # added by /sbin/dhclient-script

Os endereços IP 10.2.78.21-24 resolvem para clockNN.ntp.mycompany.com

Como isso pode ser evitado para que possamos usar as configurações padrão da Amazon?

EDIT Tivemos problemas ao executar uma agregação de pig em um cluster emr. Um exemplo de stacktrace de exceção é:

18/01/07 13:50:23 INFO tez.TezJob: DAG Status: status=FAILED, progress=TotalTasks: 4737 Succeeded: 3777 Running: 0 Failed: 1 Killed: 959 FailedTaskAttempts: 428 KilledTaskAttempts: 309, diagnostics=Vertex failed, vertexName=scope-421, vertexId=vertex_1515326570070_0001_1_04, diagnostics=[Task failed, taskId=task_1515326570070_0001_1_04_002846, diagnostics=[TaskAttempt 0 failed, info=[Container launch failed for container_1515326570070_0001_01_000599 : org.apache.hadoop.yarn.exceptions.YarnException: Unauthorized request to start container.
This token is expired. current time is 1515332813920 found 1515330236564
Note: System times on machines may be out of sync. Check system time and time zones.
       at sun.reflect.GeneratedConstructorAccessor51.newInstance(Unknown Source)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
       at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.instantiateException(SerializedExceptionPBImpl.java:168)
       at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.deSerialize(SerializedExceptionPBImpl.java:106)
       at org.apache.tez.dag.app.launcher.TezContainerLauncherImpl$Container.launch(TezContainerLauncherImpl.java:160)
       at org.apache.tez.dag.app.launcher.TezContainerLauncherImpl$EventProcessor.run(TezContainerLauncherImpl.java:353)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
       at java.lang.Thread.run(Thread.java:745)

Uma causa básica para que (algumas das) máquinas do emr (vm's, imagens, nós?) a hora do sistema esteja desligada poderia ter sido os servidores DNS de nossas empresas. (Mas isso é um palpite). Uma idéia para remover essa possibilidade é remover os servidores ntp do arquivo /etc/ntp.conf e reinicializar os tempos do sistema.

    
por Thomas Kettenbach 08.01.2018 / 08:50

1 resposta

0

Depois de algumas pesquisas, eu criei o seguinte:

Arquivo criado modify_ntp_config.sh no S3:

#!/bin/bash

set -eEu

ntp_config_file="${1:-example_config}"
echo "Removing 'server 10.*' entries from \"$ntp_config_file\""
sudo sed -i -e '/server 10.*/d' $ntp_config_file
echo "Reinitialize ntp"
sudo service ntpd stop
sudo ntpdate -s time.nist.gov
sudo service ntpd start

Copiado este arquivo para s3:

$ aws s3 cp /var/tmp/modify_ntp_config.sh \
    s3://<s3-bucket-name>/data/scripts/modify_ntp_config.sh

E, em seguida, usando aws-tools :

aws emr create-cluster --name "..." [...cluster create options ...] \
    --steps \
Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\
Jar=s3://<region>.elasticmapreduce/libs/script-runner/script-runner.jar,\
Args=["s3://<s3-bucket-name>/data/scripts/modify_ntp_config.sh","/etc/ntp.conf"]

Resulta na seguinte saída de log (copiada de s3 para localdisk)

$ aws s3 cp --recursive s3://<s3-bucket-name>/log/<cluster-id>/steps/<step-id>/ /var/tmp/5HKO7
download: s3://[...]/stdout.gz to ../../var/tmp/5HKO7/stdout.gz
download: s3://[...]/stderr.gz to ../../var/tmp/5HKO7/stderr.gz
download: s3://[...]/controller.gz to ../../var/tmp/5HKO7/controller.gz

$ zcat /var/tmp/5HKO7/stdout.gz 
Downloading 's3://<s3-bucket-name>/data/scripts/modify_ntp_config.sh' to '/mnt/var/lib/hadoop/steps/[...]/.'
Removing 'server 10.*' entries from "/etc/ntp.conf"
Reinitialize ntp
Shutting down ntpd: [  OK  ]
Starting ntpd: [  OK  ]

$ zcat /var/tmp/5HKO7/stderr.gz 
Command exiting with ret '0'

NOTA: Outra forma seria usá-lo em um cluster emr já em execução usando aws emr add-steps .

$ aws emr add-steps --cluster-id "j-<emr_cluster_id>"\
--steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\
Jar=s3://<region>.elasticmapreduce/libs/script-runner/script-runner.jar,\
Args=["s3://<s3-bucket-name>/data/scripts/modify_ntp_config.sh","/etc/ntp.conf"]

Referências:    link    link    link    link

    
por 10.01.2018 / 11:18