Está en la página 1de 39

17/10/2019 Operaciones

Página 1

En cascada, esta sería una línea de código: nuevo GroupBy ( <previous> , <agrupación
fields> , <campos de clasificación secundarios> ), donde <previous> es la tubería que vino
antes de.

Operaciones
Como se mencionó anteriormente, la conexión en cascada parte de MapReduce al introducir alternativas
operaciones que se aplican a tuplas individuales o grupos de tuplas ( Figura 24-5 ):

Función
Una función opera en tuplas de entrada individuales y puede devolver cero o más salidas
tuplas para cada entrada. Las funciones son aplicadas por el cada tubo.

Filtrar
Un filtro es un tipo especial de función que devuelve un valor booleano que indica
si la tupla de entrada actual debe eliminarse de la secuencia de tuplas. UNA
La función podría servir para este propósito, pero el filtro está optimizado para este caso, y
muchos filtros se pueden agrupar por filtros "lógicos" como AND, OR, XOR y NOT, rápidamente
creando operaciones de filtrado más complejas.

Agregador
Un agregador realiza alguna operación contra un grupo de tuplas, donde el
las tuplas agrupadas son por un conjunto común de valores de campo (por ejemplo, todas las tuplas que tienen
el mismo valor de "apellido"). Las implementaciones comunes del agregador serían Sum,
Cuenta, promedio, máximo y mínimo.

Buffer
Un Buffer es similar a un Agregador, excepto que está optimizado para actuar como un "desplazamiento
ventana "en todas las tuplas en una agrupación única. Esto es útil cuando el desarrollo
oper necesita insertar de manera eficiente los valores faltantes en un conjunto ordenado de tuplas (como un
fecha o duración faltantes) o cree un promedio móvil. Por lo general, el agregador es el
operación de elección cuando se trabaja con grupos de tuplas, ya que muchos agregadores
se pueden encadenar de manera muy eficiente, pero a veces un Buffer es la mejor herramienta para
el trabajo.

Operaciones | 673

Página 2

https://translate.googleusercontent.com/translate_f 1/39
17/10/2019 Operaciones

Figura 24-5. Tipos de operaciones

Las operaciones están vinculadas a las tuberías cuando se crea el ensamblaje de la tubería ( Figura 24-6 ).

Figura 24-6. Una asamblea de operaciones

Las tuberías Every and Every proporcionan un mecanismo simple para seleccionar algunos o todos los valores
fuera de una tupla de entrada antes de que los valores pasen a su operación secundaria. Y hay un
mecanismo simple para fusionar los resultados de la operación con la tupla de entrada original para
crear la tupla de salida. Sin entrar en gran detalle, esto permite cada operación
para preocuparse solo por los valores y campos de la tupla de argumentos, no por el conjunto completo de campos en el
Tupla de entrada actual. Posteriormente, las operaciones pueden ser reutilizables en todas las aplicaciones en
De la misma manera que los métodos Java pueden ser reutilizables.

Por ejemplo, en Java, un método declarado como concatenate (String first, String
segundo) es más abstracto que concatenar (Persona persona). En el segundo caso, el
la función concatenate () debe "saber" sobre el objeto Person; en el primer caso, es
independiente de dónde provienen los datos. Las operaciones en cascada exhiben esta misma calidad.

674 Capítulo 24: Cascada

Página 3

Grifos, esquemas y flujos


En muchos de los diagramas anteriores, hay referencias a "fuentes" y "sumideros".
En cascada, todos los datos se leen o se escriben en instancias de Tap, pero se convierten ay desde
instancias de tuplas a través de objetos Scheme:

Grifo
Un Tap es responsable de las partes "cómo" y "dónde" de acceder a los datos. Por ejemplo,
¿Están los datos en HDFS o en el sistema de archivos local? ¿En Amazon S3 o sobre HTTP?

Esquema
Un esquema es responsable de leer datos sin procesar y convertirlos en una tupla y / o
escribir una tupla en datos sin procesar, donde estos datos "en bruto" pueden ser líneas de texto, Hadoop
archivos de secuencia binaria, o algún formato propietario.

Tenga en cuenta que los grifos no son parte de un conjunto de tuberías, por lo que no son un tipo de tubería. Pero
se conectan con ensambles de tubería cuando se hacen ejecutables en clúster. Cuando
Se conecta un conjunto de tubería con el número necesario de fuente y sumidero.
ces, tenemos un flujo. Los grifos emiten o capturan los nombres de campo del conjunto de tubería
espera. Es decir, si un Tap emite una tupla con el nombre de campo "línea" (leyendo datos de
un archivo en HDFS), el cabezal del conjunto de tubería también debe esperar un valor de "línea".
De lo contrario, el proceso que conecta el ensamblaje de la tubería con los grifos inmediatamente
falla con un error.

Por lo tanto, los ensamblajes de tubería son realmente definiciones de proceso de datos y no son "ejecutables" en su
propio. Deben estar conectados a la fuente y hundir las instancias de Tap antes de que puedan ejecutarse en
un clúster. Esta separación entre grifos y conjuntos de tuberías es parte de lo que hace que Cas‐
cading tan poderoso.

Si piensa en un ensamblaje de tubería como una clase Java, entonces un Flow es como una instancia de objeto Java
( Figura 24-7 ). Es decir, el mismo conjunto de tubería puede ser "instanciado" muchas veces en
Nuevos flujos, en la misma aplicación, sin temor a interferencias entre ellos. Esta
permite crear y compartir conjuntos de tuberías como las bibliotecas estándar de Java.

https://translate.googleusercontent.com/translate_f 2/39
17/10/2019 Operaciones

Grifos, esquemas y flujos | 675

Página 4

Figura 24-7. Un flujo

Cascada en la práctica
Ahora que sabemos qué es Cascading y tenemos una buena idea de cómo funciona, qué hace
parece una aplicación escrita en cascada? Ver Ejemplo 24-1 .

Ejemplo 24-1. Contar palabras y ordenar


Esquema sourceScheme =
nueva TextLine ( nuevos campos ( "línea" ));
Fuente de tap =
nuevo Hfs ( sourceScheme , inputPath );

Esquema sinkScheme = new TextLine ();


Tap sink =
nuevo Hfs ( sinkScheme , outputPath , SinkMode . REPLACE );

Conjunto de tubería = nueva tubería ( "recuento de palabras" );

String regexString = "(? <! \\ pL) (? = \\ pL) [^] * (? <= \\ pL) (?! \\ pL)" ;
Función regex = new RegexGenerator ( nuevos campos ( "palabra" ), regexString );
asamblea =
nuevo Cada ( ensamblaje , nuevos campos ( "línea" ), expresiones regulares );

asamblea =
nuevo GroupBy ( ensamblaje , nuevos campos ( "palabra" ));

Cuenta de agregador = nueva cuenta ( nuevos campos ( "cuenta" ));


asamblea = nuevo Cada ( asamblea , recuento );

asamblea =
nuevo GroupBy ( ensamblaje , nuevos campos ( "conteo" ), nuevos campos ( "palabra" ));

FlowConnector flowConnector = new FlowConnector ();


Flujo flujo =
flowConnector . connect ( "conteo de palabras" , fuente , sumidero , ensamblaje );

676 Capítulo 24: Cascada

Página 5

fluya . completo ();

Creamos un nuevo Esquema que lee archivos de texto simples y emite una nueva Tupla para
https://translate.googleusercontent.com/translate_f 3/39
17/10/2019 Operaciones
cada línea en un campo llamado "línea", según lo declarado por la instancia de Fields.
Creamos un nuevo esquema que escribe archivos de texto simples y espera una tupla con
cualquier cantidad de campos / valores. Si hay más de un valor, serán tab-
delimitado en el archivo de salida.
Creamos instancias de Tap de origen y sumidero que hacen referencia al archivo de entrada y salida
directorio, respectivamente. The Tap Tap sobrescribirá cualquier archivo que ya exista.
Construimos la cabeza de nuestro conjunto de tubería y lo llamamos "recuento de palabras".
El nombre se utiliza para enlazar la fuente y hundir Taps en el ensamblado. Cabezas múltiples
o colas requerirían nombres únicos.
Construimos un cada tubo con una función que analizará el campo "línea" en un
nueva Tupla por cada palabra encontrada.
Construimos una tubería GroupBy que creará una nueva agrupación de Tuplas para cada
valor único en el campo "palabra".
Construimos una tubería Every con un agregador que contará el número de
Tuplas en cada grupo de palabras único. El resultado se almacena en un campo llamado "recuento".
Construimos una tubería GroupBy que creará una nueva agrupación de Tuplas para cada
valor único en el campo "recuento" y clasificación secundaria de cada valor en el campo
"Palabra". El resultado será una lista de valores "recuento" y "palabra" con "recuento" ordenados
en orden creciente.
Conectamos el conjunto de tubería a sus fuentes y sumideros en un flujo, y luego ejecutamos
El flujo en el clúster.

En el ejemplo, contamos las palabras encontradas en el documento de entrada y clasificamos


los recuentos en su orden natural (ascendente). Si algunas palabras tienen el mismo valor de "conteo",
Estas palabras se ordenan en su orden natural (alfabético).

Un problema obvio con este ejemplo es que algunas palabras pueden tener letras mayúsculas
en algunos casos, por ejemplo, "the" y "The" cuando la palabra aparece al principio
de una oración Podríamos considerar insertar una nueva operación para forzar todas las palabras a
en minúsculas, pero nos damos cuenta de que todas las aplicaciones futuras que necesitan analizar palabras de
los documentos deben tener el mismo comportamiento, por lo que crearemos una tubería reutilizable llamada
SubAssembly, tal como lo haríamos creando una subrutina en una aplicación tradicional
(ver Ejemplo 24-2 ).

Ejemplo 24-2. Crear un subensamblaje


clase pública ParseWordsAssembly extiende SubAssembly
{
pública ParseWordsAssembly ( Pipe anterior )

Cascada en la práctica | 677

Página 6

{
String regexString = "(? <! \\ pL) (? = \\ pL) [^] * (? <= \\ pL) (?! \\ pL)" ;
Función regex = new RegexGenerator ( nuevos campos ( "palabra" ), regexString );
previo = nuevo Cada ( anterior , nuevos campos ( "línea" ), expresiones regulares );

String exprString = "word.toLowerCase ()" ;


Expresión de función =
nueva ExpressionFunction ( nuevos campos ( "word" ), exprString , String . class );
previo = nuevo Cada ( anterior , nuevos campos ( "palabra" ), expresión );

setTails ( anterior );
}
}

Subclasemos la clase SubAssembly, que es en sí misma una especie de Pipe.


Creamos una función de expresión Java que llamará a toLowerCase () en la cadena
valor en el campo llamado "palabra". También debemos pasar en el tipo Java el
expresión espera que "palabra" sea, en este caso, Cadena. ( Janino se usa debajo del
cubiertas)
Le decimos a la superclase SubAssembly dónde termina la cola de nuestro subconjunto de tubería
son.

Primero, creamos una tubería SubAssembly para contener nuestro ensamblaje de tubería de "palabras de análisis". Porque
Esta es una clase Java, se puede reutilizar en cualquier otra aplicación, siempre que haya una entrada
campo llamado "palabra" ( Ejemplo 24-3 ). Tenga en cuenta que hay formas de hacer que esta función incluso
más genérico, pero están cubiertos en la Guía del usuario en cascada .

Ejemplo 24-3. Ampliar el recuento de palabras y ordenar con un Subconjunto

https://translate.googleusercontent.com/translate_f 4/39
17/10/2019 Operaciones
Esquema sourceScheme = new TextLine ( nuevos campos ( "línea" ));
Toque source = new Hfs ( sourceScheme , inputPath );

Esquema sinkScheme = new TextLine ( nuevos campos ( "word" , "count" ));


Tap sink = new Hfs ( sinkScheme , outputPath , SinkMode . REPLACE );

Conjunto de tubería = nueva tubería ( "recuento de palabras" );

asamblea =
nuevo ParseWordsAssembly ( ensamblaje );

ensamblaje = nuevo GroupBy ( ensamblaje , nuevos campos ( "palabra" ));

Cuenta de agregador = nueva cuenta ( nuevos campos ( "cuenta" ));


asamblea = nuevo Cada ( asamblea , recuento );

ensamblaje = nuevo GroupBy ( ensamblaje , nuevos campos ( "conteo" ), nuevos campos ( "palabra" ));

FlowConnector flowConnector = new FlowConnector ();


Flujo flujo = flowConnector . connect ( "conteo de palabras" , fuente , sumidero , ensamblaje );

678 | Capítulo 24: Cascada

Página 7

fluya . completo ();

Reemplazamos cada uno del ejemplo anterior con nuestra tubería ParseWordsAssembly.

Finalmente, simplemente sustituimos en nuestro nuevo Subconjunto justo donde el anterior Todos y
La función del analizador de palabras se utilizó en el ejemplo anterior. Este anidamiento puede continuar como
profundo según sea necesario.

Flexibilidad
Retrocedamos y veamos qué nos ha dado este nuevo modelo, o mejor aún, qué es
ha quitado.

Usted ve, ya no pensamos en términos de trabajos MapReduce, o Mapper y Reductor


implementaciones de interfaz y cómo vincular o vincular trabajos posteriores de MapReduce a
los que les preceden. Durante el tiempo de ejecución, el "planificador" en cascada descubre las opciones
forma temporal de dividir el ensamblaje de tuberías en trabajos de MapReduce y administrar los enlaces
entre ellos ( figura 24-8 ).

Figura 24-8. Cómo se traduce un flujo en trabajos encadenados de MapReduce

Debido a esto, los desarrolladores pueden crear aplicaciones de granularidad arbitraria. Pueden comenzar
con una pequeña aplicación que simplemente filtra un archivo de registro, luego construye iterativamente más funciones en
la aplicación según sea necesario.

Dado que Cascading es una API y no una sintaxis como cadenas de SQL, es más flexible. primero
desactivado, los desarrolladores pueden crear lenguajes específicos de dominio (DSL) utilizando su idioma favorito
indicadores, como Groovy, JRuby, Jython, Scala y otros (vea el sitio del proyecto para el examen
ples). En segundo lugar, los desarrolladores pueden ampliar varias partes de la conexión en cascada, como permitir
Tom Thrift o objetos JSON para leer y escribir y permitir que se pasen
a través de la corriente de tuplas.

Flexibilidad | 679

https://translate.googleusercontent.com/translate_f 5/39
17/10/2019 Operaciones
Página 8

Hadoop y Cascading en ShareThis


ShareThis es una red para compartir que hace que sea sencillo compartir cualquier contenido en línea. Con
el clic de un botón en una página web o complemento del navegador, ShareThis permite a los usuarios
acceda menos a sus contactos y redes desde cualquier lugar en línea y comparta el contenido
por correo electrónico, mensajería instantánea, Facebook, Digg, SMS móvil y servicios similares, sin salir nunca
La página actual. Los editores pueden implementar el botón ShareThis para acceder al servicio
capacidades de uso compartido universal para generar tráfico, estimular la actividad viral y rastrear
ing de contenido en línea. ShareThis también simplifica los servicios de redes sociales al reducir el desorden
en páginas web y proporcionando distribución instantánea de contenido a través de redes sociales,
grupos filiados y comunidades.

A medida que los usuarios de ShareThis comparten páginas e información a través de los widgets en línea, un continuo
Una gran cantidad de eventos ingresa a la red ShareThis. Estos eventos se filtran primero y
procesado y luego entregado a varios sistemas de back-end, incluidos AsterData,
Hypertable y Katta.

El volumen de estos eventos puede ser enorme; demasiado grande para procesar con sistemas tradicionales.
Estos datos también pueden estar muy "sucios" gracias a los "ataques de inyección" de sistemas corruptos,
errores del navegador o widgets defectuosos. Por esta razón, los desarrolladores de ShareThis decidieron
implementar Hadoop como la interfaz de preprocesamiento y orquestación para su sistema de backend
Tems. También eligieron usar Amazon Web Services para alojar sus servidores en Elastic
Computing Cloud (EC2) y proporcionar almacenamiento a largo plazo en el Servicio de almacenamiento simple
(S3), con miras a aprovechar Elastic MapReduce (EMR).

En esta descripción general, nos centraremos en la “tubería de procesamiento de registros” ( Figura 24-9 ). Esta
la tubería simplemente toma los datos almacenados en un cubo S3, los procesa (como se describe en breve),
y almacena los resultados nuevamente en otro cubo. Se utiliza el Servicio de cola simple (SQS)
para coordinar los eventos que marcan el inicio y la finalización de las ejecuciones de procesamiento de datos.
En sentido descendente, otros procesos extraen datos para cargarlos en AsterData, extraen listas de URL de
Hipertable para obtener un rastreo web o extraer datos de páginas rastreadas para crear índices de Lucene
para uso de Katta. Tenga en cuenta que Hadoop es fundamental para la arquitectura ShareThis. Es usado para
coordinar el procesamiento y movimiento de datos entre componentes arquitectónicos.

680 Capítulo 24: Cascada

Página 9

Figura 24-9. La tubería de procesamiento de registros ShareThis

Con Hadoop como interfaz, todos los registros de eventos se pueden analizar, filtrar, limpiar y
organizado por un conjunto de reglas antes de cargarse en el clúster AsterData o usarse
por cualquier otro componente. AsterData es un almacén de datos en clúster que puede admitir grandes

https://translate.googleusercontent.com/translate_f 6/39
17/10/2019 Operaciones
conjuntos de datos y que permite consultas complejas ad hoc utilizando una sintaxis SQL estándar. Compartir-
Esto eligió limpiar y preparar los conjuntos de datos entrantes en el clúster Hadoop y luego
cargar esos datos en el clúster AsterData para análisis e informes ad hoc. Aunque
ese proceso hubiera sido posible con AsterData, tenía mucho sentido usar
Hadoop como la primera etapa en la tubería de procesamiento para compensar la carga en los datos principales
almacén.

Se eligió la conexión en cascada como la API de procesamiento de datos principal para simplificar el desarrollo
procesar, codificar cómo se coordinan los datos entre los componentes arquitectónicos y proporcionar
la interfaz orientada al desarrollador para esos componentes. Esto representa un alejamiento de
casos de uso de Hadoop más "tradicionales", que esencialmente solo consultan datos almacenados. Cascada
y Hadoop juntos proporcionan una estructura mejor y más simple para la solución completa,
de extremo a extremo y, por lo tanto, proporcionan más valor a los usuarios.

Para los desarrolladores, Cascading facilitó comenzar con una prueba unitaria simple (creada por
subclassing cascading.ClusterTestCase) que realizó un análisis de texto simple y luego a la capa
en más reglas de procesamiento mientras se mantiene la aplicación organizada lógicamente para el mantenimiento
maricón. La conexión en cascada ayudó a esta organización de dos maneras. Primero, la ópera independiente
Las funciones (funciones, filtros, etc.) se pueden escribir y probar de forma independiente. En segundo lugar, el
la aplicación se dividió en etapas: una para analizar, otra para reglas y una etapa final
para agrupar / cotejar los datos, todo a través de la clase base SubAssembly descrita anteriormente.

