hadoop
¿Qué es HDFS?
Buscar..
Observaciones
Una buena explicación de HDFS y cómo funciona.
La sintaxis debe contener los comandos que pueden usarse en HDFS.
HDFS - Sistema de archivos distribuidos de Hadoop
Hadoop Distributed File System (HDFS) es un sistema de archivos basado en Java que proporciona almacenamiento de datos escalable y confiable que está diseñado para abarcar grandes grupos de servidores de productos básicos. HDFS, MapReduce y YARN forman el núcleo de Apache ™ Hadoop®.
HDFS está diseñado para ser altamente tolerante a fallos, lo que se logra al guardar varias copias (3 de manera predeterminada) de un bloque de datos dado en múltiples nodos.
Buscando archivos en HDFS
Para buscar un archivo en el sistema de archivos Hadoop Distributed:
hdfs dfs -ls -R / | grep [search_term]
En el comando anterior,
-ls
es para listar archivos
-R
es para recursivo (iterar a través de subdirectorios)
/
significa desde el directorio raíz
|
para canalizar la salida del primer comando al segundo
comando grep
para extraer cadenas coincidentes
[search_term]
nombre de archivo [search_term]
que se buscará en la lista de todos los archivos en el sistema de archivos hadoop.
Alternativamente, el siguiente comando también se puede usar para encontrar y aplicar algunas expresiones:
hadoop fs -find / -name test -print
Busca todos los archivos que coinciden con la expresión especificada y les aplica las acciones seleccionadas. Si no se especifica ninguna ruta, el directorio de trabajo actual se establece de forma predeterminada. Si no se especifica ninguna expresión, el valor predeterminado es -print.
Se reconocen las siguientes expresiones primarias:
-
name pattern
-
iname pattern
Se evalúa como verdadero si el nombre base del archivo coincide con el patrón utilizando el sistema estándar de archivos del globo. Si se usa -iname, la coincidencia no distingue entre mayúsculas y minúsculas.
-
print
-
print0Always
Evalúa a la verdad. Hace que la ruta de acceso actual se escriba en la salida estándar. Si se -print0
expresión -print0
se agrega un carácter ASCII NULL.
Se reconocen los siguientes operadores:
expression -a expression
expression -and expression
expression expression
Bloques y Splits HDFS
Tamaño de bloque y bloques en HDFS : HDFS tiene el concepto de almacenar datos en bloques cada vez que se carga un archivo. Los bloques son las particiones físicas de datos en HDFS (o en cualquier otro sistema de archivos, para el caso).
Cada vez que se carga un archivo en el HDFS, se divide físicamente (sí, el archivo se divide) en diferentes partes conocidas como bloques. El número de bloques depende del valor de
dfs.block.size
enhdfs-site.xml
Idealmente, el tamaño del bloque se establece en un valor alto, como 64/128/256 MB (en comparación con 4KB en FS normal). El valor de tamaño de bloque predeterminado en la mayoría de las distribuciones de Hadoop 2.x es de 128 MB. La razón para un tamaño de bloque más alto es porque Hadoop está hecho para tratar PetaBytes de datos con cada archivo que van desde unos pocos cientos de MegaBytes hasta el orden de TeraBytes.
Digamos, por ejemplo, que tiene un archivo de tamaño de 1024 MB. Si su tamaño de bloque es de 128 MB, obtendrá 8 bloques de 128 MB cada uno. Esto significa que su namenode necesitará almacenar metadatos de
8 x 3 = 24
archivos (3 es el factor de replicación).Considere el mismo escenario con un tamaño de bloque de 4 KBs. El resultado será
1GB / 4KB = 250000
bloques y eso requerirá que el namenode guarde los metadatos para750000
bloques para solo un archivo de 1GB. Dado que toda esta información relacionada con los metadatos se almacena en la memoria, se prefiere un tamaño de bloque mayor para guardar ese bit de carga adicional en el NameNode.Ahora, nuevamente, el tamaño del bloque no se establece en un valor extremadamente alto como 1GB, etc. porque, idealmente, se inicia 1 mapeador para cada bloque de datos. Por lo tanto, si establece el tamaño de bloque en 1 GB, podría perder el paralelismo, lo que podría resultar en un rendimiento global más lento.
2.) Tamaño dividido en HDFS : Las divisiones en el procesamiento de Hadoop son los fragmentos lógicos de los datos. Cuando los archivos se dividen en bloques, hadoop no respeta ningún archivo bopundario. Simplemente divide los datos en función del tamaño del bloque. Diga que si tiene un archivo de 400 MB, con 4 líneas y cada línea con 100 MB de datos, obtendrá 3 bloques de 128 MB x 3
y 16 MB x 1
. Pero cuando se calculan las divisiones de entrada mientras se guardan los datos, los límites de archivo / registro se tienen en cuenta y en este caso tendremos 4 divisiones de entrada de 100 MB cada una, si está utilizando, por ejemplo, NLineInputFormat
.
El tamaño dividido también se puede establecer por trabajo utilizando la propiedad mapreduce.input.fileinputformat.split.maxsize
Una muy buena explicación de Blocks vs Splits se puede encontrar en esta Respuesta SO /