tutorial - hadoop wikipedia
Cambiar el tamaƱo de bloque del archivo dfs (5)
En conf / folder podemos cambiar el valor de dfs.block.size
en el archivo de configuración hdfs-site.xml. En hadoop versión 1.0 el tamaño predeterminado es 64 MB y en la versión 2.0 el tamaño predeterminado es 128 MB.
<property>
<name>dfs.block.size<name>
<value>134217728<value>
<description>Block size<description>
<property>
Mi mapa actualmente no es eficiente al analizar un conjunto particular de archivos (un total de 2 TB). Me gustaría cambiar el tamaño de bloque de los archivos en Hadoop dfs (de 64 MB a 128 MB). No puedo encontrar la forma de hacerlo en la documentación para un solo conjunto de archivos y no para todo el clúster.
¿Qué comando cambia el tamaño del bloque cuando lo cargo? (Como copiar de local a dfs)
Para mí, tuve que cambiar ligeramente la respuesta de Bkkbrad para que funcione con mi configuración, en caso de que alguien más encuentre esta pregunta más adelante. Tengo Hadoop 0.20 ejecutándose en Ubuntu 10.10:
hadoop fs -D dfs.block.size=134217728 -put local_name remote_location
La configuración para mí no es fs.local.block.size
sino más bien dfs.block.size
Podemos cambiar el tamaño del bloque utilizando la propiedad denominada dfs.block.size en el archivo hdfs-site.xml . Nota: debemos mencionar el tamaño en bits. Por ejemplo: 134217728 bits = 128 MB.
también puedes modificar tu tamaño de bloque en tus programas como este
Configuration conf = new Configuration() ;
conf.set( "dfs.block.size", 128*1024*1024) ;
Cambio mi respuesta! Solo necesita establecer la configuración de configuración fs.local.block.size
apropiada cuando usa la línea de comando.
hadoop fs -D fs.local.block.size=134217728 -put local_name remote_location
Respuesta original
Puede programar de forma programática el tamaño del bloque cuando crea un archivo con la API de Hadoop. Desafortunadamente, no puede hacer esto en la línea de comando con el hadoop fs -put
. Para hacer lo que quiera, tendrá que escribir su propio código para copiar el archivo local a una ubicación remota; no es difícil, simplemente abra un FileInputStream
para el archivo local, cree el OutputStream
remoto con FileSystem.create
, y luego use algo como IOUtils.copy
de Apache Commons IO para copiar entre las dos transmisiones.