Los datos que provienen de los registradores ShareThis se parecen mucho a los registros de Apache, con fecha /
marcas de tiempo, compartir URL, URL de referencia y un poco de metadatos. Para usar los datos para

Hadoop y Cascading en ShareThis | 681

Página 10

análisis posterior, las URL debían descomprimirse (analizando los datos de la cadena de consulta, hacer
nombres principales, etc.). Entonces, se creó un SubAssembly de nivel superior para encapsular el análisis,
y los subensamblajes secundarios se anidaban en el interior para manejar campos específicos si eran suficientes
Ciently complejo para analizar.

Lo mismo se hizo para aplicar las reglas. Como cada tupla pasó por las reglas
SubAssembly, se marcó como "incorrecto" si se activaba alguna de las reglas. Junto con
Etiqueta "mala", una descripción de por qué el registro era malo se agregó a la Tupla para más tarde
revisión.

Finalmente, se creó un divisor SubAssembly para hacer dos cosas. Primero, permitió que
tuple stream para dividir en dos: un stream para datos "buenos" y otro para datos "malos". Segundo,
el divisor agrupaba los datos en intervalos, como cada hora. Para hacer esto, solo dos
las operaciones fueron necesarias: la primera en crear el intervalo a partir del valor de la marca de tiempo
ya presente en la secuencia, y el segundo en usar el intervalo y los metadatos buenos / malos
para crear una ruta de directorio (por ejemplo, 05 / good / , donde "05" son las 5 am y "good" significa
la tupla pasó todas las reglas). Este camino sería utilizado por los Templa en cascada
teTap, un Tap especial que puede generar dinámicamente transmisiones de tuplas en diferentes ubicaciones
basado en valores en la tupla. En este caso, TemplateTap utilizó el valor de "ruta" para
crear la ruta de salida final.

Los desarrolladores también crearon un cuarto Subconjunto, este para aplicar Cascading Asser
iones durante las pruebas unitarias Estas afirmaciones verificaron dos veces que las reglas y el análisis secundario
Las asambleas hicieron su trabajo.

En la prueba unitaria en el Ejemplo 24-4 , vemos que el divisor no se está probando, pero se agrega en
No se muestra otra prueba de integración.

Ejemplo 24-4. Unidad probando un flujo


testLogParsing () vacío público arroja IOException
{
Hfs source = new Hfs ( new TextLine ( new Fields ( "line" )), sampleData );
Hfs sumidero =
nuevo Hfs ( nuevo TextLine (), outputPath + "/ parser" , SinkMode . REPLACE );

Pipe pipe = new Pipe ( "analizador" );

// dividir "línea" en pestañas


pipe = new Each ( pipe , new Fields ( "line" ), new RegexSplitter ( "\ t" ));

tubería = nuevo LogParser ( tubería );

tubería = nuevo LogRules ( tubería );


// probar solo afirmaciones
pipe = new ParserAssertions ( tubería );

Flujo flujo = nuevo FlowConnector (). conectar ( fuente , sumidero , tubería );

https://translate.googleusercontent.com/translate_f 7/39
17/10/2019 Operaciones

682 Capítulo 24: Cascada

Página 11

fluya . completo (); // ejecuta el flujo de prueba

// Verifique que haya 98 tuplas y 2 campos, y que coincida con el patrón regex
// Para los esquemas TextLine, las tuplas son {"offset", "line"}
validateLength ( flow , 98 , 2 , Pattern . compile ( "^ [0-9] + (\\ t [^ \\ t] *) {19} $" ));
}

Para la integración y la implementación, muchas de las características integradas en Cascading permitieron


integración más fácil con sistemas externos y mayor tolerancia al proceso.

En producción, todos los subconjuntos se unen y planifican en un flujo, pero en lugar de


solo los grifos fuente y sumidero, se planificaron grifos trampa ( Figura 24-10 ). Normalmente, cuando un
la operación arroja una excepción desde un mapeador remoto o una tarea reductora, el flujo fallará
y elimine todos sus trabajos administrados de MapReduce. Cuando un flujo tiene trampas, cualquier excepción es
capturado y los datos que causan la excepción se guardan en el Tap asociado con el actual
trampa. Luego se procesa la siguiente Tupla sin detener el flujo. A veces quieres
sus Flujos para fallar en errores, pero en este caso, los desarrolladores de ShareThis sabían que podían
regrese y mire los datos "fallidos" y actualice sus pruebas unitarias mientras la producción
El sistema siguió funcionando. Perder unas pocas horas de tiempo de procesamiento fue peor que perder un
Un par de malos registros.

Figura 24-10. El flujo de procesamiento de registros ShareThis

Usando los oyentes de eventos de Cascading, Amazon SQS podría integrarse. Cuando un flujo termina
En caso de error, se envía un mensaje para notificar a otros sistemas que hay datos listos para ser recogidos
de Amazon S3. En caso de falla, se envía un mensaje diferente, alertando a otros procesos.

Los procesos aguas abajo restantes retoman donde sale la tubería de procesamiento de registros
apagado en diferentes grupos independientes. La canalización de procesamiento de registros se ejecuta hoy una vez al día;
no es necesario mantener un clúster de 100 nodos sentado durante las 23 horas que no tiene nada
hacer, por lo que se retira y vuelve a poner en servicio 24 horas después.

En el futuro, sería trivial aumentar este intervalo en grupos más pequeños a cada 6
horas, o 1 hora, según lo exija el negocio. Independientemente, otros grupos están iniciando

Hadoop y Cascading en ShareThis | 683

Pagina 12

y cerrar a diferentes intervalos en función de las necesidades de las unidades de negocio


responsable de esos componentes. Por ejemplo, el componente del rastreador web (usando Bixo,
un kit de herramientas de rastreador web basado en cascada desarrollado por EMI y ShareThis) puede ejecutarse
continuamente en un grupo pequeño con un grupo de Hypertable complementario. Esta bajo demanda
El modelo funciona muy bien con Hadoop, donde cada grupo puede ajustarse para el tipo de
carga de trabajo que se espera manejar.

Resumen
Hadoop es una plataforma muy poderosa para procesar y coordinar el movimiento de
datos a través de varios componentes arquitectónicos. Su único inconveniente es que el principal
El modelo informático es MapReduce.

Cascading tiene como objetivo ayudar a los desarrolladores a crear aplicaciones potentes de forma rápida y sencilla,

https://translate.googleusercontent.com/translate_f 8/39
17/10/2019 Operaciones
a través de una API bien razonada, sin necesidad de pensar en MapReduce y al salir
el trabajo pesado de distribución de datos, replicación, gestión de procesos distribuidos y
vitalidad a Hadoop.

Lea más sobre Cascading, únase a la comunidad en línea y descargue aplicaciones de muestra
cationes visitando el sitio web del proyecto .

684 Capítulo 24: Cascada

Página 13

APÉNDICE A
Instalando Apache Hadoop

Es fácil instalar Hadoop en una sola máquina para probarlo. (Para la instalación en un clúster,
consulte el Capítulo 10 ).

En este apéndice, cubrimos cómo instalar Hadoop Common, HDFS, MapReduce y


HAGA usando una versión binaria de tarball de la Apache Software Foundation. Instrucciones
para instalar los otros proyectos cubiertos en este libro se incluyen al comienzo del
capítulos relevantes

Otra opción es usar una máquina virtual (como el Quick‐‐ de Cloudera


Iniciar VM) que viene con todos los servicios de Hadoop preinstalados y
configurado

Las siguientes instrucciones son adecuadas para sistemas basados en Unix, incluido Mac OS X
(que no es una plataforma de producción, pero está bien para el desarrollo).

Prerrequisitos
Asegúrese de tener instalada una versión adecuada de Java. Puedes consultar el Hadoop
wiki para encontrar qué versión necesitas. El siguiente comando confirma que Java era
instalado correctamente:

% java -version

https://translate.googleusercontent.com/translate_f 9/39
17/10/2019 Operaciones
versión de Java "1.7.0_25"
Java (TM) SE Runtime Environment (compilación 1.7.0_25-b15)
Máquina virtual de servidor Java HotSpot (TM) de 64 bits (compilación 23.25-b01, modo mixto)

685

Página 14

Instalación
Comience por decidir a qué usuario le gustaría ejecutar Hadoop. Para probar Hadoop o
desarrollando programas Hadoop, puede ejecutar Hadoop en una sola máquina usando su
Cuenta de usuario propia.

Descargue una versión estable, que está empaquetada como un archivo tar comprimido, desde Apache
Hadoop lanza la página y descomprímala en algún lugar de su sistema de archivos:

% tar xzf hadoop- xyz .tar.gz

Antes de poder ejecutar Hadoop, debe indicarle dónde se encuentra Java en su sistema. Si
tiene la variable de entorno JAVA_HOME configurada para apuntar a una instalación Java adecuada,
se usará y no tendrá que configurar nada más. (A menudo se establece en un
archivo de inicio de shell, como ~ / .bash_profile o ~ / .bashrc .) De lo contrario, puede configurar Java
instalación que utiliza Hadoop editando conf / hadoop-env.sh y especificando el
JAVA_HOME variable. Por ejemplo, en mi Mac, cambié la línea para leer:
export JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.7.0_25.jdk / Contents / Home

para apuntar a la versión instalada de Java.

Es muy conveniente crear una variable de entorno que apunte a la instalación de Hadoop
directorio de lación (HADOOP_HOME, por convención) y para poner los directorios binarios de Hadoop
en su ruta de línea de comandos. Por ejemplo:

% export HADOOP_HOME = ~ / sw / hadoop- xyz


% export PATH = $ PATH: $ HADOOP_HOME / bin: $ HADOOP_HOME / sbin

Tenga en cuenta que el directorio sbin contiene los scripts para ejecutar demonios Hadoop, por lo que
debe incluirse si planea ejecutar los demonios en su máquina local.

Verifique que Hadoop se ejecute escribiendo:

Versión % hadoop
Hadoop 2.5.1
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 2e18d179e4a8065
b6a9f29cf2de9451891265cce
Compilado por jenkins el 2014-09-05T23: 11Z
Compilado con el protocolo 2.5.0
Desde el origen con suma de comprobación 6424fcab95bfff8337780a181ad7c78
Este comando se ejecutó usando /Users/tom/sw/hadoop-2.5.1/share/hadoop/common/hadoop
-común-2.5.1.jar

Configuración
Cada componente en Hadoop se configura mediante un archivo XML. Propiedades comunes van
en core-site.xml , y las propiedades pertenecientes a HDFS, MapReduce y YARN entran en
el archivo con el nombre apropiado: hdfs-site.xml , mapred-site.xml y yarn-site.xml . Estas
todos los archivos se encuentran en el subdirectorio etc / hadoop .

686 Apéndice A: Instalación de Apache Hadoop

Página 15

Puede ver la configuración predeterminada para todas las propiedades que son gubernamentales
siguiendo estos archivos de configuración al buscar en el directorio share / doc
jerarquía tory de su instalación de Hadoop para archivos llamados core-
default.xml , hdfs-default.xml , mapred-default.xml y yarn-default.xml .

Hadoop se puede ejecutar en uno de tres modos:

https://translate.googleusercontent.com/translate_f 10/39
17/10/2019 Operaciones
Modo independiente (o local)
No hay demonios ejecutándose y todo se ejecuta en una sola JVM. Ser único
El modo es adecuado para ejecutar programas MapReduce durante el desarrollo, ya que es
fácil de probar y depurarlos.

Modo pseudodistribuido
Los demonios de Hadoop se ejecutan en la máquina local, simulando así un clúster en un pequeño
escala.

Modo completamente distribuido


Los demonios de Hadoop se ejecutan en un grupo de máquinas. Esta configuración se describe en
Capítulo 10 .

Para ejecutar Hadoop en un modo particular, debe hacer dos cosas: establecer el apropiado
propiedades e inicie los demonios Hadoop. La Tabla A-1 muestra el conjunto mínimo de accesorios
erties para configurar cada modo. En modo independiente, el sistema de archivos local y el local
Se utilizan corredores de trabajos MapReduce. En los modos distribuidos, el HDFS y YARN dae‐
mons se inician y MapReduce está configurado para usar YARN.

Tabla A-1. Propiedades de configuración clave para diferentes modos

Propiedad componente Ser único Pseudodistribuido Completamente distribuido

Común fs.defaultFS archivo:/// hdfs: // localhost / hdfs: // namenode /


(defecto)
HDFS dfs.replication N/A 1 3 (predeterminado)
Mapa reducido mapreduce.frame hilo local (predeterminado) hilo
nombre.trabajo

HILO yarn.resourcemanag N/A localhost administrador de recursos


er.hostname

yarn.nodemanager.aux- N/A mapreduce_shuffle mapreduce_shuffle


servicios

Puede leer más sobre la configuración en “Configuración de Hadoop” en la página 292 .

Modo independiente
En el modo independiente, no hay más acciones que tomar, ya que las propiedades predeterminadas son
configurado para el modo independiente y no hay demonios para ejecutar.

Configuracion | 687

Página 16

Modo pseudodistribuido
En modo pseudodistribuido, los archivos de configuración deben crearse con lo siguiente
contenido y se coloca en el directorio etc / hadoop . Alternativamente, puede copiar el etc /
directorio de hadoop a otra ubicación, y luego coloque los archivos de configuración * -site.xml
ahí. La ventaja de este enfoque es que separa los ajustes de configuración de
Los archivos de instalación. Si hace esto, debe configurar el entorno HADOOP_CONF_DIR
variable a la ubicación alternativa, o asegúrese de iniciar los demonios con el
- opción de configuración:
<? xml version = "1.0"?>
<! - core-site.xml ->
<configuración>
<propiedad>
<name> fs.defaultFS </name>
<valor> hdfs: // localhost / </value>
</property>
</configuration>

<? xml version = "1.0"?>


<! - hdfs-site.xml ->
<configuración>
<propiedad>
<name> dfs.replication </name>
<value> 1 </value>
</property>
</configuration>

<? xml version = "1.0"?>


<! - mapred-site.xml ->
<configuración>
<propiedad>
<name> mapreduce.framework.name </name>
<valor> hilo </value>
</property>
</configuration>

https://translate.googleusercontent.com/translate_f 11/39
17/10/2019 Operaciones
<? xml version = "1.0"?>
<! - yarn-site.xml ->
<configuración>
<propiedad>
<nombre> yarn.resourcemanager.hostname </nombre>
<value> localhost </value>
</property>
<propiedad>
<nombre> yarn.nodemanager.aux-services </nombre>
<value> mapreduce_shuffle </value>
</property>
</configuration>

688 | Apéndice A: Instalación de Apache Hadoop

Página 17

Configurando SSH
En modo pseudodistribuido, tenemos que iniciar demonios, y hacerlo usando el
scripts necesitamos tener instalado SSH. Hadoop en realidad no distingue entre
modos pseudodistribuidos y totalmente distribuidos; simplemente inicia demonios en el conjunto de
hosts en el clúster (definido por el archivo esclavos ) mediante SSHing a cada host e iniciando un
proceso demonio. El modo pseudodistribuido es solo un caso especial del modo completamente distribuido
en el que el host (único) es localhost, por lo que debemos asegurarnos de que podamos SSH
localhost e inicie sesión sin tener que ingresar una contraseña.

Primero, asegúrese de que SSH esté instalado y que se esté ejecutando un servidor. En Ubuntu, por ejemplo,
Esto se logra con:

% sudo apt-get install ssh

En Mac OS X, asegúrese de inicio de sesión remoto (en Preferencias del sistema


ces → Compartir) está habilitado para el usuario actual (o todos los usuarios).

Luego, para habilitar el inicio de sesión sin contraseña, genere una nueva clave SSH con una frase de contraseña vacía:

% ssh-keygen -t rsa -P '' -f ~ / .ssh / id_rsa


% cat ~ / .ssh / id_rsa.pub >> ~ / .ssh / optional_keys

También es posible que deba ejecutar ssh-add si está ejecutando ssh-agent .

Comprueba que puedes conectarte con:

% ssh localhost

Si tiene éxito, no debería tener que escribir una contraseña.

Formateando el sistema de archivos HDFS


Antes de que HDFS pueda usarse por primera vez, el sistema de archivos debe formatearse. Esto es
hecho ejecutando el siguiente comando:

% hdfs namenode -format

Comenzando y deteniendo a los demonios


Para iniciar los demonios HDFS, YARN y MapReduce, escriba:

% start-dfs.sh
% start-yarn.sh
% mr-jobhistory-daemon.sh iniciar historyserver

Configuracion | 689

Página 18

https://translate.googleusercontent.com/translate_f 12/39
17/10/2019 Operaciones
Si haexporte
tory, colocado
la los archivos
variable de configuración
de entorno por defecto fuera
HADOOP_CONF_DIR be‐ de la conf direc-
antes de ejecutar los scripts, o iniciar los demonios con --config
opción, que toma una ruta absoluta al directorio de configuración:
% start-dfs.sh --config ruta-a-config-directorio
% start-yarn.sh --config path-to-config-directory
% mr-jobhistory-daemon.sh --config ruta-a-config-directorio
iniciar historyserver

Los siguientes demonios se iniciarán en su máquina local: un namenode, un secundario


namenode, un datanode (HDFS), un administrador de recursos, un administrador de nodos (YARN) y un
servidor de historial (MapReduce). Puedes verificar si los demonios comenzaron con éxito
mirando los archivos de registro en el directorio de registros (en el directorio de instalación de Hadoop) o
mirando las IU web, en http: // localhost: 50070 / para el namenode, http: // localhost:
8088 / para el administrador de recursos, y http: // localhost: 19888 / para el servidor de historial. Tú
También puede usar el comando jps de Java para ver si los procesos se están ejecutando.

La detención de los demonios se realiza de la siguiente manera:

% mr-jobhistory-daemon.sh detener historyserver


% stop-yarn.sh
% stop-dfs.sh

Crear un directorio de usuarios


Cree un directorio de inicio para usted ejecutando lo siguiente:

% hadoop fs -mkdir -p / user / $ USER

Modo completamente distribuido


Configurar un grupo de máquinas trae muchas consideraciones adicionales, por lo que este modo
está cubierto en el Capítulo 10 .

690 | Apéndice A: Instalación de Apache Hadoop

Página 19

APÉNDICE B
Distribución de Cloudera incluyendo
Apache Hadoop

La distribución de Cloudera, incluido Apache Hadoop (en adelante, CDH ), es un sistema integrado
Pila basada en Apache Hadoop que contiene todos los componentes necesarios para la producción,
probado y empaquetado para trabajar juntos. Cloudera hace que la distribución esté disponible en un
cantidad de formatos diferentes: paquetes de Linux, imágenes de máquinas virtuales, tarballs y herramientas
para ejecutar CDH en la nube. CDH es gratuito, publicado bajo la licencia Apache 2.0, y
disponible en http://www.cloudera.com/cdh .

