hadoop - the - reduce in mapreduce means
Acerca de la división de archivos Hadoop/HDFS (3)
Sólo quiero confirmar en el siguiente. Verifique si esto es correcto: 1. De acuerdo con mi entendimiento, cuando copiemos un archivo en HDFS, ese es el punto en el que el archivo (asumiendo su tamaño> 64MB = tamaño de bloque HDFS) se divide en varios fragmentos y cada fragmento se almacena en diferentes nodos de datos.
El contenido del archivo ya se divide en partes cuando el archivo se copia en HDFS y esa división de archivos no se produce en el momento de ejecutar el trabajo de mapa. Las tareas del mapa solo se programan de tal manera que funcionen en cada parte de max. tamaño 64 MB con localidad de datos (es decir, la tarea de mapa se ejecuta en ese nodo que contiene los datos / trozo)
La división de archivos también ocurre si el archivo está comprimido (gzipped) pero MR garantiza que cada archivo sea procesado por un solo asignador, es decir, MR recopilará todos los fragmentos del archivo gzip que se encuentran en otros nodos de datos y se los entregará todo al único asignador.
Lo mismo que lo anterior ocurrirá si definimos isSplitable () para devolver false, es decir, todos los fragmentos de un archivo serán procesados por un asignador que se ejecuta en una máquina. MR leerá todos los fragmentos de un archivo de diferentes nodos de datos y los pondrá a disposición de un solo asignador.
La respuesta de David casi golpea el clavo en su cabeza, simplemente lo estoy explicando aquí.
Aquí hay dos conceptos distintos en funcionamiento, cada concepto es manejado por una entidad diferente en el marco de trabajo de hadoop
En primer lugar --
1) División de un archivo en bloques : cuando un archivo se escribe en HDFS, HDFS divide el archivo en bloques y se encarga de su replicación. Esto se hace una vez (en su mayoría) y luego está disponible para todos los trabajos de MR que se ejecutan en el clúster. Esta es una configuración de todo el clúster
En segundo lugar
2) División de un archivo en divisiones de entrada : cuando la ruta de entrada se pasa a un trabajo de MR, la tarea de MR utiliza la ruta junto con el formato de entrada configurado para dividir los archivos especificados en la ruta de entrada en divisiones, cada división es procesada por un tarea de mapa El cálculo de las divisiones de entrada se realiza mediante el formato de entrada cada vez que se ejecuta un trabajo
Ahora, una vez que tengamos esto en nuestras manos, podemos entender que el método IsSplitable () se encuentra en la segunda categoría.
Para concretar esto, eche un vistazo al flujo de datos de escritura HDFS (Concepto 1)
El segundo punto del diagrama es probablemente donde ocurre la división, tenga en cuenta que esto no tiene nada que ver con la ejecución de un trabajo de MR
Ahora eche un vistazo a los pasos de ejecución de un trabajo de MR
Aquí el primer paso es el cálculo de las divisiones de entrada a través del formato de entrada configurado para el trabajo.
Gran parte de su confusión se debe al hecho de que está combinando ambos conceptos, espero que esto lo haga un poco más claro.
Sí, el contenido del archivo se divide en partes cuando el archivo se copia en el HDFS. El tamaño del bloque es configurable, y si se trata de 128 MB, entonces 128 MB completos serían un bloque, no 2 bloques de 64 MB por separado. Además, no es necesario que cada fragmento de un archivo se almacene en un nodo de datos separado. datanode puede tener más de una porción de un archivo en particular. Y una porción en particular puede estar presente en más de una datanodes en función del factor de replicación.
Tu comprensión no es ideal. Me gustaría señalar que hay dos procesos, casi independientes: la división de archivos en bloques HDFS, y la división de los archivos para su procesamiento por los diferentes mapeadores.
HDFS divide los archivos en bloques según el tamaño de bloque definido.
Cada formato de entrada tiene su propia lógica sobre cómo los archivos se pueden dividir en partes para el procesamiento independiente por parte de diferentes asignadores. La lógica predeterminada de FileInputFormat es dividir el archivo por bloques HDFS. Puedes implementar cualquier otra lógica.
La compresión, por lo general es un enemigo de la división, por lo que empleamos una técnica de compresión de bloques para permitir la división de los datos comprimidos. Esto significa que cada parte lógica del archivo (bloque) se comprime de forma independiente.