Académique Documents
Professionnel Documents
Culture Documents
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
Las operaciones están vinculadas a las tuberías cuando se crea el ensamblaje de la tubería ( Figura 24-6 ).
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.
Página 3
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
Página 4
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 .
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" ));
asamblea =
nuevo GroupBy ( ensamblaje , nuevos campos ( "conteo" ), nuevos campos ( "palabra" ));
Página 5
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.
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 ).
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 );
setTails ( anterior );
}
}
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 .
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 );
asamblea =
nuevo ParseWordsAssembly ( ensamblaje );
ensamblaje = nuevo GroupBy ( ensamblaje , nuevos campos ( "conteo" ), nuevos campos ( "palabra" ));
Página 7
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.
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
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.
Página 9
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
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.
https://translate.googleusercontent.com/translate_f 7/39
17/10/2019 Operaciones
Página 11
// 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} $" ));
}
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
Pagina 12
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 .
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 ).
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:
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
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:
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.
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 .
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 .
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.
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.
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>
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>
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:
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 localhost
% 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
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
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
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 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.
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:
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
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
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.
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.
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).
https://translate.googleusercontent.com/translate_f 16/39
17/10/2019 Operaciones
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).
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
2. "Teoría y práctica de Java: lidiando con la excepción interrumpida" por Brian Goetz explica esta técnica en
detalle.
Página 27
Ejemplo D-1. Aplicación para encontrar la temperatura máxima, utilizando el antiguo MapRe‐
duce API
clase pública OldMaxTemperature {
@Anular
mapa público vacío (clave LongWritable, valor de texto,
OutputCollector <Text, IntWritable> output, Reporter reporter )
lanza IOException {
https://translate.googleusercontent.com/translate_f 18/39
17/10/2019 Operaciones
}
@Anular
public void reducir (clave de texto, Iterator <> IntWritable valores,
OutputCollector <Text, IntWritable> output, Reporter reporter )
lanza IOException {
Página 28
JobClient.runJob (conf);
}
}
Página 29
Índice
https://translate.googleusercontent.com/translate_f 19/39
17/10/2019 Operaciones
Nos gustaría escuchar sus sugerencias para mejorar nuestros índices. Enviar correo electrónico a index@oreilly.com.
701
Página 30
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
702 Índice
Page 31
Índice | 703
Página 32
https://translate.googleusercontent.com/translate_f 21/39
17/10/2019 Operaciones
704 Índice
Page 33
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
https://translate.googleusercontent.com/translate_f 23/39
17/10/2019 Operaciones
706 | Índice
Página 35
Índice | 707
Page 36
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
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
710 Índice
Página 39
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
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
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
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
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
716 Índice
https://translate.googleusercontent.com/translate_f 30/39
17/10/2019 Operaciones
Página 45
Índice | 717
Página 46
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
718 Índice
Page 47
https://translate.googleusercontent.com/translate_f 32/39
17/10/2019 Operaciones
Índice | 719
48
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
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
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
Índice | 723
Page 52
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
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