Puedo obtener múltiples archivos pequeños en mi entrada de directorio que quiero combinar en un solo archivo sin necesidad de utilizar el sistema de archivos local o escribir mapreds. Es allí una manera de que yo pueda hacer uso de hadoof fs comandos o de Cerdo?

Gracias!

  • Usted debe aceptar una respuesta si su pregunta ya ha sido contestada.
InformationsquelleAutor uHadoop | 2010-08-23

8 Comentarios

  1. 22

    Con el fin de mantener todo en la red usan hadoop streaming con un solo reductor y el gato como el mapper y el reductor (básicamente un noop) – añadir compresión con MR banderas.

    hadoop jar \
        $HADOOP_PREFIX/share/hadoop/tools/lib/hadoop-streaming.jar \<br>
        -Dmapred.reduce.tasks=1 \
        -Dmapred.job.queue.name=$QUEUE \
        -input "$INPUT" \
        -output "$OUTPUT" \
        -mapper cat \
        -reducer cat
    

    Si quieres compresión agregar

    -Dmapred.de salida.comprimir=true \
    -Dmapred.de salida.la compresión.codec=org.apache.hadoop.io.comprimir.GzipCodec

    • Creo que es el mejor método.
    • Me imagino que esto podría cambiar el orden de las líneas?
    • Creo que el pedido va a ser determinista, ordenados por clave, ya que sólo tenemos un reductor de velocidad. Esto se basa en recordar el shuffle, ordenar, reductor de de modelo.
    • no es justo la mejor respuesta; es la respuesta. todas las demás respuestas no son correctas (por ejemplo, fs -getmerge va a poner el archivo localmente, no en hdfs )
    • Uhm, haciendo que añade una tabulación en el final de cada línea… ¿cómo debemos arreglar eso?
  2. 15
    hadoop fs -getmerge <dir_of_input_files> <mergedsinglefile>
    
    • por extraño que esto me da ningún resultado. no sé por qué.
    • tal vez su directorio sólo tiene archivos vacíos
    • Creo que mergedsinglefile es local, no se distribuye
    • esto con el resultado de los archivos del sistema de ficheros local, que el OP quiere evitar
    • Esto no poner el archivo en hdfs, en lugar guarda en la dfs. Luego tenemos que poner el archivo a hdfs el uso de hdfs -poner.
  3. 7

    bueno…se me ocurrió una manera de usar hadoop fs comandos –

    hadoop fs -cat [dir]/* | hadoop fs -put - [destination file]
    

    Funcionó cuando lo probé…cualquier escollos que uno puede pensar?

    Gracias!

    • Pero en este caso, usted va a descargar todos los datos de HDFS el nodo que se está ejecutando el comando (local?), y luego subirlo a HDFS. Esto no es demasiado eficaz si usted tiene mucho de datos
    • Otra desventaja es que en ocasiones no se puede obtener también algunos indeseables de entrada de stdin. Me encontré una vez en un HA habilitado para clúster cuando algunos de los mensajes de advertencia se encuentran atrapadas en la salida.
  4. 2

    Si configura fusible para montar su HDFS a un directorio local, luego de su salida puede ser el sistema de archivos montado.

    Por ejemplo, he nuestros HDFS montado a /mnt/hdfs localmente. Yo ejecute el comando siguiente y funciona muy bien:

    hadoop fs -getmerge /reports/some_output /mnt/hdfs/reports/some_output.txt
    

    Por supuesto, hay otras razones para el uso de fusibles para montar HDFS a un directorio local, pero este fue un agradable efecto secundario para nosotros.

  5. 1

    Puede utilizar la herramienta HDFSConcat, de nuevo en HDFS 0.21, para realizar esta operación sin incurrir en el costo de una copia.

    • Gracias Jeff, mira en HDFSConcat. Actualmente estamos en 0.20.2 así que ahora voy a hacer un Har de todos los archivos y, a continuación, la lectura de cerdo. De esta forma los datos se queda en HDFS.
    • Debo señalar que esta herramienta tiene limitaciones que se destacaron en issues.apache.org/jira/browse/HDFS-950. Los archivos deben tener el mismo tamaño de bloque y de ser propiedad del mismo usuario.
  6. 1

    Si usted está trabajando en Hortonworks clúster y desea combinar varios archivos presentes en HDFS ubicación en un solo archivo, a continuación, puede ejecutar ‘hadoop-streaming-2.7.1.2.3.2.0-2950.jar» jar que se ejecuta solo el reductor y obtener el archivo combinado en HDFS ubicación de salida.

    $ hadoop jar /usr/hdp/2.3.2.0-2950/hadoop-mapreduce/hadoop-streaming-2.7.1.2.3.2.0-2950.jar \

    -Dmapred.reduce.tasks=1 \
    -input "/hdfs/input/dir" \
    -output "/hdfs/output/dir" \
    -mapper cat \
    -reducer cat
    

    Puede descargar este tarro de
    Obtener hadoop streaming jar

    Si usted está escribiendo chispa de puestos de trabajo y desea obtener un archivo combinado de evitar múltiples RDD creaciones y cuellos de botella de rendimiento el uso de esta pieza de código antes de la transformación de su RDD

    sc.textFile("hdfs://...../part*).coalesce(1).saveAsTextFile("hdfs://...../filename)

    Esto va a combinar todos los archivos en uno y guardarlo de nuevo en hdfs ubicación

  7. 0

    Abordar este de Apache Pig perspectiva,

    Para combinar dos archivos con un esquema idéntico a través de Cerdo, de la UNIÓN de comando puede ser utilizado

     A = load 'tmp/file1' Using PigStorage('\t') as ....(schema1)
     B = load 'tmp/file2' Using PigStorage('\t') as ....(schema1) 
     C = UNION A,B
     store C into 'tmp/fileoutput' Using PigStorage('\t')
    
  8. 0

    Todas las soluciones son equivalentes a hacer un

    hadoop fs -cat [dir]/* > tmp_local_file  
    hadoop fs -copyFromLocal tmp_local_file 
    

    sólo significa que el local m/c I/O está en la ruta crítica de la transferencia de datos.

Dejar respuesta

Please enter your comment!
Please enter your name here