official - hadoop para windows
El trabajo de MapReduce se bloquea, a la espera de que se asigne el contenedor de AM (9)
Compruebe su archivo hosts en los nodos maestro y esclavo. Tuve exactamente este problema Mi archivo de hosts se veía así en el nodo maestro, por ejemplo
127.0.0.0 localhost
127.0.1.1 master-virtualbox
192.168.15.101 master
Lo cambié como abajo
192.168.15.101 master master-virtualbox localhost
Así funcionó.
Traté de ejecutar el recuento de palabras simple como trabajo MapReduce. Todo funciona bien cuando se ejecuta localmente (todo el trabajo realizado en el nodo de nombre). Pero, cuando intento ejecutarlo en un clúster usando YARN (agregando mapreduce.framework.name
= yarn
to mapred-site.conf), el trabajo se cuelga.
Encontré un problema similar aquí: los trabajos de MapReduce se atascan en estado Aceptado
Salida del trabajo:
*** START ***
15/12/25 17:52:50 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032
15/12/25 17:52:51 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
15/12/25 17:52:51 INFO input.FileInputFormat: Total input paths to process : 5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: number of splits:5
15/12/25 17:52:52 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1451083949804_0001
15/12/25 17:52:53 INFO impl.YarnClientImpl: Submitted application application_1451083949804_0001
15/12/25 17:52:53 INFO mapreduce.Job: The url to track the job: http://hadoop-droplet:8088/proxy/application_1451083949804_0001/
15/12/25 17:52:53 INFO mapreduce.Job: Running job: job_1451083949804_0001
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.job.tracker</name>
<value>localhost:54311</value>
</property>
<!--
<property>
<name>mapreduce.job.tracker.reserved.physicalmemory.mb</name>
<value></value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1024</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>3000</value>
<source>mapred-site.xml</source>
</property> -->
</configuration>
hilo-sitio.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>3000</value>
<source>yarn-site.xml</source>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>500</value>
</property>
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>3000</value>
</property>
-->
</configuration>
// Las opciones comentadas a la izquierda - no estaban resolviendo el problema
YarnApplicationState: ACEPTADO: a la espera de que se asigne el contenedor de AM, se inicie y se registre con RM.
¿Cual puede ser el problema?
EDITAR:
Probé esta configuración (comentada) en las máquinas: NameNode (8GB RAM) + 2x DataNode (4GB RAM). Obtengo el mismo efecto: el trabajo se bloquea en el estado ACEPTADO.
EDIT2: cambio de configuración (gracias @Manjunath Ballur) a:
hilo-sitio.xml:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop-droplet</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop-droplet:8031</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop-droplet:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop-droplet:8030</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop-droplet:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop-droplet:8088</value>
</property>
<property>
<description>Classpath for typical applications.</description>
<name>yarn.application.classpath</name>
<value>
$HADOOP_CONF_DIR,
$HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
$HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
$HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
$YARN_HOME/*,$YARN_HOME/lib/*
</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce.shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/data/1/yarn/local,/data/2/yarn/local,/data/3/yarn/local</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/data/1/yarn/logs,/data/2/yarn/logs,/data/3/yarn/logs</value>
</property>
<property>
<description>Where to aggregate logs</description>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/var/log/hadoop-yarn/apps</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>50</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>390</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>390</value>
</property>
</configuration>
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>50</value>
</property>
<property>
<name>yarn.app.mapreduce.am.command-opts</name>
<value>-Xmx40m</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>50</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>50</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx40m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx40m</value>
</property>
</configuration>
Sigue sin funcionar. Información adicional: No puedo ver nodos en la vista previa del clúster (problema similar aquí: nodos esclavos no en Yarn ResourceManager )
De todos modos eso es un trabajo para mi. muchas gracias! @KaP
ese es mi hilo-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>MacdeMacBook-Pro.local</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
ese es mi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
Debe verificar el estado de los administradores de nodos en su clúster. Si los nodos de NM tienen poco espacio en el disco, RM los marcará como "insalubres" y esos NM no podrán asignar nuevos contenedores.
1) Verifique los nodos no saludables: http://<active_RM>:8088/cluster/nodes/unhealthy
Si la pestaña "informe de estado" dice "los directorios locales son incorrectos", significa que necesita limpiar algo de espacio en el disco de estos nodos.
2) Verifique la propiedad dfs.data.dir
DFS en hdfs-site.xml
. Apunta a la ubicación en el sistema de archivos local donde se almacenan los datos de hdfs.
3) Inicie sesión en esas máquinas y use los comandos df -h
& hadoop fs - du -h
para medir el espacio ocupado.
4) Verifica la basura de hadoop y elimínala si te está bloqueando. hadoop fs -du -h /user/user_name/.Trash
y hadoop fs -rm -r /user/user_name/.Trash/*
Estas líneas
<property>
<name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
<value>100</value>
</property>
en el yarn-site.xml
solucioné mi problema ya que el nodo se marcará como no saludable cuando el uso del disco sea> = 95%. Solución principalmente adecuada para el modo pseudodistribuido.
Esto ha resuelto mi caso para este error:
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>100</value>
</property>
Pregunta anterior, pero tuve el mismo problema recientemente y, en mi caso, se debió a configurar manualmente el maestro como local en el código.
Por favor, busque conf.setMaster("local[*]")
y elimínelo.
Espero eso ayude.
Siento que estás haciendo mal la configuración de tu memoria.
Para entender el ajuste de la configuración de YARN, encontré que esta es una muy buena fuente: http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/topics/cdh_ig_yarn_tuning.html
Seguí las instrucciones dadas en este blog y pude hacer funcionar mis trabajos. Debe modificar su configuración proporcional a la memoria física que tiene en sus nodos.
Las cosas claves para recordar son:
- Los valores de
mapreduce.map.memory.mb
ymapreduce.reduce.memory.mb
deben ser al menosyarn.scheduler.minimum-allocation-mb
- Los valores de
mapreduce.map.java.opts
ymapreduce.reduce.java.opts
deben estar alrededor de "0,8 veces el valor de" lasmapreduce.map.memory.mb
correspondientes demapreduce.map.memory.mb
ymapreduce.reduce.memory.mb
. (En mi caso, es 983 MB ~ (0.8 * 1228 MB)) - De manera similar, el valor de
yarn.app.mapreduce.am.command-opts
debe ser "0.8 veces el valor de"yarn.app.mapreduce.am.resource.mb
Los siguientes son los ajustes que utilizo y funcionan perfectamente para mí:
hilo-sitio.xml:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1228</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>9830</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>9830</value>
</property>
mapred-site.xml
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>1228</value>
</property>
<property>
<name>yarn.app.mapreduce.am.command-opts</name>
<value>-Xmx983m</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>1228</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>1228</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx983m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx983m</value>
</property>
También puede consultar la respuesta aquí: Comprensión y ajuste del contenedor de hilos
Puede agregar la configuración de vCore, si desea que su asignación de contenedor también tenga en cuenta la CPU. Pero, para que esto funcione, necesita usar CapacityScheduler
con DominantResourceCalculator
. Vea la discusión sobre esto aquí: ¿Cómo se crean los contenedores basados en vcores y memoria en MapReduce2?
Tiene 512 MB de RAM en cada una de las instancias y todas las configuraciones de memoria en yarn-site.xml y mapred-site.xml tienen entre 500 MB y 3 GB. No podrá ejecutar nada en el clúster. Cambia cada cosa a ~ 256 MB.
Además, su mapred-site.xml está utilizando el marco por hilo y usted tiene una dirección de seguimiento de trabajo que no es correcta. Debe tener parámetros relacionados con el administrador de recursos en yarn-site.xml en un clúster multinodo (incluida la dirección web del administrador de recursos). Sin eso, el clúster no sabe dónde está su clúster.
Es necesario volver a visitar ambos archivos xml.
Lo primero es verificar los registros del administrador de recursos de hilo. Había buscado en Internet sobre este problema durante mucho tiempo, pero nadie me dijo cómo descubrir qué está sucediendo realmente. Es muy sencillo y sencillo revisar los registros del administrador de recursos de hilados. Estoy confundido por qué la gente ignora los registros.
Para mí, hubo un error en el registro
Caused by: org.apache.hadoop.net.ConnectTimeoutException: 20000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=172.16.0.167/172.16.0.167:55622]
Eso es porque cambié la red wifi en mi lugar de trabajo, por lo que la IP de mi computadora cambió.