2011-06-10 21 views
5

Parece que esto debería ser simple; Tengo un conjunto de archivos en nuestro clúster con el tamaño de bloque predeterminado de clúster de 128 MB. Tengo un trabajo de transmisión que los procesa, y me gustaría que los archivos de salida creados por el trabajo de transmisión usen un tamaño de bloque diferente, específicamente 16 MB. Pensé lo siguiente funcionaría:¿Cómo puedo configurar el tamaño de bloque de los archivos de salida producidos por un trabajo de Hadoop Streaming?

$ HADOOP_HOME/bin/hadoop frasco $ HADOOP_HOME/contrib/Streaming/Hadoop-0.20.1 + 152-D streaming.jar dfs.block.size = 16777216 -D mapred .job.name = 'Log Processor' -D mapred.reduce.tasks = 5 -D mapred.output.compress = true -D mapred.output.compression.type = BLOCK -input/production/beacon/vbox */20110609/00/access_log -output/usuario/me/logprocess/20110609/00/access_log -mapper/bin/cat -outputformat org.apache.hadoop.mapred.SequenceFileOutputFormat

Sin amor, los archivos producidos en/usuario/me/logprocess/20110609/00/access_log todos utilizan el tamaño de bloque predeterminado para el clúster de 128 MB. He intentado reemplazar dfs.block.size con fs.local.block.size en el comando también, con los mismos resultados. ¿Alguna idea de cómo controlar esto en un trabajo de transmisión?

Respuesta

-1

No será un tamaño de bloque "exacto", pero lo que podría hacer es establecer el número de reductores. Cómo funciona esto es que cada reductor genera un archivo, por lo que si sabe que su archivo OUTPUT es de 128 MB (la entrada es irrelevante) y desea que cada uno de sus archivos de salida no supere los 16K cada uno, puede asignar 8 reductores (128/16). NOTA: es probable que los archivos sean aproximadamente 16K cada uno, y no hay garantía de que todos los archivos sean < 16K.

Cuestiones relacionadas