A partir de CDH 5, se incluyen los siguientes componentes, muchos de los cuales están cubiertos de otra manera:

https://translate.googleusercontent.com/translate_f 13/39
17/10/2019 Operaciones
donde en este libro:
Apache Avro
Una biblioteca de serialización de datos en varios idiomas; incluye estructuras de datos enriquecidas, un rápido /
formato binario compacto y RPC

Apache Crunch
Una API Java de alto nivel para escribir canales de procesamiento de datos que pueden ejecutarse en Map‐
Reducir o chispear

Apache DataFu (incubación)


Una biblioteca de UDF estadísticos útiles para realizar análisis a gran escala.

Canal de apache
Recopilación de datos de transmisión altamente confiable y configurable

Apache Hadoop
Almacenamiento de datos altamente escalable (HDFS), gestión de recursos (YARN) y procesos
ing (MapReduce)

Apache HBase
Base de datos en tiempo real orientada a columnas para acceso de lectura / escritura aleatorio

691

Página 20

Colmena Apache
Consultas y tablas de tipo SQL para grandes conjuntos de datos

Matiz
Interfaz de usuario web para facilitar el trabajo con datos de Hadoop

Cloudera Impala
Consultas SQL interactivas de baja latencia en HDFS o HBase

Kite SDK
API, ejemplos y documentos para crear aplicaciones sobre Hadoop

Apache Mahout
Algoritmos escalables de aprendizaje automático y minería de datos

Apache Oozie
Programador de flujo de trabajo para trabajos Hadoop interdependientes

Parquet Apache (incubación)


Un formato de almacenamiento en columna eficiente para datos anidados

Cerdo apache
Lenguaje de flujo de datos para explorar grandes conjuntos de datos

Búsqueda de Cloudera
Búsqueda de texto libre al estilo de Google de datos de Hadoop

Apache Sentry (incubación)


Control de acceso granular basado en roles para usuarios de Hadoop

Apache Spark
Un marco de computación en clúster para el procesamiento de datos en memoria a gran escala en Scala,
Java y Python

Apache Sqoop
Transferencia eficiente de datos entre almacenes de datos estructurados (como bases de datos relacionales)
y Hadoop

Apache ZooKeeper
Servicio de coordinación de alta disponibilidad para aplicaciones distribuidas.

Cloudera también proporciona Cloudera Manager para implementar y operar clústeres de Hadoop
ejecutando CDH.

Para descargar CDH y Cloudera Manager, visite http://www.cloudera.com/downloads .

692 Apéndice B: Distribución de Cloudera, incluido Apache Hadoop

https://translate.googleusercontent.com/translate_f 14/39
17/10/2019 Operaciones

Página 21

APÉNDICE C
Preparación de los datos meteorológicos de NCDC

Este apéndice ofrece un repaso de los pasos dados para preparar los archivos de datos climáticos sin procesar.
entonces están en una forma que es susceptible de análisis usando Hadoop. Si quieres conseguir un
copia de los datos para procesar usando Hadoop, puede hacerlo siguiendo las instrucciones
dado en el sitio web que acompaña a este libro . El resto de este apéndice explica cómo
Se procesaron los archivos de datos climáticos sin procesar.

Los datos sin procesar se proporcionan como una colección de archivos tar, comprimidos con bzip2. Cada año
El valor de las lecturas viene en un archivo separado. Aquí hay una lista parcial de directorios de los archivos:

1901.tar.bz2
1902.tar.bz2
1903.tar.bz2
...
2000.tar.bz2

Cada archivo tar contiene un archivo para las lecturas de cada estación meteorológica del año, comprimido
con gzip (El hecho de que los archivos en el archivo estén comprimidos hace que el bzip2 com‐
La presión sobre el archivo en sí es redundante.) Por ejemplo:

% tar jxf 1901.tar.bz2


% ls 1901 | cabeza
029070-99999-1901.gz
029500-99999-1901.gz
029600-99999-1901.gz
029720-99999-1901.gz
029810-99999-1901.gz
227070-99999-1901.gz

Debido a que hay decenas de miles de estaciones meteorológicas, todo el conjunto de datos está compuesto
de una gran cantidad de archivos relativamente pequeños. Generalmente es más fácil y más eficiente
procesar una cantidad menor de archivos relativamente grandes en Hadoop (consulte “Archivos pequeños y Com-
bineFileInputFormat ”en la página 226 ), por lo que en este caso, concatenaba el descomprimido
archivos para todo un año en un solo archivo, nombrado por el año. Hice esto usando un MapReduce

693

Página 22

programa, para aprovechar sus capacidades de procesamiento en paralelo. Miremos más de cerca
en el programa

El programa solo tiene una función de mapa. No se necesita una función de reducción porque el mapa
realiza todo el procesamiento de archivos en paralelo sin etapa de combinación. El procesamiento puede ser
hecho con un script Unix, por lo que la interfaz de Streaming para MapReduce es apropiada en este
caso; ver ejemplo C-1 .

Ejemplo C-1. Bash script para procesar archivos de datos NCDC sin procesar y almacenarlos en HDFS
#! / usr / bin / env bash

# NLineInputFormat proporciona una sola línea: la clave está desplazada, el valor es S3 URI
leer desplazamiento s3file

# Recuperar archivo de S3 al disco local


echo "reportero: estado: Recuperando $ s3file " > & 2
$ HADOOP_HOME / bin / hadoop fs -get $ s3file .

# Descomprime y descomprime el archivo local


target = ` basename $ s3file Tar.bz2 `

https://translate.googleusercontent.com/translate_f 15/39
17/10/2019 Operaciones
mkdir -p $ target
echo "reportero: estado: Destrabar $ s3file a $ target " > & 2
tar JXF ` basename $ s3file ` -C $ objetivo

# Descomprima cada archivo de estación y concat en un archivo


echo "reportero: estado: Descomprimir $ target " > & 2
para archivo en $ target / * / *
hacer
gunzip -c $ archivo >> $ target .all
echo "reporter: status: $ file procesado " > & 2
hecho

# Ponga la versión comprimida en HDFS


echo "reportero: estado: Gzipping $ target y poner en HDFS" > & 2
gzip -c $ target .all | $ HADOOP_HOME / bin / hadoop fs -put - gz / $ target .gz

La entrada es un pequeño archivo de texto ( ncdc_files.txt ) que enumera todos los archivos a procesar (los archivos
comenzar en S3, por lo que se hace referencia a ellos utilizando URI de S3 que Hadoop entiende). aquí
es una muestra:

s3n: //hadoopbook/ncdc/raw/isd-1901.tar.bz2
s3n: //hadoopbook/ncdc/raw/isd-1902.tar.bz2
...
s3n: //hadoopbook/ncdc/raw/isd-2000.tar.bz2

Dado que el formato de entrada se especifica como NLineInputFormat, cada asignador recibe
Una línea de entrada, que contiene el archivo que tiene que procesar. Se explica el procesamiento.
en el script, pero brevemente, desempaqueta el archivo bzip2 y luego concatena cada archivo de estación
en un solo archivo para todo el año. Finalmente, el archivo se comprime y se copia en HDFS.
Tenga en cuenta el uso de hadoop fs -put - para consumir desde la entrada estándar.

694 Apéndice C: Preparación de los datos meteorológicos de NCDC

Página 23

Los mensajes de estado se hacen eco del error estándar con un reportero: prefijo de estado para que
se interpretan como actualizaciones de estado de MapReduce. Esto le dice a Hadoop que el script es
avanza y no se cuelga.

El script para ejecutar el trabajo de Streaming es el siguiente:

% hadoop jar $ HADOOP_HOME / share / hadoop / tools / lib / hadoop-streaming - *. jar \


-D mapred.reduce.tasks = 0 \
-D mapred.map.tasks.speculative.execution = false \
-D mapred.task.timeout = 12000000 \
-input ncdc_files.txt \
-inputformat org.apache.hadoop.mapred.lib.NLineInputFormat \
-salida de salida \
-mapper load_ncdc_map.sh \
-archivo load_ncdc_map.sh

Establecí el número de tareas de reducción en cero, ya que este es un trabajo de solo mapa. También apagué
ejecución especulativa para que las tareas duplicadas no escriban los mismos archivos (aunque el
el enfoque discutido en “Archivos de efectos secundarios de tareas” en la página 207 también habría funcionado). los
el tiempo de espera de la tarea se estableció en un valor alto para que Hadoop no elimine las tareas que están tomando un
mucho tiempo (por ejemplo, al desarchivar archivos o copiar a HDFS, cuando no hay progreso
esta reportado).

Finalmente, los archivos se archivaron en S3 copiándolos de HDFS usando distcp .

https://translate.googleusercontent.com/translate_f 16/39
17/10/2019 Operaciones

Preparación de los datos meteorológicos de NCDC | 695

Página 25
24

APÉNDICE D
Las API antiguas y nuevas de MapReduce de Java

La API Java MapReduce utilizada a lo largo de este libro se llama la "nueva API", y
reemplaza la API más antigua y funcionalmente equivalente. Aunque Hadoop se envía con ambos
API de MapReduce antiguas y nuevas, no son compatibles entre sí. Deberías
desea utilizar la API anterior, puede hacerlo, ya que el código para todos los ejemplos de MapReduce en este
el libro está disponible para la API anterior en el sitio web del libro (en el paquete oldapi).

Existen varias diferencias notables entre las dos API:

• La nueva API está en el paquete org.apache.hadoop.mapreduce (y subpaquetes).


La antigua API todavía se puede encontrar en org.apache.hadoop.mapred.
• La nueva API favorece las clases abstractas sobre las interfaces, ya que son más fáciles de evolucionar.
Esto significa que puede agregar un método (con una implementación predeterminada) a un ab-
extraiga la clase sin romper las implementaciones antiguas de la clase. 1 Por ejemplo, el
Las interfaces Mapper y Reducer en la antigua API son clases abstractas en la nueva API.
• La nueva API hace un uso extensivo de objetos de contexto que permiten que el código de usuario
comunicarse con el sistema MapReduce. El nuevo contexto, por ejemplo, essen‐
unifica de manera parcial la función de JobConf, OutputCollector y Reporter de
La antigua API.
• En ambas API, los pares de registros clave-valor se envían al asignador y al reductor, pero en
Además, la nueva API permite que los mapeadores y reductores controlen la ejecución
flujo anulando el método run (). Por ejemplo, los registros se pueden procesar en
lotes, o la ejecución puede ser terminada antes de que todos los registros hayan sido pro
Cessed. En la antigua API, esto es posible para los mapeadores escribiendo un MapRunnable, pero
no existe equivalente para reductores.

1. Técnicamente, tal cambio seguramente rompería las implementaciones que ya definen un método con
la misma firma que Jim des Rivières explica en "Evolución de las API basadas en Java", a todos los efectos prácticos, esto
se trata como un cambio compatible.

697

Page 26

• El control del trabajo se realiza a través de la clase Job en la nueva API, en lugar de la antigua
JobClient, que ya no existe en la nueva API.
• La configuración se ha unificado en la nueva API. La antigua API tiene un trabajo especial
Objeto Conf para la configuración del trabajo, que es una extensión de la vainilla Con de Hadoop
objeto de figuración (utilizado para configurar demonios; consulte "La API de configuración"
en la página 141 ). En la nueva API, la configuración del trabajo se realiza a través de un
Configuración, posiblemente a través de algunos de los métodos de ayuda en Job.
• Los archivos de salida se nombran de forma ligeramente diferente: en la API anterior, ambos se asignan y reducen
las salidas se denominan parte-nnnnn , mientras que en el nuevo mapa API se denominan salidas
part-m-nnnnn y reduce salidas se denominan part-r-nnnnn (donde nnnnn es un in‐

https://translate.googleusercontent.com/translate_f 17/39
17/10/2019 Operaciones
Teger que designa el número de pieza, a partir de 00000).
• Se declara que los métodos reemplazables por el usuario en la nueva API arrojan java.lang.Inter
Ruptura Excepción. Esto significa que puede escribir su código para responder a
interrumpe para que el marco pueda cancelar con gracia operaciones de larga duración si
necesita hacerlo 2
• En la nueva API, el método reduce () pasa valores como java.lang.Iterable,
en lugar de un java.lang.Iterator (como lo hace la API anterior). Este cambio lo hace
más fácil de iterar sobre los valores utilizando la construcción de bucle for-each de Java:
para ( valor de VALUEIN : valores ) {...}

Los programas que usan la nueva API que se compilaron contra Hadoop 1 deben
se recompilará para ejecutarse contra Hadoop 2. Esto se debe a que algunas clases en el
La nueva API MapReduce cambió a interfaces entre Hadoop 1 y
Lanzamientos de Hadoop 2. El síntoma es un error en tiempo de ejecución como el siguiente:
java.lang.IncompatibleClassChangeError: interfaz encontrada
org.apache.hadoop.mapreduce.TaskAttemptContext, pero se esperaba la clase

El ejemplo D-1 muestra la aplicación MaxTemperature (de "Java MapReduce" en la página


24 ) reescrito para usar la antigua API. Las diferencias se destacan en negrita.

2. "Teoría y práctica de Java: lidiando con la excepción interrumpida" por Brian Goetz explica esta técnica en
detalle.

698 Apéndice D: Las API antiguas y nuevas de Java MapReduce

Página 27

Al convertir sus clases de Mapper y Reductor a la nueva API,


no olvides cambiar las firmas del mapa () y reducir ()
métodos a la nueva forma. Simplemente cambiando tu clase para extender el nuevo
Las clases Mapper o Reducer no producirán un error de compilación o
advertencia, porque estas clases proporcionan formas de identidad del mapa ()
y métodos reduce () (respectivamente). Su mapeador o código reductor,
sin embargo, no se invocará, lo que puede llevar a que sea difícil
diagnosticar errores
La anotación de su mapa () y reducir () métodos con el @Override
La anotación permitirá que el compilador de Java detecte estos errores.

Ejemplo D-1. Aplicación para encontrar la temperatura máxima, utilizando el antiguo MapRe‐
duce API
clase pública OldMaxTemperature {

clase estática OldMaxTemperatureMapper extiende MapReduceBase


implementa Mapper <LongWritable, Text, Text, IntWritable> {

privado estático final INT FALTA = 9999;

@Anular
mapa público vacío (clave LongWritable, valor de texto,
OutputCollector <Text, IntWritable> output, Reporter reporter )
lanza IOException {

Línea de cadena = value.toString ();


Cadena año = line.substring (15, 19);
int airTemperature;
if (line.charAt (87) == '+') {// a parseInt no le gustan los signos más iniciales
airTemperature = Integer.parseInt (line.substring (88, 92));
} más {
airTemperature = Integer.parseInt (line.substring (87, 92));
}
Calidad de cadena = line.substring (92, 93);
if (airTemperature! = FALTA && quality.matches ("[01459]")) {
output.collect (nuevo texto (año), nuevo IntWritable (temperatura del aire));
}
}

https://translate.googleusercontent.com/translate_f 18/39
17/10/2019 Operaciones
}

clase estática OldMaxTemperatureReducer extiende MapReduceBase


implementa Reductor <Texto, IntWritable, Texto, IntWritable> {

@Anular
public void reducir (clave de texto, Iterator <> IntWritable valores,
OutputCollector <Text, IntWritable> output, Reporter reporter )
lanza IOException {

Las API antiguas y nuevas de Java MapReduce | 699

Página 28

int maxValue = Integer.MIN_VALUE;


while ( values.hasNext () ) {
maxValue = Math.max (maxValue, values.next (). get () );
}
output.collect (clave, nuevo IntWritable (maxValue));
}
}

public static void main (String [] args) lanza IOException {


if (args.length! = 2) {
System.err.println ("Uso: OldMaxTemperature <ruta de entrada> <ruta de salida>");
System.exit (-1);
}

JobConf conf = new JobConf (OldMaxTemperature.class);


conf .setJobName ("Temperatura máxima");

FileInputFormat.addInputPath ( conf , nueva ruta (args [0]));


FileOutputFormat.setOutputPath ( conf , nueva ruta (args [1]));

conf .setMapperClass (OldMaxTemperatureMapper.class);


conf .setReducerClass (OldMaxTemperatureReducer.class);

conf .setOutputKeyClass (Text.class);


conf .setOutputValueClass (IntWritable.class);

JobClient.runJob (conf);
}
}

700 Apéndice D: Las API antiguas y nuevas de Java MapReduce

Página 29

Índice
https://translate.googleusercontent.com/translate_f 19/39
17/10/2019 Operaciones

UNA Apache Oozie


sobre, 179
Clase AbstractAvroEventSerializer, 388
definición de flujos de trabajo, 180 - 182
listas de control de acceso (ACL), 311 , 619
empaquetar e implementar aplicaciones de flujo de trabajo
acumuladores, 564
iones, 182
ACL (listas de control de acceso), 311 , 619
ejecución de trabajo de flujo de trabajo, 183
nodos de acción, 180 , 181
Parquet Apache (ver Parquet)
acciones, RDD, 557
Apache Phoenix, 484
Plataforma de ADAM, 661 - 667
Apache Slider, 82
Permiso de administrador (ACL), 620
Apache Software Foundation, 7 , 82
administración (ver administración del sistema)
Apache Spark (ver Spark)
agentes (Flume)
Apache Tez, 477
acerca de, 381
Apache Thrift, 127
proceso de distribución, 390 - 394
Sarga Apache, 83
ejemplo de, 382 - 384
APENDER modo de escritura, 532
HDFS se hunde y 385
ID de aplicación, 164
Clase agregada, 546
maestros de aplicación
agregando datos en las tablas de Hive, 503
aproximadamente 80
Interfaz de agregador, 523
desmantelamiento de nodos antiguos, 335
Clase de agregadores, 523 , 527
consideraciones de falla, 194
alias, definitorios, 450
finalización del trabajo, 192
Declaración ALTER TABLE (Hive), 492 , 502
proceso de inicialización del trabajo, 187
Servicios web de Amazon, 4 , 14
perseguidores de empleo y 84
Herramienta de construcción de hormigas, 145 , 160
fallo del administrador de nodos, 195
Apache Avro (ver Avro)
progreso y actualizaciones de estado, 191
API de registro de Apache Commons, 172
fracaso del administrador de recursos, 196
Apache Crunch (ver Crunch)
tareas asignadas, 188
Proyecto Curador Apache, 636
ejecución de tarea, 189
Canal Apache (ver Canal)
fracaso de tarea, 193
Apache Mesos, 570

Nos gustaría escuchar sus sugerencias para mejorar nuestros índices. Enviar correo electrónico a index@oreilly.com.

701

Página 30

no gestionado, 81 procesamiento por lotes


Clase ArrayFile, 135 Soporte de canal, 385
Clase ArrayPrimitiveWritable, 120 limitaciones de, 6
Clase ArrayWritable, 119 propiedad batchSize, 385
Declaración ASSERT (Pig Latin), 435 Servicio Beeline (colmena), 478
Proyecto Astrometry.net, 4 grupos de evaluación comparativa, 314 - 316
emisión atómica, 621 formatos binarios
registros de auditoría (HDFS), 172 , 324 para almacenamiento de datos, 498
autenticación Clase FixedLengthInputFormat, 237
ACL y 619 Clase MapFileOutputFormat, 240
fichas de delegación y, 312 Clase SequenceFileAsBinaryInputFormat,
Kerberos, 310 - 312 , 619 236
proceso de autorización, 310 SequenceFileAsBinaryOutputFormat clase,
Función AVG (Pig Latin), 446 240
Avro SequenceFileAsTextInputFormat clase, 236
aproximadamente, 127 , 345 - 346 Clase SequenceFileInputFormat, 236
formato de almacenamiento binario y 498 SequenceFileOutputFormat clase, 239
Crunch and, 528 estudio de caso de ciencia de datos biológicos
tipos de datos y esquemas, 346 - 349 aproximadamente, 653 - 654
formato de archivo de datos, 136 , 352 - 354 Plataforma de ADAM, 661 - 667
Soporte de canal, 388 ADN como código fuente, 657 - 659
Soporte de colmena, 406 código genético, 656
interoperabilidad, 354 - 355 Proyecto Genoma Humano, 659
idiomas y soporte de marco, 365 únete, 668
Compatibilidad con MapReduce, 359 - 365 la medicina personalizada y, 667 - 668
Pavimento de, 375 - 377 genomas de referencia, 659
Resolución de esquema, 355 - 357 secuenciación y alineación de ADN, 660
serialización y deserialización, 349 - 352 estructura del ADN, 655
capacidades de clasificación, 358 , 363 - 365 gestores de nodos de la lista negra, 195
Soporte Sqoop, 406 bloquear tokens de acceso, 312
herramientas compatibles, 355 Identificador de blockpoolID, 318
propiedad avro.java.string, 349 bloques y tamaños de bloque

https://translate.googleusercontent.com/translate_f 20/39
17/10/2019 Operaciones
AvroAsTextInputFormat clase,
AvroParquetOutputFormat 365
clase, 379 aproximadamente,
almacenamiento en45 - 46de bloque, 47
caché
Clase AvroParquetReader, 376 comprobación de bloques, 326 - 328
Clase AvroParquetWriter, 375 divisiones de entrada y 233
Clase AvroReadSupport, 376 Parquet y, 372
Función AvroStorage (Pig Latin), 447 ajuste, 307
herramienta awk, 21 - 22 , 37 ajuste para HDFS, 225
Clase BloomMapFile, 135

si Servicio BookKeeper, 637


Clase BooleanWritable, 113
Estructura de datos del árbol B, 8
variables de difusión, 564
copias de seguridad
Brush, Ryan, 643
datos, 332
cubos, mesas colmena y, 491 , 493 - 495
metadatos, 332
tampón, 307
herramienta equilibradora, 78 , 329 , 334
mostradores incorporados
Baldeschwieler, Eric, 14
sobre 247
ancho de banda, medición entre nodos, 70
mostradores de trabajo, 250

702 Índice

Page 31

contadores de tareas, 248 - 250 proceso de verificación


carga a granel, 594 corriendo contra namenodes, 320
Clase ByteArrayOutputStream (Java), 111 corriendo contra tuberías, 545
Bytes Clase de escritura, 118 , 228 Clase ChecksumFileSystem, 97 , 99
Contador BYTES_READ, 250 datos de suma de comprobación, 97 - 99
BYTES_WRITTEN counter, 250 comando claro, 437
Clase ByteWritable, 113 Interfaz que se puede cerrar (Java), 128
compresión bzip2, 100 - 101 , 104 Estado CERRADO (ZooKeeper), 626
Clase BZip2Codec, 101 Distribución de Cloudera incluyendo Apache Ha‐
doop (CDH), 691 - 692

C Clúster por cláusula (colmena), 503


gerentes de clúster, 570
Biblioteca C (libhdfs), 55
CLUSIFICADO POR cláusula (Colmena), 493
Cafarella, Mike, 12 , 576
Identificador de clusterID, 318
Capacidad Scheduler (hilados), 88 - 90
Clase ClusterMapReduceTestCase, 159
Clase cartesiana, 546
racimos
Estudio de caso de biblioteca en cascada
herramientas de administración y 325 - 329
sobre, 669
registro de auditoría y 324
ejemplo de aplicación, 676 - 679
equilibrado, 77
campos, tuplas y tuberías, 670 - 673
evaluación comparativa, 314 - 316
flexibilidad, 679
Configuración de Hadoop
operaciones, 673 - 674
propiedades adicionales, 307
Red de intercambio de ShareThis, 680 - 684
archivos de configuración, 292
resumen, 684
gestión de configuración, 293
grifos, esquemas y flujos, 675
direcciones y puertos daemon, 304 - 306
mayúsculas y minúsculas
propiedades de demonio, 296 - 303
HiveQL, 473 , 512
variables de entorno, 292 , 294 - 296
Pig Latin, 433
consideraciones de mantenimiento, 332 - 341
estudios de caso
monitoreo, 330 - 332
ciencia datos biológicos, 653 - 668
topología de red, 286 - 288
Biblioteca en cascada, 669 - 684
estructuras de datos persistentes y, 317 - 322
componibles de datos en Cerner, 643 - 652
ejecutando aplicaciones MapReduce en 160 -
comando de gato, 436
175
cd comando, 436
modo seguro y, 322 - 324
CDH (Distribución de Cloudera incluyendo Apache
consideraciones de seguridad, 309 - 314
Hadoop), 691 - 692
configuración e instalación
Caso de estudio de Cerner, 643
configurando Hadoop, 290
aproximadamente, 643
configurar SSH, 289
Apache Crunch y 644
crear cuentas de usuario Unix, 288
la construcción de la imagen completa, 644 - 647
creación de directorios de usuarios, 292
componibilidad sobre marcos, 650
formateo del sistema de archivos HDFS, 290
la integración de los datos de salud, 647 - 649
opciones de instalación, 283
avanzando, 651
instalando Hadoop, 289
Clase ChainMapper, 178 , 279
instalando Java, 288
Clase ChainReducer, 178 , 279
iniciar y detener los demonios, 290 - 292
propiedad del canal, 383
dimensionamiento, 285 - 286
Clase de canales, 546
especificaciones para, 284 - 288
propiedad de canales, 383
prueba en miniclusters, 159
Interfaz CharSequence (Java), 349
mejorando, 337 - 341
PUNTO DE CONTROL modo de escritura, 533 , 545

Índice | 703

Página 32

https://translate.googleusercontent.com/translate_f 21/39
17/10/2019 Operaciones

Clase CodecPool, 104 Parquet y, 372


códecs seleccionando el formato a utilizar, 106
sobre, 101 Secuencia de archivos, 134
corrientes de compresión, 101 lista de verificación de ajuste, 175
corrientes de descompresión, 101 Interfaz CompressionCodec
inferir a partir de extensiones de archivo, 102 sobre, 101
lista de formatos de compresión compatibles, 101 corrientes de compresión, 101
bibliotecas nativas, 104 - 105 corrientes de descompresión, 101
herramienta codegen, 407 , 421 codecs deducción, 102 - 104
Clase de grupo, 546 Clase CompressionCodecFactory, 103
Declaración Cogroup (latín de cerdo), 435 , 461 - 463 Clase CompressionInputStream, 102
modelos de coherencia (sistemas de archivos), 74 - 76 Clase CompressionOutputStream, 101
Interfaz de colección (Java), 537 Función CONCAT (Pig Latin), 446
almacenamiento orientado a columnas comando conf (ZooKeeper), 605
sobre, 136 - 137 Interfaz configurable, 149
Pavimento de, 367 - 379 Clase de configuración
propiedad com.sun.management.jmxremote.port, sobre, 58 , 141 - 142 , 149
332 combinando recursos, 143
CombineFileInputFormat clase, 226 distribución de datos secundarios, 273
funciones combinadas expansión variable, 143
sobre, 34 - 36 archivos de configuración, listados, 292
forma general, 210 Clase configurada, 149
barajar y ordenar, 199 Estado CONECTADO (ZooKeeper), 625
lista de verificación de ajuste, 175 Estado de conexión (ZooKeeper), 625
COMBINE_INPUT_RECORDS contador, 249 Interfaz de conexión, 586
COMBINE_OUTPUT_RECORDS contador, 249 Clase ConnectionDriverName, 482
interfaz de línea de comandos Clase ConnectionFactory, 586
sobre, 50 - 52 Clase ConnectionPassword, 482
mostrando SequenceFile con, 132 Conexión Clase URL , 482
Soporte de colmena, 478 - 479 ConnectionUserName clase, 482
Soporte latino de cerdo, 436 conectores (Sqoop), 403
ejecutando trabajos MapReduce desde, 148 - 152 Configuración ConnectTimeout SSH, 296
ejecutando miniclusters desde, 159 comando contras (ZooKeeper), 605
Soporte de ZooKeeper, 612 contenedores
comentarios (Pig Latin), 432 aproximadamente 80
nodos de puesta en servicio, 334 - 335 perseguidores de empleo y 84
Mostrador COMMITTED_HEAP_BYTES, 250 , restricciones de memoria virtual, 303
303 declaraciones de flujo de control, 438
Interfaz comparable (Java), 112 nodos de flujo de control, 180 , 181
Interfaz de comparación (Java), 112 conversión de tipos de datos de Hive, 489
compatibilidad, actualizaciones y 337 Coordinador de motores, 179
Clase CompositeInputFormat, 270 comando copyFromLocal, 436
compresión comando copyToLocal, 436
aproximadamente 100 archivo core-site.xml, 292 , 296 , 311
codecs y, 101 - 105 Función COUNT (Pig Latin), 446
divisiones de entrada y 105 contadores
lista de formatos admitidos, 100 sobre 247
salida del mapa y, 198 incorporado, 247 - 250
MapReduce y, 106 - 109 Crunch support, 538

704 Índice

Page 33

dinámico, 253 DAG (gráficos acíclicos dirigidos), 178 , 538 , 566 -


HBase y, 601 569
métricas y 331 integridad de los datos
recuperar, 254 - 255 aproximadamente, 97
definida por el usuario de Java, 251 - 255 Clase ChecksumFileSystem, 99
Streaming definido por el usuario, 255 Soporte de HDF, 98
Contadores clase 255 , 588 Clase LocalFileSystem, 99
Función COUNT_STAR (Pig Latin), 446 tareas locales de datos, 188
comando cp, 436 localidad de datos, 10
CPU_MILLISECONDS counter, 249 optimización de la localidad de datos, 31
CRC-32 (verificación de redundancia cíclica), 97 cola de datos, 72
Sentencia CREATE DATABASE (Hive), 490 almacenamiento y análisis de datos
Sentencia CREATE FUNCTION (Hive), 512 aproximadamente 5
operación de creación (ZooKeeper), 616 el análisis de datos con Hadoop, 22 de - 30 de
Permiso CREAR (ACL), 620 análisis de datos con herramientas Unix, 21 - 22
Sentencia CREATE TABLE (Hive), 474 , 490 , formatos en columnas, 136 - 137
498 Bloques HDFS y 46
CREAR TABLA ... COMO instrucción SELECT Mesas de colmena, 496 - 499
(Colmena), 501 el horizontal, 30 de - 37
Crick, Francis, 655 comparaciones del sistema, 8 - 12
Declaración CRUZADA (Pig Latin), 435 , 463 estructuras de datos
primer comando (ZooKeeper), 605 formatos adicionales, 136 - 137
Crujido Clase MapFile, 135
aproximadamente, 519 persistente, 317 - 322
Caso de estudio de Cerner y 644 Secuencia Clase de archivo , 127-134

https://translate.googleusercontent.com/translate_f 22/39
17/10/2019 Operaciones
funciones, 533 - 535 ZooKeeper y, 636
bibliotecas compatibles, 545 - 547 formatos de bases de datos, 238
proceso de materialización, 535 - 537 Clase DataBlockScanner, 98
ejecución de tubería, 538 - 543 propiedad dataDir, 638
operaciones primitivas, 523 - 528 Clase DataDrivenDBInputFormat, 409
los registros y las tuplas, 529 - 530 Clase DataFileReader, 353
ordenar datos, 259 Clase DataFileStream, 354
fuentes y objetivos, 531 - 533 Clase DataFileWriter, 353
tipos soportados, 528 - 530 Interfaz DataInput (Java), 110
ejemplo de conjunto de datos meteorológicos, 520 - 523 Propiedad dataLogDir, 638
propiedad crunch.log.job.progress, 539 Interfaz DataNodeProtocol, 313
Propiedad cTime, 318 nodos de datos
Declaración de CUBE (Pig Latin), 435 herramienta equilibradora y, 329
Corte, Doug, 12 - 13 , 345 escáneres de bloques y 328
comprobación de redundancia cíclica (CRC-32), 97 configuración e instalación de clúster, 290
nodos de puesta en servicio, 334 - 335

re integridad de datos y 98
Clase DataStreamer y 72
demonios
nodos de desmantelamiento, 335 - 337
direcciones y puertos, 304 - 306
Clase DFSInputStream y 69
herramienta equilibradora, 329
estructura de directorios, 322
propiedades de configuración, 296 - 303
HBase y, 601
soporte para archivos de registro, 172 , 295 , 330
patrón maestro-trabajador, 46
requisitos de memoria, 295
Almacenamiento RAID y 285
inicio y parada, 290 - 292 , 689

Índice | 705

34

colocación de réplicas, 73 Propiedad dfs.bytes-per-checksum, 98


comenzando, 291 Propiedad dfs.client.read.shortcircuit, 308
Interfaz de salida de datos (Java), 110 Propiedad dfs.datanode.address, 304
Clase DataOutputStream (Java), 111 dfs.datanode.balance.bandwidthPerSec apropiado‐
Clase DataStreamer, 72 - 73 ty, 329
Contador DATA_LOCAL_MAPS, 251 Propiedad dfs.datanode.data.dir, 298 , 300
Interfaz DatumWriter, 350 Propiedad dfs.datanode.http.address, 306
Clase DBInputFormat, 220 dfs.datanode.ipc.address property, 305
Clase DBOutputFormat, 238 Propiedad dfs.datanode.kerberos.principal, 313
Interfaz DBWritable, 409 Propiedad dfs.datanode.keytab.file, 313
problemas de depuración Propiedad dfs.datanode.numblocks, 322
aproximadamente, 168 - 169 dfs.datanode.scan.period.hours propiedad, 328
Crunch and, 539 Propiedad dfs.domain.socket.path, 308
manejo de datos mal formados, 170 Propiedad dfs.encrypt.data.transfer, 314
Página de intentos de tarea de MapReduce, 169 Propiedad dfs.hosts, 307 , 334
Página de tareas de MapReduce, 169 Propiedad dfs.namenode.checkpoint.dir, 299 , 321
remotamente, 174 Propiedad dfs.namenode.checkpoint.period, 320
establecer niveles de registro, 330 Propiedad dfs.namenode.checkpoint.txns, 320
nodos de desmantelamiento, 335 - 337 Propiedad dfs.namenode.http-address, 306
Clase DefaultCodec, 101 Propiedad dfs.namenode.http-bind-host, 306
Clase DefaultStringifier, 274 Propiedad dfs.namenode.name.dir, 298 , 317 , 321
Declaración DEFINE (Pig Latin), 436 , 450 , 459 Propiedad dfs.namenode.replication.min, 323
DESINFLAR compresión, 100 - 101 , 104 Propiedad dfs.namenode.rpc-bind-host, 305
Clase DeflaterInputStream (Java), 102 Propiedad dfs.namenode.safemode.extension, 324
Clase DeflaterOutputStream (Java), 102 Propiedad dfs.namenode.safemode.threshold-pct,
retraso en la programación, 94 323
fichas de delegación, 312 propiedad dfs.namenode.secondary.http-address,
operación de eliminación (ZooKeeper), 616 306
Permiso DELETE (ACL), 620 Propiedad dfs.permissions.enabled, 52
Sentencia DELETE (Hive), 483 dfs.replication property, 51 , 687
Palabra clave DELIMITADA (Colmena), 498 dfs.webhdfs.enabled propiedad, 55
formato de almacenamiento de texto delimitado, 496 - 497 herramienta dfsadmin, 324 - 326 , 332
dependencias, trabajo, 161 Clase DFSInputStream, 70
Operador DESCRIBE (Pig Latin), 428 , 430 , 436 , Clase DFSOutputStream, 72 - 73
467 Función DIFF (Pig Latin), 446
Declaración de DESCRIBIR (Colmena), 489 , 509 universo digital, 3 - 5
deserialización importaciones en modo directo, 411
sobre, 109 gráficos acíclicos dirigidos (DAG), 178 , 538 , 566 -
Apoyo Avro, 349 - 352 569
almacenamiento orientado a columnas y 136 directorios
Clase de texto y 123 creando, 63 , 292 , 690
Interfaz deserializador, 126 estructura de nodo de datos, 322
entorno de desarrollo permisos de archivo, 52
configuración de la gestión, 146 - 148 requisitos de memoria de namenode, 44
ejecutar trabajos desde la línea de comandos, 148 - 152 estructura de nodo de nombre, 317 - 318
montaje, 144 - 145 consulta, 63 - 68
herramienta df, 45 espacio de almacenamiento reservado, 307
Propiedad dfs.block.access.token.enable, 312 estructura de nodo de nombre secundaria, 321
Propiedad dfs.blocksize, 225 , 307 programa distcp, 76 - 78 , 98

https://translate.googleusercontent.com/translate_f 23/39
17/10/2019 Operaciones
706 | Índice

Página 35

Clase distinta, 546 comando envi (ZooKeeper), 605


Declaración DISTINCT (Pig Latin), 435 , 458 variables de entorno, 29 , 292 , 294 - 296
DISTRIBUIR POR cláusula (Colmena), 503 efímero znodes, 614
caché distribuida, 274 - 279 secuencias de escape, 418
Clase DistributedCache, 277 funciones eval (Pig Latin), 445 , 452 - 453
Clase DistributedFileSystem Clase EvalFunc, 449
aproximadamente, 53 excepciones (ZooKeeper), 630 - 634 , 635
Clase FileSystem y 56 comando ejecutivo, 434 , 437
Soporte HTTP, 54 permiso de ejecución (x), 52
lectura de archivos, 69 existe operación (ZooKeeper), 616
escribir archivos, 72 EXPLICAR la palabra clave (Colmena), 506
ADN EXPLICAR operador (Pig Latin), 436
Plataforma de ADAM, 661 - 667 proceso de exportación (Sqoop)
código genético, 656 aproximadamente, 417 - 420
Proyecto Genoma Humano, 659 Colmena y, 418
secuenciación y alineación, 660 SequenceFile y, 421
como código fuente, 657 - 659 transaccionalidad y 420
estructura de 655 expresiones (latín de cerdo), 438 - 439
Interfaz DNSToSwitchMapping, 287 Palabra clave EXTERNA (Colmena), 491
Clase DoFn mesas externas (colmena), 490 - 491
acerca de, 521
método increment (), 538
método scaleFactor (), 525
F
Contador FAILED_SHUFFLE, 250
Equidad de recursos dominantes (DRF), 95
controladores de conmutación por error, 50 , 196
herramienta de puntos, 540
failovers
Clase DoubleWritable, 113
grupos de sumideros y, 395 - 399
Acorazado, 13
Servicio de ZooKeeper y 624
DRF (equidad de recursos dominante), 95
fallas
Sentencia DROP DATABASE (Hive), 490
acerca de, 193
Sentencia DROP FUNCTION (Hive), 512
maestro de aplicaciones, 194
Declaración TABLE DROP (Hive), 491 , 502
gerente de nodo, 195
herramienta de shell dsh, 293
gerente de recursos, 196
Módulo Dumbo (Python), 40
tarea, 193
comando de volcado (ZooKeeper), 605
Programador justo (HILO), 90 - 94
Declaración DUMP (Pig Latin), 434 , 435 , 465 , 467
desplegarse
Dyer, Chris, 177
sobre 388
contadores dinámicos, 253
garantías de entrega, 389
inserto de partición dinámica, 500
Selectores de replicación y multiplexación, 390
Clase FieldSelectionMapper, 279
mi Clase FieldSelectionMapReduce, 279
Computadora EC2 en la nube, 14 Clase FieldSelectionReducer, 279
editar registro, 318 - 320 Programador FIFO (HILO), 86 - 86
edita archivos, 318 - 320 , 332 Clase de archivo (Java), 63
Proyecto Elephant Bird, 127 gestión de archivos
metastore incrustado, 480 compresión, 100 - 109 , 134
Clase EmbeddedAgent, 398 patrones de archivo, 66
Clase de codificador, 350 permisos de archivo, 52
codificación, anidada, 370 estructuras de datos basados en archivos, 127 - 137
Clase EnumSetWritable, 120 encontrar archivo de suma de comprobación, 98

Índice | 707

Page 36

listado de archivos, 65 catálogo de componentes, 399 - 400


Consideraciones de parquet, 373 - 377 ejemplo de, 382 - 384
procesamiento de archivos como registros, 228 - 232 desplegándose, 388 - 390
propiedad file.bytes-per-checksum, 99 HDFS se hunde y, 385 - 390
Clase FileContext, 56 instalación, 381
Clase FileFilter (Java), 68 integrando con aplicaciones, 398
Clase FileInputFormat, 222 - 226 , 248 , 531 grupos fregadero, 395 - 397
Clase FileOutputCommitter, 188 , 206 transacciones y confiabilidad, 384 - 385
Clase FileOutputFormat, 107 , 207 , 248 comando flume-ng, 382 , 383
Clase FileSplit, 230 Biblioteca FlumeJava, 519
Clase FileStatus, 63 - 67 Proyecto Folding @ home, 11
Clase FileSystem PRENSA ... declaración GENERATE (Pig Latin),
aproximadamente, 53 , 54 , 56 434 , 435 , 457
crear directorios, 63 De clase, 531
borrar datos, 68 Cláusula FROM (colmena), 505
directorios consultas, 63 - 68 comando fs, 436
la lectura de datos, 58 - 61 , 69 Propiedad fs.datanode.dns.interface, 306
verificación de sumas de verificación, 98 fs.datanode.du.reserved property, 307

https://translate.googleusercontent.com/translate_f 24/39
17/10/2019 Operaciones
escribir datos, 61 - 63 Propiedad fs.defaultFS
Sistema de archivos en el espacio de usuario (FUSE), 56 sobre 51
sistemas de archivos encontrar el nombre de host de namenode, 291
conceptos básicos, 45 - 50 Modos Hadoop y 687
operaciones básicas, 51 - 52 Colmena y 476
mostradores empotrados, 248 , 250 Cerdo y 425
comprobación de bloques, 326 - 328 Servidores RPC, 305
dimensionamiento de racimo, 286 sistema de archivos de configuración, 159
modelos de coherencia, 74 - 76 especificando el sistema de archivos predeterminado, 298
formateo para HDFS, 290 Propiedad fs.file.impl, 99
Hadoop apoyado, 53 - 56 fs.trash.interval propiedad, 307
alta disponibilidad, 48 - 50 herramienta fsck, 45 - 46 , 326 - 328 , 334
Interfaz Java, 56 - 68 Clase FSDataInputStream, 59 - 61 , 69
metadatos y, 318 - 320 Clase FSDataOutputStream, 63 , 72 , 75
nombres y 44 , 46 archivo de imagen, 318 - 320 , 322 , 332
copia paralelo con distcp, 76 - 78 Clase FsInput, 354
consideraciones de actualización, 337 - 341 Clase FTPFileSystem, 53
FileUtil clase, 65 modo totalmente distribuido (Hadoop), 690
funciones de filtro (Pig Latin), 445 , 448 - 451 Clase FuncSpec, 451
Declaración FILTER (Pig Latin), 435 , 457 funciones (Crunch), 533 - 535 , 545 - 547
Clase FilterFn, 524 funciones (colmena)
Clase FilterFunc, 449 aproximadamente, 488
Clase FirstKeyOnlyFilter, 589 Tipos de UDF, 510 - 511
Clase FixedLengthInputFormat, 237 escribir UDAFs, 513 - 517
Clase FloatWritable, 113 escritura UDF, 511 - 513
Canal artificial funciones (Pig Latin)
aproximadamente, 381 , 519 incorporado, 440 , 446 - 447
información adicional, 400 tipos admitidos, 445
niveles de agente, 390 - 394 definido por el usuario, 447 , 448 - 456
Soporte Avro, 388 funciones (Spark), 558 , 563
procesamiento por lotes, 385 FUSE (Sistema de archivos en el espacio de usuario), 56

708 | Índice

Page 37

Interfaz futura (Java), 539 comando hadoop


operaciones básicas del sistema de archivos, 51 - 52
crear archivos HAR, 53
sol programa distcp y 76
Contador GC_TIME_MILLIS, 250
encontrar archivo de suma de comprobación, 98
Clase GenericDatumWriter, 350
Hadoop Streaming y, 39
GenericOptionsParser class, 148 - 152 , 274
lanzamiento de JVM, 29
Interfaz GenericRecord, 350 , 529
recuperando resultados de trabajo, 167
Clase de escritura genérica, 119 , 120
ejecutando miniclusters desde, 159
Consorcio de referencia genómica (GRC), 660
Sistema de archivos distribuidos de Hadoop (ver HDFS)
Consigue clase, 586
Hadoop Streaming
Operación getACL (ZooKeeper), 616
aproximadamente, 37
Operación getChildren (ZooKeeper), 616
Scripts MapReduce y 503
Operación getData (ZooKeeper), 616
Ejemplo de Python, 40
GFS (Google), 12
Rubí ejemplo, 37 - 40
operación de engrosamiento, 66
archivo hadoop-env.sh, 292 , 332
Google GFS, 12
archivo hadoop-metrics2.properties, 292 , 332
Buffers de protocolo de Google, 127
archivo hadoop-policy.xml, 293 , 311
failover elegante, 50
propiedad hadoop.http.staticuser.user, 148
Herramienta de construcción Gradle, 145
propiedad hadoop.rpc.protection, 314
Gray, Jim, 10
propiedad hadoop.security.authentication, 311
Gris, Jonathan, 575 - 602
propiedad hadoop.security.authorization, 311
GRC (Consorcio de referencia del genoma), 660
hadoop.ssl.enabled propiedad, 314
Gran proyecto de Internet Mersenne Prime Search,
hadoop.user.group.static.mapping.overrides
11
propiedad, 147
computación en red, 10
Variable de entorno HADOOP_CLASSPATH,
Conjunto de referencia Gridmix, 316
161 , 162
Cláusula GROUP BY (colmena), 475 , 510
Variable de entorno HADOOP_CONF_DIR,
Operador GROUP BY (Pig Latin), 430
148 , 293 , 425
Declaración del GRUPO (Pig Latin), 432 , 434 , 435 ,
Variable de entorno HADOOP_HEAPSIZE,
464
294
datos de agrupación, 459 - 464
Variable de entorno HADOOP_HOME, 425 ,
grupos (ZooKeeper)
472 , 686
aproximadamente, 606
Variable de entorno HADOOP_IDENT_STRING
creando, 607 - 609
capaz, 295
eliminando, 612
Variable de entorno HADOOP_LOG_DIR,
membresía grupal, 606
172 , 295
unirse, 609
Entorno HADOOP_NAMENODE_OPTS
lista de miembros, 610 - 612
variable, 294 , 332
Grunt shell, 426
Variable de entorno HADOOP_OPTS, 151
compresión gzip, 100 - 101 , 104
Variable de entorno HADOOP_SSH_OPTS,
Clase GzipCodec, 101
296
HADOOP_USER_CLASSPATH_FIRST envi‐
H Ronment variable, 162
HADOOP_USER_NAME entorno variado

https://translate.googleusercontent.com/translate_f 25/39
17/10/2019 Operaciones
Hadoop capaz, 147
aproximadamente 7
historia de, 12 - 15 Hammerbacher, Jeff, 471
instalar, 685 - 690 Archivos HAR, 53
Clase HarFileSystem, 53

Índice | 709

38

Clase HashPartitioner, 123 , 217 , 242 soporte de herramientas, 325 - 329


HBase consideraciones de actualización, 338 - 341
aproximadamente, 7 , 44 , 575 , 599 escribir archivos, 72 - 73
información adicional, 601 Federación HDFS, 48
creación de solicitud de consulta en línea HDFS se hunde
aproximadamente, 589 aproximadamente, 385 - 386
la carga de datos, 591 - 594 desplegándose, 388 - 390
consultas en línea, 594 - 597 formatos de archivo, 387
diseño de esquema, 590 indexación de eventos y 390
opciones de cliente, 584 - 589 particionamiento e interceptores, 387
problemas comunes, 600 - 601 archivo hdfs-site.xml, 292 , 296 , 334
modelo de datos, 576 - 578 Propiedad hdfs.fileType, 387
entrada y salida de la base de datos, 238 Propiedad hdfs.inUsePrefix, 386
Colmena y, 499 Propiedad hdfs.path, 385 , 387
implementando, 578 - 581 propiedad hdfs.proxyUser, 386
instalar, 581 - 584 hdfs.rollInterval propiedad, 386
Comparación RDBMS, 597 - 600 Propiedad hdfs.rollSize, 386
prueba de manejo, 582 - 584 Propiedad hdfs.useLocalTimeStamp, 387
Propiedad hbase.client.scanner.caching, 587 Propiedad hdfs.writeFormat, 388
propiedad hbase.client.scanner.timeout.period, Sistema Hedwig, 637
587 comando de ayuda, 437
hbase: metatabla, 580 efecto rebaño, 635
Clase HBaseConfiguration, 585 herramienta hexdump, 497
Función HBaseStorage (Pig Latin), 447 HFileOutputFormat2 clase, 594
HCatalog (Colmena), 442 alta disponibilidad
HDFS (sistema de archivos distribuido de Hadoop) HDFS y, 48 - 50
aproximadamente, 5 , 43 administradores de recursos y, 196
registros de auditoría, 172 , 324 HILO y 84
conceptos básicos, 45 - 50 informática de alto rendimiento (HPC), 10
operaciones básicas, 51 - 52 comando de historia, 437
evaluación comparativa, 315 Colmena
equilibrio de racimo, 77 aproximadamente, 471
configuración e instalación del clúster, 288 información adicional, 518
dimensionamiento de racimo, 286 Soporte Avro, 406
modelo de coherencia, 74 - 76 formato orientado a columnas, 137
interfaz de línea de comandos, 50 - 52 configurando Hive, 475 - 478
propiedades del demonio, 298 - 299 la comparación de bases de datos, 482 - 484
visión general de diseño, 43 - 45 motores de ejecución, 477
permisos de archivo, 52 Soporte de HCatalog, 442
sistema de archivos de formato, 290 , 689 instalar, 472 - 474
HBase y 600 meta almacén, 480 - 482
alta disponibilidad, 48 - 50 Archivo ORC y 367
Interfaz Java, 56 - 68 Soporte de parquet, 406
copia paralelo con distcp, 76 - 78 consulta de datos, 503 - 510
estructuras de datos persistentes, 317 - 322 servicios soportados, 478 - 479
la lectura de archivos, 69 - 70 SQL dialecto, 485 - 489
modo seguro, 322 - 324 Sqoop exporta y 418
el escalado de datos, 30 de - 34 Importaciones Squoop y, 413 - 415
iniciar y detener demonios, 291

710 Índice

Página 39

mesas importaciones en modo directo, 411


aproximadamente, 489 Colmena y, 413 - 415
alterando, 502 importación de objetos grandes, 415 - 417
cubos y, 491 , 493 - 495 importaciones incrementales, 411
cayendo, 502 visión general, 408 - 410
mesas externas, 490 - 491 soporte de herramientas, 405
importación de datos, 500 - 501 trabajando con datos importados, 412 - 413
tablas gestionadas, 490 - 491 Declaración IMPORT (Pig Latin), 436
particiones y, 491 - 493 índices (colmena), 483
formatos de almacenamiento, 496 - 499 Infochimps.org, 4

https://translate.googleusercontent.com/translate_f 26/39
17/10/2019 Operaciones
consideraciones de versión, 472 información en común, 4
El tiempo conjunto de datos ejemplo, 474 - 475 propiedad initLimit, 639
Interfaz web de Hive (HWI), 478 juntas internas, 505
Propiedad hive.execution.engine, 477 formatos de entrada
Propiedad hive.metastore.uris, 482 entrada binaria, 236
Propiedad hive.metastore.warehouse.dir, 482 entrada de base de datos, 238
Propiedad hive.server2.thrift.port, 478 escisiones y registros, de entrada 31 , 105 , 220 - 232
Clase HiveDriver, 479 entradas múltiples, 237
HiveQL entrada de texto, 232 - 236
aproximadamente, 473 divisiones de entrada
tipos de datos, 486 - 488 sobre, 31 , 220 - 222
operadores y funciones, 488 bloque y 233
Comparación de SQL, 485 - 486 CombineFileInputFormat clase, 226
HiveServer2, 478 compresión y 105
Hopper, Grace, 3 control de tamaño dividido, 225
HPC (informática de alto rendimiento), 10 Clase FileInputFormat, 222 - 226
Herramienta de perfilado HPROF, 176 encontrar información sobre, 227
Clase HTableDescriptor, 586 prevención, 227
HTTP REST API, 54 Clase InputFormat, 221 , 222 , 409
Propiedades del servidor HTTP, 306 Clase InputSampler, 259
HttpFS proxy, 55 , 77 Clase InputSplit (Java), 220
Proyecto Genoma Humano, 659 Clase InputStream (Java), 60
HWI (interfaz web de Hive), 478 INSERTAR EN LA TABLA declaración (Hive), 483 ,
500
INSERTAR la declaración del DIRECTORIO DE SOBRESCRIBIR
yo (Colmena), 491
E / S (entrada / salida)
INSERTAR declaración TABLA DE SOBRESCRIBIR
compresión, 100 - 109
(Colmena), 494 , 500
integridad de datos, 97 - 99
SQL interactivo, 7
estructuras de datos basados en archivos, 127 - 137
lenguaje de descripción de interfaz (IDL), 127
serialización, 109 - 127
interfaces (Hadoop), 54 - 56
IDL (lenguaje de descripción de interfaz), 127
Clase IntSumReducer, 279
Operador ILUSTRADO (Pig Latin), 430 , 436 ,
Clase IntWritable, 25 , 111 , 113
465
Clase InverseMapper, 279
Clase ImmutableBytesWritable, 588
InvokeForDouble class, 453
Motor de consulta Impala, 82 , 484
Clase InvokeForFloat, 453
proceso de importación (tablas Hive), 500 - 501
Clase InvokeForInt, 453
proceso de importación (Sqoop)
InvokeForLong clase, 453
consistencia y 411
Clase InvokeForString, 453
controlador, 410

Índice | 711

Page 40

Propiedad io.compression.codecs, 104 JNI (interfaz nativa de Java), 56


Propiedad io.file.buffer.size, 307 Clase de trabajo
io.native.lib.available property, 104 opciones de caché distribuido, 278
propiedad io.serializations, 126 progreso y actualizaciones de estado, 191
Clase IOUtils, 102 , 230 configuración de archivos JAR explícitos, 160
es operador nulo (colmena), 443 establecer rutas de entrada, 223
Función IsEmpty (Pig Latin), 445 , 446 mostradores de trabajo, 248 , 250
comando isro (ZooKeeper), 605 historial de trabajo, 166
procesamiento iterativo, 7 registros de historial de trabajo (MapReduce), 172
ID de trabajo, 164 , 203

J archivos JAR de trabajo


aproximadamente, 160
servicio de jarra (colmena), 478
classpath del cliente, 161
Java Database Connectivity (JDBC), 408 , 419
dependencias de embalaje, 161
Lenguaje Java
tarea classpath, 161
crear directorios, 63
prioridad de classpath de tarea, 162
borrar datos, 68
página de trabajo (MapReduce), 166
variables de entorno, 294
Clase JobBuilder, 215
Hadoop Streaming y 38
Clase JobClient, 185
HBase y, 584 - 587
Clase JobConf, 109 , 160 , 176
instalación, 288
Clase JobControl, 179
Cerdo y 426
trabajos
consulta de sistema de archivos, 63 - 68
anatomía de trabajo MapReduce corre, 185 - 192
leer datos de la URL de Hadoop, 57
anatomía de los trabajos de Spark, 565 - 570
lectura de datos utilizando la API FileSystem, 58 - 61
proceso de finalización, 192
tipo secundario, 264 - 266
Construcción DAG, 566 - 569
Ejemplo de chispa, 554
depuración, 168 - 171 , 174
archivo syslog, 172
descomponer los problemas en, 177 - 178
contadores definidos por el usuario, 251 - 255
MapReduce por defecto, 214 - 219
Archivos WAR, 160
proceso de inicialización, 187
El tiempo ejemplo conjunto de datos, 24 de - 30 de
lanzamiento, 162 - 164
Contenedores de escritura para primitivas Java, 113 -
tala, 172 - 173
121
embalaje, 160 - 162
escribir datos, 61 - 63
progreso y actualizaciones de estado, 190
Extensiones de gestión de Java (JMX), 331 , 606
recuperando resultados, 167
Interfaz nativa de Java (JNI), 56
funcionando como puntos de referencia, 316
Serialización de objetos Java, 126
que se ejecutan localmente, 157 - 158
Máquina virtual Java (JVM), 29 , 174 , 193

https://translate.googleusercontent.com/translate_f 27/39
17/10/2019 Operaciones
Propiedad java.library.path, 104 ejecutar trabajos de flujo de trabajo de Oozie, 183
programación, 308 , 569
java.util.concurrent package, 539
Soporte de chispa, 552
Clase JavaPairRDD, 555
proceso de presentación, 186 , 565
Clase JavaRDD, 555
ejecución de tarea, 570
Interfaz JavaRDDLike, 555
los conductores de trabajo de prueba, 158 - 160
Clase JavaSerialization, 126
afinación, 175 - 176
JAVA_HOME variable de entorno, 294 , 424 ,
ver información sobre, 165 - 167
686
Clase JobSubmitter, 186
JBOD (solo un montón de discos), 285
Job Trackers, 83
JDBC (Java Database Connectivity), 408 , 419
Unirse a clase, 546
Controladores JDBC, 479
Cláusula JOIN (Colmena), 505
JMX (Extensiones de administración de Java), 331 , 606

712 Índice

Page 41

Declaración de JOIN (Pig Latin), 435 , 459 Proyecto Llama, 82


Uniones equilibrio de carga, grupos de sumideros y, 395 - 399
aproximadamente, 268 , 505 Declaración LOAD DATA (Hive), 475 , 490 , 499
interior, 505 funciones de carga (Pig Latin), 446 , 453 - 456
mapa de la parte, 269 - 270 , 507 Declaración de CARGA (Pig Latin), 433 , 435
exterior, 506 Clase LoadFunc, 455
Operadores de cerdos y, 459 - 464 modo local (Hadoop), 687
lado reducido , 270-273 modo local (cerdo), 425
semi, 507 modo local (Spark), 570
nodos de diario, 49 Clase LocalFileSystem, 53 , 99
Función JsonLoader (Pig Latin), 447 restricciones de localidad, 81
Función JsonStorage (Pig Latin), 447 servicio de cerradura (ZooKeeper), 634 - 636
Lenguaje de expresión JSP, 182 bloqueo de mesas HBase, 578
JUnit framework, 145 agregación de registros, 172
solo un montón de discos (JBOD), 285 archivo log4j.properties, 292 , 330
JVM (máquina virtual Java), 29 , 174 , 193 archivos de registro
Variable de entorno JVMFLAGS, 638 editar registros, 318 - 320
estructuras de datos basadas en archivos y 127 - 134
Soporte de canal, 384
K Soporte de colmena, 477
KDC (Centro de distribución de claves), 310
soporte de monitoreo, 330
comando kdestroy, 312
tipos soportados, 172 - 173 , 295
Kellerman, Jim, 576
Clase LongSumReducer, 279
La autenticación Kerberos, 309 - 312 , 619
Clase LongWritable, 25 , 113 , 210
Centro de distribución de claves (KDC), 310
comando ls, 432 , 436
Clase KeyValueTextInputFormat, 233
Compresión LZ4, 100 - 101 , 104
palabras clave (Pig Latin), 433
Clase Lz4Codec, 101
comando de matar, 436
Compresión de LZO, 100 - 101 , 104
Kimball, Aaron, 401 - 422
Clase LzoCodec, 101
comando kinit, 310
herramienta lzop, 101
comando klist, 312
Clase LzopCodec, 101
comando ktutil, 310

METRO
L macros (Pig Latin), 447 - 448
LARGE_READ_OPS counter, 250
MailTrust, 6
Declaración de VISTA LATERAL (Colmena), 511
mantenimiento (ver administración del sistema)
Clase LazyOutputFormat, 245
mesas administradas (Colmena), 490 - 491
proceso de elección del líder, 621 , 634
Cláusula MAP (Colmena), 503
propiedad de leaderServes, 622
funciones de mapa (MapReduce)
Declaración de JOIN EXTERIOR IZQUIERDA (Colmena), 506
acerca de, 23
Declaración de SEMI JOIN IZQUIERDA (Colmena), 507
salida de compresión, 108
libhdfs (biblioteca C), 55
tareas de flujo de datos, 31 de - 36
Declaración LIMIT (Pig Latin), 435 , 465
forma general, 209
Lin, Jimmy, 177
Hadoop Streaming, 37
longitud de línea, máxima, 233
Bloques HDFS y 45
Clase LinuxContainerExecutor, 304 , 313
Ejemplo de Java, 24
Clase LinuxTaskController, 313
datos de unión, 269 - 270
comando de lista (HBase), 583
progreso y actualizaciones de estado, 190
listado de archivos, 65
barajar y ordenar, 197 - 198

Índice | 713

Page 42

Chispa y 566 desarrollo de aplicaciones


tareas asignadas, 188 sobre, 141
ejecución de tarea, 189 API de configuración, 141 - 144

https://translate.googleusercontent.com/translate_f 28/39
17/10/2019 Operaciones
fallas de tareas, 194 que se ejecutan localmente en los datos de prueba, 156 - 160
prueba con MRUnit, 153 - 156 que se ejecuta en racimos, 160 - 175
lista de verificación de ajuste, 175 configuración del entorno de desarrollo,
propiedades de ajuste, 202 144 - 152
Clase MapDriver, 153 tuning puestos de trabajo, 175 - 176
Clase MapFile, 135 flujos de trabajo, 177 - 184
Clase MapFileOutputFormat, 240 escribir las pruebas unitarias, 152 - 156
Clase MapFn, 524 , 527 consideraciones de fallo, 193 - 196
Interfaz del mapeador Transmisión de Hadoop, 37 - 41
sobre, 153 - 156 HBase y, 587 - 589
encontrar información sobre divisiones de entrada, 227 Colmena y 477
ejecución de tarea, 203 formatos de entrada, 220 - 238
parámetros de tipo, 210 datos de unión, 268 - 273
Clase asignada, 546 clases de biblioteca compatibles, 279
archivo mapred-env.sh, 292 Comparación de API antigua y nueva, 697 - 698
archivo mapred-site.xml, 292 firmas API antiguas, 211
propiedad mapred.child.java.opts, 174 , 201 , 302 formatos de salida, 238 - 245
propiedad mapred.combiner.class, 213 Apoyo parqué, 377 - 379
propiedad mapred.input.format.class, 213 informes de progreso en 191
propiedad mapred.job.tracker, 158 consulta de datos, 6 , 503
propiedad mapred.map.runner.class, 213 solicitudes de recursos, 82
propiedad mapred.mapoutput.key.class, 213 barajar y ordenar, 197 - 203
propiedad mapred.mapoutput.value.class, 213 distribución de datos secundarios, 273 - 279
propiedad mapred.mapper.class, 213 datos de clasificación, 255 - 268 , 363 - 365
propiedad mapred.output.format.class, 213 Chispa y, 558
propiedad mapred.output.key.class, 213 Sqoop support, 405 , 408 , 419
propiedad mapred.output.key.comparator.class, iniciar y detener demonios, 292
213 comparación del sistema, 8 - 12
propiedad mapred.output.value.class, 213 ejecución de la tarea, 189 , 203 - 208
propiedad mapred.output.value.groupfn.class, tipos admitidos, 209 - 214
213 tiempo ejemplo conjunto de datos, 19 - 37
propiedad mapred.partitioner.class, 213 Comparación HILO, 83 - 85
propiedad mapred.reducer.class, 213 Clase Mapreduce, 546
Mapa reducido Modo MapReduce (Pig), 425 , 467
sobre, 6 , 19 , 177 Declaración MAPREDUCE (Pig Latin), 435
anatomía de trabajo se ejecuta, 185 - 192 Propiedad mapreduce.am.max-intentos, 194
Soporte Avro, 359 - 365 mapreduce.client.progressmonitor.pollinterval
procesamiento por lotes, 6 propiedad, 191
evaluación comparativa con TeraSort, 315 mapreduce.client.submit.file.replication adecuada
configuración e instalación del clúster, 288 ty, 187
compresión y, 106 - 109 mapreduce.cluster.acls.enabled propiedad, 313
contadores, 247 - 255 propiedad mapreduce.cluster.local.dir, 174 , 198
Crunch and, 520 propiedad mapreduce.framework.name, 158 , 159 ,
propiedades daemon, 301 - 303 425 , 687
descomponer los problemas en puestos de trabajo, 177 - 178
mapreduce.input.fileinputformat.input.dir.re‐
trabajo por defecto, 214 - 219 propiedad cursiva, 224

714 Índice

Page 43

mapreduce.input.fileinputformat.inputdir prop‐ propiedad mapreduce.map.cpu.vcores, 188 , 303


erty, 224 propiedad mapreduce.map.failures.maxpercent,
mapreduce.input.fileinputformat.split.maxsize 194
propiedad, 225 Propiedad mapreduce.map.input.file, 228
mapreduce.input.fileinputformat.split.minsize propiedad mapreduce.map.input.length, 228
propiedad, 225 Propiedad mapreduce.map.input.start, 228
mapreduce.input.keyvaluelinerecordread‐ propiedad mapreduce.map.java.opts, 302
propiedad er.key.value.separator, 233 Propiedad mapreduce.map.log.level, 173
mapreduce.input.lineinputformat.linespermap Propiedad mapreduce.map.maxattempts, 194
propiedad, 234 Propiedad mapreduce.map.memory.mb, 188 , 302
mapreduce.input.linerecordreader.line.max‐ propiedad mapreduce.map.output.compress, 109 ,
longitud de propiedad, 233 198 , 202
Propiedad mapreduce.input.pathFilter.class, 224 mapreduce.map.output.compress.codec apropiado‐
Propiedad mapreduce.job.acl-modify-job, 313 ty, 109 , 198 , 202
mapreduce.job.acl-view-job property, 313 Propiedad mapreduce.map.output.key.class, 212
propiedad mapreduce.job.combine.class, 212 propiedad mapreduce.map.output.value.class, 212
propiedad mapreduce.job.end-notify.url, mapreduce.map.sort.spill.percent propiedad, 197 ,
192 202
propiedad mapreduce.job.hdfs-server, 313 mapreduce.map.speculative property, 205
propiedad mapreduce.job.id, 203 mapreduce.mapper.multithreadedmap‐
propiedad mapreduce.job.inputformat.class, 212 propiedad por hilos, 222
Propiedad mapreduce.job.map.class, 212 mapreduce.output.fileoutputformat.compress
mapreduce.job.maxtaskfailures.per.tracker propiedad, 107 , 372
propiedad, 195 mapreduce.output.fileoutputformat.com‐
mapreduce.job.output.group.comparator.class propiedad press.codec, 107
propiedad, 212 mapreduce.output.fileoutputformat.com‐
propiedad mapreduce.job.output.key.class, 212 propiedad press.type, 108
mapreduce.job.output.key.comparator.class mapreduce.output.textoutputformat.separator
propiedad, 212 , 258 propiedad, 239
propiedad mapreduce.job.output.value.class, 212 mapreduce.reduce.cpu.vcores propiedad, 188 , 303

https://translate.googleusercontent.com/translate_f 29/39
17/10/2019 Operaciones
Propiedad mapreduce.job.outputformat.class, 212 mapreduce.reduce.failures.maxpercent apropiado‐
propiedad mapreduce.job.partitioner.class, 212 ty, 194
propiedad mapreduce.job.queuename, 90 mapreduce.reduce.input.buffer.percent apropiado‐
propiedad mapreduce.job.reduce.class, 212 ty, 201 , 203
mapreduce.job.reduce.slowstart.completedmaps propiedad mapreduce.reduce.java.opts, 302
propiedad, 308 propiedad mapreduce.reduce.log.level, 173
propiedad mapreduce.job.reduces, 187 propiedad mapreduce.reduce.maxattempts, 194
mapreduce.job.ubertask.enable property, 188 propiedad mapreduce.reduce.memory.mb, 188 ,
propiedad mapreduce.job.ubertask.maxbytes, 187 302
propiedad mapreduce.job.ubertask.maxmaps, 187 mapreduce.reduce.merge.inmem.threshold
propiedad mapreduce.job.ubertask.maxreduces, propiedad, 199 , 201 , 203
187 mapreduce.reduce.shuffle.input.buffer.percent
mapreduce.job.user.classpath.first property, 162 propiedad, 199 , 202
propiedad mapreduce.jobhistory.address, 305 mapreduce.reduce.shuffle.maxfetchfailures
Propiedad mapreduce.jobhistory.bind-host, 305 propiedad, 202
propiedad mapreduce.jobhistory.webapp.address, mapreduce.reduce.shuffle.merge.percent prop‐
306 Erty, 199 , 202
propiedad mapreduce.map.combine.minspills, mapreduce.reduce.shuffle.parallelcopies apropiado‐
198 , 202 ty, 199 , 202

Índice | 715

Page 44

mapreduce.reduce.speculative property, 205 metadatos


propiedad mapreduce.shuffle.max.threads, 198 , copias de seguridad de, 332
202 tamaños de bloque y 46
propiedad mapreduce.shuffle.port, 306 sistemas de archivos y, 318 - 320
mapreduce.shuffle.ssl.enabled propiedad, 314 Meta almacén colmena, 472 , 478 , 480 - 482
propiedad mapreduce.task.attempt.id, 203 requisitos de memoria de namenode, 44
mapreduce.task.files.preserve.failedtasks prop‐ Consideraciones de parquet, 370
erty, 174 consulta, 63 - 65
mapreduce.task.files.preserve.filepattern prop‐ consideraciones de actualización, 338 - 341
erty, 174 meta almacén (Colmena), 472 , 478 , 480 - 482
propiedad mapreduce.task.id, 203 METASTORE_PORT variable de entorno,
propiedad mapreduce.task.io.sort.factor, 198 , 199 , 478
202 métrica
propiedad mapreduce.task.io.sort.mb, 197 , 201 contadores y 331
propiedad mapreduce.task.ismap, 204 HBase y, 601
propiedad mapreduce.task.output.dir, 207 JMX y 331
propiedad mapreduce.task.partition, 204 Proyecto Microsoft Research MyLifeBits, 4
propiedad mapreduce.task.profile, 176 Contador MILLIS_MAPS, 251
propiedad mapreduce.task.profile.maps, 176 MILLIS_REDUCES counter, 251
mapreduce.task.profile.reduces propiedad, 176 Función MIN (Pig Latin), 446
propiedad mapreduce.task.timeout, 193 miniclusters, pruebas en, 159
propiedad mapreduce.task.userlog.limit.kb, 173 condición de replicación mínima, 323
Clase MapWritable, 120 MIP (interfaz de paso de mensajes), 10
Contador MAP_INPUT_RECORDS, 249 comando mkdir, 436
Contador MAP_OUTPUT_BYTES, 249 comando mntr (ZooKeeper), 606
MAP_OUTPUT_MATERIALIZED_BYTES grupos de monitoreo
mostrador, 249 aproximadamente, 330
Contador MAP_OUTPUT_RECORDS, 249 soporte de registro, 330
mashups, 4 métricas y JMX, 331
Massie, Matt, 653 Clase MorphlineSolrSink, 390
nodos maestros (HBase), 578 MRBench benchmark, 316
patrón maestro-trabajador (namenodes), 46 Biblioteca MRUnit
proceso de materialización (Crunch), 535 - 537 aproximadamente, 145 , 152
Maven POM (Modelo de objetos del proyecto), 144 - 145 , sus funciones de prueba, 153 - 156
160 , 351 prueba de funciones reducidas , 156
Función MAX (Pig Latin), 444 , 446 múltiples archivos
Contador MB_MILLIS_MAPS, 251 formatos de entrada, 237
Contador MB_MILLIS_REDUCES, 251 Clase MultipleOutputs, 242 - 244
gestión de la memoria formatos de salida, 240 - 244
buffering escribe, 197 datos de la partición, 240 - 242
restricciones de la memoria virtual del contenedor, 303 Clase MultipleInputs, 237 , 270
demonios, 295 Clase MultipleOutputFormat, 240
tamaño de almacenamiento dinámico de memoria, 294 Clase MultipleOutputs, 242 - 244
nombrenodos, 286 , 294 selectores de multiplexación, 390
Chispa y, 549 ejecución multiquery, 434
tareas asignadas, 188 inserto multitarea, 501
Clase MemPipeline, 524 Clase MultithreadedMapper, 222 , 279
Contador MERGED_MAP_OUTPUTS, 250 MultithreadedMapRunner clase, 279
Interfaz de paso de mensajes (MPI), 10 comando mv, 436

716 Índice

https://translate.googleusercontent.com/translate_f 30/39
17/10/2019 Operaciones

Página 45

Proyecto MyLifeBits, 4 NFS gateway, 56


MySQL Clase NLineInputFormat, 208 , 234
crear esquemas de bases de datos, 404 NNBench benchmark, 316
Colmena y 481 administradores de nodos
HiveQL y, 473 aproximadamente 80
instalación y configuración, 404 lista negra, 195
base de datos poblacional, 404 nodos de puesta en servicio, 334 - 335
utilidad mysqlimport, 420 nodos de desmantelamiento, 335 - 337
consideraciones de falla, 195
solicitudes de latidos, 94
norte proceso de inicialización del trabajo, 187
namenodes
fracaso del administrador de recursos, 196
aproximadamente, 12 , 46
comenzando, 291
almacenamiento en caché de bloque, 48
tareas de transmisión, 189
proceso de verificación, 320
ejecución de tarea, 189
configuración e instalación de clúster, 290
fracaso de tarea, 193
dimensionamiento de racimo, 286
rastreadores de tareas y, 84
nodos de puesta en servicio, 334 - 335
normalización (datos), 9
integridad de datos y 98
Clase NullOutputFormat, 239
Clase DataStreamer y 72
Clase de escritura nula, 118 , 119 , 239
nodos de desmantelamiento, 335 - 337
NUM_FAILED_MAPS contador, 251
Clase DFSInputStream y 70
NUM_FAILED_REDUCES contador, 251
estructura de directorios, 317 - 318
NUM_FAILED_UBERTASKS contador, 251
controladores de conmutación por error y 50
NUM_KILLED_MAPS contador, 251
metadatos del sistema de archivos y 44
NUM_KILLED_REDUCES contador, 251
Federación HDFS, 48
NUM_UBER_SUBMAPS counter, 251
consideraciones de memoria, 286 , 294
NUM_UBER_SUBREDUCES contador, 251
colocación de réplicas, 73
Sistema de archivos distribuido Nutch (NDFS), 13
modo seguro, 323 - 324
Nutch motor de búsqueda, 12 - 13
secundaria, 47 , 291 , 321
puntos únicos de falla, 48
inicial, 291 , 320 O
identificador de ID de espacio de nombres, 318 Clase de objeto (Java), 123
Centro Nacional de Datos Climáticos (NCDC) las propiedades del objeto, la impresión, 149 - 151
formato de datos, 19 Clase ObjectWritable, 119
lógica de análisis encapsulante, 154 Controladores ODBC, 479
entradas múltiples, 237 herramienta de línea de comandos oozie, 183
preparación de archivos de datos meteorológicos, 693 - 695Propiedad oozie.wf.application.path, 183
NativeAzureFileSystem clase, 54 OOZIE_URL variable de entorno, 183
NCDC (Centro Nacional de Datos Climáticos) operaciones (ZooKeeper)
formato de datos, 19 excepciones admitidas, 630 - 634 , 635
lógica de análisis encapsulante, 154 enlaces de idiomas, 617
entradas múltiples, 237 Multiupdate, 616
preparación de archivos de datos meteorológicos, 693 - 695 ver disparadores, 618
NDFS (sistema de archivos distribuido Nutch), 13 znode compatible, 616
codificación anidada, 370 operadores (HiveQL), 488
net.topology.node.switch.mapping.impl propiedad‐ operadores (cerdo)
ty, 288 combinando y dividiendo datos, 466
propiedad net.topology.script.file.name, 288 filtrado de datos, 457 - 459
topología de red, 70 , 74 , 286 - 288 agrupar y unir datos, 459 - 464

Índice | 717

Página 46

carga y almacenamiento de datos, 456 dependencias de embalaje, 161


ordenar datos, 465 tarea classpath, 161
Archivo de columnas de registro optimizado (ORCFile), prioridad de classpath de tarea, 162
367 , 498 empaquetar aplicaciones de flujo de trabajo Oozie, 182
ORCFile (archivo de columnas de registro optimizado), Algoritmo de PageRank, 543
367 , 498 Clase de pares, 525 , 527
Función OrcStorage (Pig Latin), 447 Clase PairRDDFunctions, 553
Cláusula ORDER BY (colmena), 503 Palabra clave PARALLEL (Pig Latin), 458 , 467
ORDEN (Pig Latin), 435 , 465 el procesamiento en paralelo, 76 - 78
org.apache.avro.mapreduce package, 359 Paralelo Do fusion, 543
paquete org.apache.crunch.io, 531 parámetro de sustitución (cerdo), 467 - 469
paquete org.apache.crunch.lib, 545 Parquet
org.apache.flume.serialization package, 388 aproximadamente, 137 , 367
org.apache.hadoop.classification package, 337 Avro y, 375 - 377
paquete org.apache.hadoop.conf, 141 formato de almacenamiento binario y 498
org.apache.hadoop.hbase package, 585 configurando, 372
org.apache.hadoop.hbase.mapreduce package, modelo de datos, 368 - 370
587 formato de archivo, 370 - 372
org.apache.hadoop.hbase.util package, 586 Soporte de colmena, 406
org.apache.hadoop.io package, 25 , 113 Apoyo MapReduce, 377 - 379
org.apache.hadoop.io.serializer package, 126 codificación anidada, 370
org.apache.hadoop.mapreduce package, 220 Los tampones de protocolo y, 375 - 377

https://translate.googleusercontent.com/translate_f 31/39
17/10/2019 Operaciones
org.apache.hadoop.mapreduce.jobcontrol pack‐ Soporte Sqoop, 406
edad, 179 El ahorro y, 375 - 377
org.apache.hadoop.mapreduce.join package, soporte de herramientas, 367
270 archivos de lectura y escritura, 373 - 377
org.apache.hadoop.streaming.mapreduce pack‐ propiedad parquet.block.size, 372 , 379
edad, 235 parquet.compression property, 372
org.apache.pig.builtin package, 450 propiedad parquet.dictionary.page.size, 372
paquete org.apache.spark.rdd, 558 parquet.enable.dictionary property, 372
OTHER_LOCAL_MAPS counter, 251 parquet.example.data package, 373
juntas externas, 506 parquet.example.data.simple package, 373
formatos de salida parquet.page.size propiedad, 372
salida binaria, 239 Función ParquetLoader (Pig Latin), 447
salida de la base de datos, 238 Clase de ParquetReader, 374
salida perezosa, 245 Función ParquetStorer (Pig Latin), 447
múltiples salidas, 240 - 244 ParquetWriter clase, 374
salida de texto, 239 Ordenar parcial, 257 - 258
Interfaz OutputCollector, 207 Cláusula de PARTICIÓN (colmena), 500
Salida Clase de transmisor, 188 , 189 , 206 - 208 PARTICIONADO POR cláusula (Colmena), 492
Interfaz OutputFormat, 206 , 238 - 245 datos particionados
Palabra clave OVERWRITE (Hive), 475 aproximadamente, 9
SOBRESCRIBIR modo de escritura, 532 HDFS se hunde y, 387
O'Malley, Owen, 14 Mesas y colmenas, 491 - 493
ejemplo de conjunto de datos meteorológicos, 240 - 242

PAGS Interfaz de partición, 211 , 272


Clase de ruta, 58 , 61
trabajos de embalaje
CAMINO variable de entorno, 339
aproximadamente, 160
Interfaz PathFilter, 65 - 68
classpath del cliente, 161

718 Índice

Page 47

Algoritmo de Paxos, 621 declaraciones, 433 - 437


Interfaz de PCollection estructura, 432
acerca de, 521 propiedad pig.auto.local.enabled, 426
Método asCollection (), 537 pig.auto.local.input.maxbytes, 426
tuberías de control de puntos, 545 Clase PigRunner, 426
método materialize (), 535 - 537 Clase PigServer, 426
método paraleloDo (), 521 , 524 - 525 , 541 Función PigStorage (Pig Latin), 446
ejecución de tubería, 538 Variable de entorno PIG_CONF_DIR, 425
lectura de archivos, 531 ejecución de tubería (Crunch)
tipos soportados, 528 - 530 aproximadamente, 538
método union (), 523 tuberías de control de puntos, 545
escribir archivos, 532 inspección de planes, 540 - 543
permisos algoritmos iterativos, 543 - 544
ACL, 620 tendido de tuberías, 538 - 539
Consideraciones de HDFS, 52 parada de tuberías, 539
almacenamiento, 46 Interfaz de tubería
persistencia, RDD, 560 - 562 método done (), 539
estructuras de datos persistentes, 317 Método enableDebug (), 539
Znodes persistentes, 614 método read (), 531
Interfaz PGroupedTable Método readTextFile (), 521
aproximadamente, 522 , 526 método run (), 538 - 539
Método combineValues (), 526 - 528 , 534 Método runAsync (), 539
Método mapValues (), 534 PipelineExecution interface, 539
PHYSICAL_MEMORY_BYTES contador, 249 , Clase PipelineResult, 523 , 538
303 Interfaz de objeto, 537 , 543
Cerdo Interfaz legible posicionada, 60
aproximadamente, 423 preferencia, 93
información adicional, 469 Clase PrimitiveEvalFunc, 452
relaciones anónimas y, 467 las propiedades del objeto de impresión, 149 - 151
comparación con bases de datos, 430 - 431 tareas de perfilado, 175 - 176
Crunch and, 519 progreso, seguimiento de tareas, 190
operadores de procesamiento de datos, 456 - 466 Interfaz progresible, 61
tipos de ejecución, 424 - 426 propiedades
instalación y funcionamiento, 424 - 427 demonio, 296 - 303
paralelismo y 467 sintonización del lado del mapa, 202
sustitución de parámetros y, 467 - 469 la impresión de objetos, 149 - 151
técnicas prácticas, 466 - 469 sintonización de lado reducido, 202
ordenar datos, 259 znodes, 614 - 615
funciones definidas por el usuario, 448 - 456 Los tampones de protocolo, 375 - 377
El tiempo conjunto de datos ejemplo, 427 - 430 Clase ProtoParquetWriter, 375
Jerga herramienta de shell psdsh, 293
aproximadamente, 423 , 432 Modo pseudodistributed (Hadoop), 688 - 690
tipos incorporados, 439 - 441 Interfaz PTable
comandos soportados, 436 aproximadamente, 522
soporte de editor, 427 Método asMap (), 537
expresiones, 438 - 439 instancia de creación, 525
funciones, 440 , 445 - 447 encontrar un conjunto de valores únicos para claves, 535
macros, 447 - 448 Método groupByKey (), 526
esquemas, 441 - 445 método materializeToMap (), 536

https://translate.googleusercontent.com/translate_f 32/39
17/10/2019 Operaciones

Índice | 719

48

lectura de archivos de texto, 531 RDBMS (gestión de bases de datos relacionales


Clase PTables, 546 Sistemas)
Interfaz PTableType, 522 aproximadamente, 8 - 9
Interfaz PType, 524 , 528 - 530 , 535 Comparación de HBase, 597 - 600
Conjuntos de datos públicos, 4 Metadatos y colmena, 489
comando pwd, 436 Comparación de cerdos, 430
API PySpark, 555 Clase RDD
comando pyspark, 555 método filter (), 551
Lenguaje Python método map (), 551
Avro y, 354 RDD (conjuntos de datos distribuidos resistentes)
contadores incrementales, 255 aproximadamente, 550 , 556
consulta de datos, 504 creando, 556
Ejemplo de chispa, 555 Java y 555
ejemplo de conjunto de datos meteorológicos, 40 operaciones sobre, 557 - 560
persistencia y, 560 - 562

Q serialización, 562
permiso de lectura (r), 52
QJM (gerente de quórum journal), 49
Permiso de LECTURA (ACL), 620
consultar datos
lectura de datos
aproximadamente 6
Crunch support, 531
agregando datos, 503
Clase FileSystem y, 58 - 61 , 69
procesamiento por lotes, 6
de Hadoop URL, 57
Clase FileStatus, 63 - 65
El flujo de datos de HDFS, 69 - 70
Clase de sistema de archivos, 63 - 68
Pavimento de, 373 - 377
Solicitud de consulta en línea HBase, 589 - 597
Secuencia Clase de archivo, 129 - 132
datos de unión, 505 - 508
lecturas locales en cortocircuito, 308
Guiones de MapReduce, 503
Clase ReadSupport, 373
ordenar datos, 503
READ_OPS counter, 250
subconsultas, 508
Clase RecordReader, 221 , 229
vistas, 509
registros, procesando archivos como, 228 - 232
elasticidad de cola, 88
Cláusula REDUCIR (Colmena), 503
colas
funciones de reducción (MapReduce)
Programador de capacidad, 88 - 90
acerca de, 23
Programador justo, 90 - 94
tareas de flujo de datos, 31 de - 36
comando de salida, 437
forma general, 209
gerente de quórum journal (QJM), 49
Hadoop Streaming, 37
Ejemplo de Java, 25
R datos de unión, 270 - 273
r (leer) permiso, 52 progreso y actualizaciones de estado, 190
tareas locales en rack, 188 barajar y ordenar, 198 - 201
topología de rack, 287 - 288 Chispa y 567
Rackspace MailTrust, 6 tareas asignadas, 188
Contador RACK_LOCAL_MAPS, 251 ejecución de tarea, 189
RAID (matriz redundante de discos independientes), fallas de tareas, 194
285 prueba con MRUnit, 156
Rajaraman, Anand, 5 lista de verificación de ajuste, 175
Declaración RANK (Pig Latin), 435 propiedades de ajuste, 202
Interfaz RawComparator, 112 , 123 , 258 Clase Reducir Conductor, 156
Clase RawLocalFileSystem, 53 , 99 Interfaz reductora, 203 , 210

720 Índice

Página 49

REDUCE_INPUT_GROUPS counter, 249 Propiedades del servidor RPC, 305


REDUCE_INPUT_RECORDS counter, 249 Clase RpcClient (Java), 398
REDUCE_OUTPUT_RECORDS contador, 249 RPC (llamadas a procedimiento remoto), 109
REDUCE_SHUFFLE_BYTES contador, 249 Lenguaje Ruby, 37 - 40
matriz redundante de discos independientes (RAID), comando de ejecución, 434 , 437
285 Interfaz ejecutable (Java), 83
genomas de referencia, 659 comando ruok (ZooKeeper), 605
Clase ReflectionUtils, 102 , 130
Clase RegexMapper, 279
Clase RegexSerDe, 499
S
Clase S3AFileSystem, 53
servidores regionales (HBase), 578
modo seguro, 322 - 324
Declaración de REGISTRO (Pig Latin), 436
Sammer, Eric, 284
expresiones regulares, 498
Clase de muestra, 546
Sistemas de gestión de bases de datos relacionales (ver
Declaración de muestra (Pig Latin), 435
RDBMS)

https://translate.googleusercontent.com/translate_f 33/39
17/10/2019 Operaciones
depuración remota, 174 Ejemplo de aplicación Scala, 552 - 554
escalamiento horizontal (datos)
llamadas a procedimiento remoto (RPC), 109
alrededor de 30
modo replicado (ZooKeeper), 620 , 639
funciones combinadas, 34 - 36
Interfaz de reportero, 191
flujo de datos, 30 - 34
espacio de almacenamiento reservado, 307
ejecución de trabajos distribuidos, 37
Conjuntos de datos distribuidos resilientes (ver RDD)
Clase de escaneo, 586
página del administrador de recursos, 165
programación en YARN
administradores de recursos
aproximadamente, 85
aproximadamente 80
Programador de capacidad, 88 - 90
fallo maestro de aplicación, 195
retraso en la programación, 94
dimensionamiento de racimo, 286
Equidad dominante en los recursos, 95
nodos de puesta en servicio, 334 - 335
Programador justo, 90 - 94
nodos de desmantelamiento, 335 - 337
Programador FIFO, 86
consideraciones de falla, 196
puestos de trabajo, 308
solicitudes de latidos, 94
programación de tareas en Spark, 569
proceso de inicialización del trabajo, 187
esquema de lectura, 9 , 482
proceso de presentación de trabajos, 187
esquema en escritura, 482
perseguidores de empleo y 84
esquemas
fallo del administrador de nodos, 195
Avro, 346 - 349 , 375
progreso y actualizaciones de estado, 191
Solicitud de consulta en línea de HBase, 590
comenzando, 291
MySQL, 404
tareas asignadas, 188
Parquet, 373
ejecución de tarea, 189
Pig Latin, 441 - 445 , 456
volcados de hilo, 331
Clase ScriptBasedMapping, 288
solicitudes de recursos, 81
guiones
REST, HBase y, 589
MapReduce, 503
Clase de resultado, 587
Cerdo, 426
Interfaz ResultScanner, 586
Pitón, 504
Interfaz ResultSet, 409
ZooKeeper, 638
rg.apache.hadoop.hbase.client package, 585
plataformas de búsqueda, 7
comando rm, 436
nombres secundarios
comando rmf, 436
aproximadamente, 47
Cláusula FORMATO DE FILA (Colmena), 474 , 498 , 510
proceso de verificación, 320
Clase RowCounter, 587
estructura de directorios, 321

Índice | 721

Página 50

comenzando, 291 Soporte IDL, 127


ordenación secundaria, 262 - 268 costumbre implementación de escritura, 121 - 125
SecondarySort class, 546 marcos enchufables, 126 - 127
seguridad RDD, 562
aproximadamente, 309 Soporte Sqoop, 407
mejoras adicionales, 313 - 314 lista de verificación de ajuste, 175
fichas de delegación, 312 Jerarquía de clases de escritura, 113 - 121
Kerberos y, 309 - 312 Interfaz de escritura, 110 - 112
security.datanode.protocol.acl propiedad, 314 Interfaz de serialización, 126
buscar tiempo, 8 Interfaz de serializador, 126
Interfaz buscable, 59 propiedad del serializador, 388
Instrucción SELECT (Hive) Serializador-Deserializador (SerDe), 496 - 499
agrupando filas, 475 solicitudes de servicio, 310
índice de soporte, 483 Conjunto de clase, 547
datos particionados y 500 Comando SET (Colmena), 476
subconsultas y 508 comando set (Cerdo), 437
vistas y 509 Operación setACL (ZooKeeper), 616
Sentencia SELECT TRANSFORM (Colmena), 510 Operación setData (ZooKeeper), 616
selectores, replicación y multiplexación, 390 Clase SetFile, 135
semi se une, 507 Proyecto SETI @ home, 11
datos semiestructurados, 9 comando sh, 437
punto y coma, 432 Fragmento de clase, 547
Clase SequenceFile arquitectura de nada compartido, 10
aproximadamente 127 Red de intercambio de ShareThis, 680 - 684
corrientes de compresión, 102 lecturas locales de cortocircuito, 308
conversión de archivos tar, 127 Clase de escritura corta, 113
mostrando con interfaz de línea de comandos, 132 Declaración de SHOW FUNCTIONS (Hive), 489
exportaciones y 421 Declaración SHOW LOCKS (Hive), 483
visión general del formato, 133 - 134 Declaración de SHOW PARTITIONS (Hive), 493
Clase NullWritable y 119 Declaración de SHOW TABLES (Hive), 509
Clase ObjectWritable y 119 proceso de barajar
lectura, 129 - 132 sobre, 197
clasificación y fusión, 132 ajuste de la configuración, 201 - 203
Soporte Sqoop, 406 Mapa lado, 197 - 198
escritura, 127 - 129 reducir lado, 198 - 201
SequenceFileAsBinaryInputFormat clase, 236 Contador SHUFFLED_MAPS, 250
SequenceFileAsBinaryOutputFormat clase, 240 distribución de datos secundarios
SequenceFileAsTextInputFormat clase, 236 acerca de, 273
Clase SequenceFileInputFormat, 236 caché distribuida, 274 - 279
Clase SequenceFileOutputFormat, 108 , 231 , 239 configuración de trabajo, 273
Znodes secuenciales, 615 Sierra, Stuart, 127
SerDe (serializador-deserializador), 496 - 499 punto único de falla (SPOF), 48

https://translate.googleusercontent.com/translate_f 34/39
17/10/2019 Operaciones
Palabra clave SERDE (Colmena), 498 inicio de sesión único, 310
Interfaz serializable (Java), 533 grupos fregadero (Flume), 395 - 397
publicación por entregas propiedad sinkgroups, 395
sobre, 109 - 110 Función TAMAÑO (Pig Latin), 444 , 446
Apoyo Avro, 349 - 352 archivo de esclavos, 290 , 292 , 335
Clase DefaultStringifier, 274 Compresión Snappy, 100 - 101 , 104
de funciones, 533 Clase SnappyCodec, 101

722 Índice

51

CLASE POR (cláusula), 503 secuencias de escape compatibles, 418


Clase de clasificación, 520 , 547 proceso de exportación, 417 - 422
Clase SortedMapWritable, 120 formatos de archivo, 406
ordenar datos código generado, 407
sobre 255 consiguiendo, 401 - 403
Avro y, 358 , 363 - 365 proceso de importación, 408 - 412
orden de clasificación de control, 258 importación de objetos grandes, 415 - 417
Mesas de colmena, 503 Soporte MapReduce, 405 , 408 , 419
MapReduce y, 255 - 268 , 363 - 365 Soporte de parquet, 406
Ordenar parcial, 257 - 258 importación de muestra, 403 - 407
Operadores de cerdos y 465 Clase SequenceFile y, 406
resumen de preparación, 256 serialización y, 407
ordenación secundaria, 262 - 268 soporte de herramientas, 402 , 407
proceso aleatorio y, 197 - 203 trabajando con datos importados, 412 - 415
Ordenar totales, 259 - 262 primer comando (ZooKeeper), 605
Interfaz de origen, 531 comando srvr (ZooKeeper), 605
Interfaz SourceTarget, 533 SSH, configurando, 289 , 296 , 689
Chispa - chispear rastros de pila, 331
aproximadamente, 549 Pila, Michael, 575 - 602
información adicional, 574 modo independiente (Hadoop), 687
anatomía de trabajos, 565 - 570 comando stat (ZooKeeper), 605
gerentes de clúster y, 570 declaraciones (Pig Latin)
ejemplo de 550 - 555 sobre, 433 - 437
albaceas y, 570 flujo de control, 438
Colmena y 477 expresiones y, 438 - 439
instalación, 550 estados (ZooKeeper), 625 - 627 , 631
MapReduce y, 558 actualizaciones de estado para tareas, 190
RDD y 556 - 563 manipuladores de almacenamiento, 499
solicitudes de recursos, 82 almacenar funciones (Pig Latin), 446
variables compartidas, 564 - 565 Declaración STORE (Pig Latin), 434 , 435 , 465
ordenar datos, 259 ALMACENADO como cláusula (Colmena), 498
HILO y, 571 - 574 ALMACENADO por la cláusula (Colmena), 499
comando spark-shell, 550 Declaración de STREAM (Pig Latin), 435 , 458
comando de envío de chispa, 553 , 573 propiedad stream.map.input.field.separator, 219
propiedad spark.kryo.registrator, 563 propiedad stream.map.input.ignoreKey, 218
Clase SparkConf, 553 propiedad stream.map.output.field.separator, 219
Clase SparkContext, 550 , 571 - 574 stream.non.zero.exit.is.failure property, 193
Clase SpecificDatumReader, 352 propiedad stream.num.map.output.key.fields, 219
ejecución especulativa de tareas, 204 - 206 propiedad stream.num.reduce.output.key.fields,
Contador SPILLED_RECORDS, 249 219
Declaración SPLIT (Pig Latin), 435 , 466 propiedad stream.recordreader.class, 235
divisiones (datos de entrada) (ver divisiones de entrada) propiedad stream.reduce.input.field.separator,
Contador SPLIT_RAW_BYTES, 249 219
SPOF (punto único de falla), 48 propiedad stream.reduce.output.field.separator,
Sqoop 219
aproximadamente, 401 Programas de streaming
información adicional, 422 aproximadamente 7
Soporte Avro, 406 trabajo por defecto, 218 - 219
conectores y, 403 tipo secundario, 266 - 268

Índice | 723

Page 52

ejecución de tarea, 189 vistas, 509


contadores definidos por el usuario, 255 Cláusula TABLESAMPLE (Colmena), 495
Clase StreamXmlRecordReader, 235 Interfaz TableSource, 531
Configuración StrictHostKeyChecking SSH, 296 Interfaz de destino, 532
Clase de cadena (Java), 115 - 118 , 349 ID de intento de tarea, 164 , 203
Clase StringTokenizer (Java), 279 página de intentos de tarea (MapReduce), 169
Clase StringUtils, 111 , 453 contadores de tareas, 248 - 250
datos estructurados, 9 ID de tareas, 164 , 203

https://translate.googleusercontent.com/translate_f 35/39
17/10/2019 Operaciones
subconsultas, 508 registros de tareas (MapReduce), 172
Función SUMA (Pig Latin), 446 Interfaz TaskAttemptContext, 191
Clase SWebHdfsFileSystem, 53 Tareas
Clase SwiftNativeFileSystem, 54 ejecutando, 189 , 203 - 208 , 570
Depósito SWIM, 316 consideraciones de falla, 193
operación de sincronización (ZooKeeper), 616 perfilado, 175 - 176
propiedad syncLimit, 639 progreso y actualizaciones de estado, 190
archivo syslog (Java), 172 programación en Spark, 569
administracion del sistema Soporte de chispa, 552
nodos de puesta en servicio, 334 - 335 ejecución especulativa, 204 - 206
nodos de desmantelamiento, 335 - 337 streaming, 189
Soporte HDFS, 317 - 329 tareas asignadas, 188
monitoreo, 330 - 332 página de tareas (MapReduce), 169
procedimientos de rutina, 332 - 334 perseguidores de tareas, 83
actualización de clústeres, 337 - 341 Palabra clave TEMPORAL (Colmena), 513
Clase de sistema (Java), 151 programa teragen, 315
archivos de registro del sistema, 172 , 295 Programa TeraSort, 315
TestDFSIO benchmark, 316

T pruebas
Instalación de HBase, 582 - 584
Clase TableInputFormat, 238 , 587
Consideraciones sobre la colmena, 473
Clase TableMapper, 588
los conductores de trabajo, 158 - 160
TableMapReduceUtil clase, 588
MapReduce prueba se ejecuta, 27 de - 30 de
Clase TableOutputFormat, 238 , 587
en miniclusters, 159
tablas (HBase)
ejecución de trabajos de forma local en los datos de prueba, 156 - 160
aproximadamente, 576 - 578
ejecución de trabajos en grupos, 160 - 175
creando, 583
Escritura de pruebas unitarias con MRUnit, 152 - 156
insertando datos en, 583
Clase de texto, 115 - 118 , 121 - 124 , 210
bloqueo, 578
formatos de texto
regiones, 578
control de longitud máxima de línea, 233
eliminación, 584
Clase KeyValueTextInputFormat, 233
mesas anchas, 591
Clase NLineInputFormat, 234
mesas (colmena)
Clase NullOutputFormat, 239
aproximadamente, 489
Clase TextInputFormat, 232
alterando, 502
Clase TextOutputFormat, 239
cubos y, 491 , 493 - 495
Documentos XML y 235
cayendo, 502
Clase TextInputFormat
mesas externas, 490 - 491
aproximadamente, 232
importación de datos, 500 - 501
Tipos MapReduce y, 157 , 211
tablas gestionadas, 490 - 491
Importaciones de Sqoop y 412
particiones y, 491 - 493
Función TextLoader (Pig Latin), 446
formatos de almacenamiento, 496 - 499

724 Índice

Page 53

Clase TextOutputFormat, 123 , 239 , 523 Declaración de UNION (Pig Latin), 435 , 466
TGT (Ticket-Granting Ticket), 310 pruebas unitarias con MRUnit, 145 , 152 - 156
volcados de hilo, 331 Cuentas de usuario de Unix, 288
Ahorro maestros de aplicaciones no gestionadas, 81
HBase y, 589 datos no estructurados, 9
Colmena y 479 Declaración de ACTUALIZACIÓN (Colmena), 483
Pavimento de, 375 - 377 actualización de clústeres, 337 - 341
Clase ThriftParquetWriter, 375 Clase de URL (Java), 57
tiempo de tictac (ZooKeeper), 624 cuentas de usuario, Unix, 288
Ticket-Granting Ticket (TGT), 310 identidad de usuario, 147
servidores de línea de tiempo, 84 funciones agregadas definidas por el usuario (UDAF), 510 ,
Función TOBAG (Pig Latin), 440 , 446 513 - 517
comando de tojson, 355 funciones definidas por el usuario (ver UDF)
TokenCounterMapper clase, 279 funciones generadoras de tablas definidas por el usuario
Función TOKENSIZE (Pig Latin), 446 (UDTF), 510
Función ToLowerFn, 536 USO de la cláusula JAR (colmena), 512
Función TOMAP (Pig Latin), 440 , 446
Interfaz de herramienta, 148 - 152
Clase ToolRunner, 148 - 152
V
Contador VCORES_MILLIS_MAPS, 251
Función TOP (Pig Latin), 446
VCORES_MILLIS_REDUCES contador, 251
Clase TotalOrderPartitioner, 260
Archivo VERSION, 318
TOTAL_LAUNCHED_MAPS counter, 251
versiones (Hive), 472
TOTAL_LAUNCHED_REDUCES contador, 251
Clase ViewFileSystem, 48 , 53
TOTAL_LAUNCHED_UBERTASKS counter,
vistas (mesas virtuales), 509
251
Clase VIntWritable, 113
Función TOTUPLE (Pig Latin), 440 , 446
Contador VIRTUAL_MEMORY_BYTES, 250 ,
Punto de referencia TPCx-HS, 316
303
tasa de transferencia, 8
Clase VLongWritable, 113
Cláusula TRANSFORM (Colmena), 503
informática voluntaria, 11
transformaciones, RDD, 557 - 560
Clase basura, 308
instalación de basura, 307 W
Declaración TRUNCATE TABLE (Hive), 502 w (permiso de escritura), 52
tuning puestos de trabajo, 175 - 176 Walters, Chad, 576

https://translate.googleusercontent.com/translate_f 36/39
17/10/2019 Operaciones
Clase TwoDArrayWritable, 120 Archivos WAR (archivo de aplicaciones web), 160
relojes (ZooKeeper), 615 , 618
U Watson, James D., 655
comando wchc (ZooKeeper), 606
uber tareas, 187
comando wchp (ZooKeeper), 606
Clase UDAF, 514
comando wchs (ZooKeeper), 606
Interfaz de evaluación UDAFE, 514
Archivos de archivo de aplicaciones web (WAR), 160
UDAF (funciones agregadas definidas por el usuario), 510 ,
Protocolo WebHDFS, 54
513 - 517
WebHdfsFileSystem clase, 53
Clase UDF, 512
mesas web (HBase), 575
UDF (funciones definidas por el usuario)
Wensel, Chris K., 669
Colmena y, 510 - 517
Whitacre, Miqueas, 643
Cerdo y, 424 , 447 , 448 - 456
comando whoami, 147
UDTF (función generadora de tablas definida por el usuario)
CON SERDEPROPERTIES cláusula (Colmena), 499
iones), 510
unidades de trabajo, 11 , 30
Caracteres Unicode, 116 - 117

Índice | 725

Page 54

motores de flujo de trabajo, 179 YARN modo cliente (Spark), 571


flujos de trabajo (MapReduce) HILO modo de clúster (chispa), 573 - 574
sobre, 177 archivo yarn-env.sh, 292
Oozie sistema Apache, 179 - 184 archivo yarn-site.xml, 292 , 296
descomponer los problemas en puestos de trabajo, 177 - 178
yarn.app.mapreduce.am.job.recovery.enable
Clase JobControl, 178 propiedad, 195
Interfaz de escritura yarn.app.mapreduce.am.job.speculator.class
aproximadamente, 110 - 112 propiedad, 205
jerarquía de clases, 113 - 121 yarn.app.mapreduce.am.job.task.estimator.class
Crunch and, 528 propiedad, 205
costumbre implementar, 121 - 125 propiedad yarn.log-aggregation-enable, 172
Interfaz comparable de escritura, 112 , 258 propiedad yarn.nodemanager.address, 306
Clase WritableComparator, 112 propiedad yarn.nodemanager.aux-services, 300 ,
Clase WritableSerialization, 126 687
Clase WritableUtils, 125 propiedad yarn.nodemanager.bind-host, 305
permiso de escritura (w), 52 yarn.nodemanager.container-executeor.class
Permiso de ESCRITURA (ACL), 620 propiedad, 193 , 304 , 313
Clase WriteSupport, 373 yarn.nodemanager.delete.debug-delay-sec prop‐
WRITE_OPS counter, 250 erty, 174
escribir datos propiedad yarn.nodemanager.hostname, 305
Crunch support, 532 yarn.nodemanager.linux-container-executeor
utilizando la API de FileSystem, 61 - 63 propiedad, 304
Flujo de datos HDFS, 72 - 73 propiedad yarn.nodemanager.local-dirs, 300
Pavimento de, 373 - 377 propiedad yarn.nodemanager.localizer.address,
Secuencia Clase de archivo , 127-129 306
propiedad yarn.nodemanager.log.retain-second,

X 173
yarn.nodemanager.resource.cpu-vcores apropiado‐
x (ejecutar) permiso, 52
ty, 301 , 303
Documentos XML, 235
yarn.nodemanager.resource.memory-mb prop‐
erty, 150 , 301
Y propiedad yarn.nodemanager.vmem-pmem-ratio,
Yahoo !, 13 301 , 303
HILO (Otro negociador de recursos) propiedad yarn.nodemanager.webapp.address,
aproximadamente, 7 , 79 , 96 306
anatomía de ejecución de la aplicación, 80 - 83 propiedad yarn.resourcemanager.address
vida útil de la aplicación, 82 aproximadamente, 300 , 305
fallo maestro de aplicación, 194 Colmena y 476
aplicaciones de construcción, 82 Cerdo y 425
configuración e instalación del clúster, 288 propiedad yarn.resourcemanager.admin.address,
dimensionamiento de racimo, 286 305
propiedades daemon, 300 - 303 yarn.resourcemanager.am.max-intentos prop‐
caparazón distribuido, 83 Erty, 194 , 196
agregación de registros, 172 propiedad yarn.resourcemanager.bind-host, 305
Comparación de MapReduce, 83 - 85 propiedad yarn.resourcemanager.hostname, 300 ,
escalar datos, 30 305 , 687
programar en, 85 - 95 , 308 yarn.resourcemanager.max-complete-
Chispa y, 571 - 574 propiedad de aplicaciones, 165
iniciar y detener demonios, 291

726 Índice

Página 55

https://translate.googleusercontent.com/translate_f 37/39
17/10/2019 Operaciones
yarn.resourcemanager.nm.liveness- zettabytes, 3
propiedad monitor.expiry-interval-ms, 195 znodes
yarn.resourcemanager.nodes.exclude-path aproximadamente, 606
propiedad, 307 , 336 ACL y 619
yarn.resourcemanager.nodes.include-path prop‐ creando, 607 - 609
Erty, 307 , 335 eliminando, 612
yarn.resourcemanager.resource-tracker.address efímero, 614
propiedad, 305 unirse a grupos, 609
yarn.resourcemanager.scheduler.address prop‐ perfil, 610 - 612
Erty, 305 operaciones soportadas, 616
propiedad yarn.resourcemanager.scheduler.class, persistente, 614
91 91 propiedades admitidas, 614 - 615
propiedad yarn.resourcemanager.webapp.address, secuencial, 615
306 Variable de entorno ZOOCFGDIR, 605
yarn.scheduler.capacity.node-locality-delay ZooKeeper
propiedad, 95 aproximadamente, 603
yarn.scheduler.fair.allocation.file propiedad, 91 información adicional, 640
yarn.scheduler.fair.allow-undeclared-pools construcción de aplicaciones
propiedad, 93 servicio de configuración, 627 - 630 , 634 - 636
hilado.programador.juego.localidad.limitador.nodo.del umbral estructuras de datos distribuidos y protocolos,
erty, 95 636
yarn.scheduler.fair.locality.threshold.rack prop‐ resiliente, 630 - 634
erty, 95 consistencia y, 621 - 623
propiedad yarn.scheduler.fair.preemption, 94 modelo de datos, 614
yarn.scheduler.fair.user-as-default-queue prop‐ ejemplo de, 606 - 613
erty, 93 controladores de conmutación por error y 50
yarn.scheduler.maximum -ignment-mb prop‐ HBase y, 579
erty, 303 alta disponibilidad y 49
yarn.scheduler.minimum -ignment-mb prop‐ implementando, 620
erty, 303 instalación y funcionamiento, 604 - 606
propiedad yarn.web-proxy.address, 306 en operaciones, 616 - 620
Variable de entorno YARN_LOG_DIR, 172 consideraciones de producción, 637 - 640
YARN_RESOURCEMANAGER_HEAPSIZE sesiones y, 623 - 625
variable de entorno, 294 estados y, 625 - 627 , 631
zxid, 622

Z
Protocolo de Zab, 621

Índice | 727

Page 56

Sobre el Autor
Tom White es uno de los principales expertos en Hadoop. Ha sido un Apache Hadoop.
committer desde febrero de 2007, y es miembro de la Apache Software Foundation.
Tom es ingeniero de software en Cloudera, donde ha trabajado desde su fundación en
Las distribuciones principales de Apache y Cloudera. Anteriormente era un independiente
Consultor de Hadoop, que trabaja con empresas para configurar, usar y ampliar Hadoop. Él tiene
hablado en muchas conferencias, incluyendo ApacheCon, OSCON y Strata. Tom tiene una licenciatura
en matemáticas de la Universidad de Cambridge y una maestría en filosofía de la ciencia
de la Universidad de Leeds, Reino Unido. Actualmente vive en Gales con su familia.

Colofón
El animal en la portada de Hadoop: The Definitive Guide es un elefante africano. Estas
Los miembros del género Loxodonta son los animales terrestres más grandes de la Tierra (un poco más grandes
que su primo, el elefante asiático) y pueden ser identificados por sus orejas, que tienen
Se dice que se parece un poco al continente asiático. Los machos miden 12 pies de alto en el
cargar y pesar 12,000 libras, pero pueden llegar a pesar hasta 15,000 libras, mientras que
las hembras miden 10 pies de alto y pesan 8,000–11,000 libras. Incluso los elefantes jóvenes son
muy grande: al nacer, ya pesan aproximadamente 200 libras y pesan aproximadamente 3
pies de altura

Los elefantes africanos viven en todo el África subsahariana. La mayoría de los elefantes del continente.
vive en sabanas y en bosques secos. En algunas regiones, se pueden encontrar en el desierto.

https://translate.googleusercontent.com/translate_f 38/39
17/10/2019 Operaciones
áreas; en otros, se encuentran en las montañas.
La especie juega un papel importante en los ecosistemas de bosques y sabanas en los que
En Vivo. Muchas especies de plantas dependen del paso a través del tracto digestivo de un elefante.
antes de que puedan germinar; se estima que al menos un tercio de las especies arbóreas en el oeste
Los bosques africanos dependen de los elefantes de esta manera. Los elefantes que pastan en la vegetación también afectan
La estructura de los hábitats y la influencia de los patrones de incendios forestales. Por ejemplo, bajo natural
condiciones, los elefantes hacen huecos a través de la selva tropical, permitiendo que entre la luz del sol,
que permite el crecimiento de varias especies de plantas. Esto, a su vez, facilita más abundancia
danza y más diversidad de animales más pequeños. Como resultado de la influencia que tienen los elefantes
en muchas plantas y animales, a menudo se les conoce como especies clave porque
son vitales para la supervivencia a largo plazo de los ecosistemas en los que viven.

Muchos de los animales en las cubiertas de O'Reilly están en peligro de extinción; todos ellos son importantes para
el mundo. Para obtener más información sobre cómo puede ayudar, visite animals.oreilly.com .

La imagen de portada es del Archivo pictórico de Dover . Las fuentes de portada son URW Type‐
Escritor y Guardian Sans. La fuente del texto es Adobe Minion Pro; la fuente del encabezado es Adobe
Myriad Condensed; y la fuente del código es Ubuntu Mono de Dalton Maag.

https://translate.googleusercontent.com/translate_f 39/39