Compartir a través de


Este artículo proviene de un motor de traducción automática.

Windows Azure Insider

Hadoop y HDInsight: grandes volúmenes de datos en Windows Azure

Bruno Terkaly
Ricardo Villalobos

Bruno Terkaly, Ricardo VillalobosVamos a empezar con una afirmación audaz: "Si usted, su puesta en marcha o trabajas para la empresa no están ahorrando cantidades masivas de datos en el disco para análisis actual y futuro, están comprometiendo su efectividad como líder técnico". ¿No es tonto para basar las decisiones de negocios importantes en tripa instinto solo, real cuantitativo datos no?

Hay muchas razones por qué datos grandes están tan omnipresentes. En primer lugar, es increíblemente barato para recoger y almacenar la información en cualquier forma, estructurados o no estructurados, especialmente con la ayuda de productos tales como almacenamiento de Windows Azure servicios. En segundo lugar, es económico aprovechar la nube para proporcionar la potencia de cálculo necesaria — ejecuta en materia hardware — para analizar estos datos. Finalmente, grandes datos bien proporcionan una importante ventaja competitiva para las empresas porque es posible extraer información desconocida de enormes cantidades de datos no estructurados. El propósito del artículo de este mes es mostrar cómo puede aprovechar la plataforma Windows Azure — en particular el servicio de Windows Azure HDInsight — para resolver desafíos de datos grande.

Apenas un día pasa sin una historia emocionada en la prensa es — y a veces incluso en los medios masivos — acerca de datos grandes. Datos grandes se refieren simplemente a conjuntos de datos tan grandes y complejos que son difíciles de proceso utilizando las técnicas tradicionales, tales como cubos de datos, tablas relacionales de normalizado y Extracto basado en lote, transforman y cargan motores (ETL), por nombrar unos pocos. Los defensores hablan de extraer inteligencia científica y empresarial de petabytes de datos no estructurados que pueden originar de una variedad de fuentes: sensores, registros Web, dispositivos móviles y el Internet de las cosas o IoT (tecnologías basadas en la identificación por radiofrecuencia [RFID], como la comunicación de campo cercano, códigos de barras, códigos de respuesta rápida [QR] y filigrana digital). Muchos cambia la definición de grandes — ahora estamos hablando de exabytes de datos al día!

Grandes datos cumple todas las expectativas. Microsoft cree que definitivamente lo hace y tiene gran apuesta en grandes datos. En primer lugar, grandes datos conduce a mejores estrategias de marketing, reemplazando a base de tripa de toma de decisiones con análisis basados en el comportamiento real de los consumidores. En segundo lugar, los líderes empresariales pueden mejorar las decisiones estratégicas, tales como agregar una nueva funcionalidad a una aplicación o sitio Web, porque pueden estudiar los datos de telemetría y el uso de aplicaciones que se ejecutan en una multitud de dispositivos. En tercer lugar, ayuda a los servicios financieros detectar fraude y evaluar los riesgos. Por último, aunque no lo podéis comprobar, es tecnologías de datos grande que se suelen utilizar para construir motores de recomendación (que Netflix). Las recomendaciones se ofrecen a menudo como un servicio en la Web o dentro de las grandes empresas para acelerar las decisiones empresariales. Las empresas realmente inteligentes están recopilando datos hoy sin ni siquiera saber qué tipo de preguntas que van a pedir los datos mañana.

Grandes datos significa análisis de datos, que ha existido por mucho tiempo. Aunque siempre han existido los almacenes de datos enorme se extrae de la inteligencia, lo que hace diferente el mundo de hoy es la gran variedad de datos no estructurados en su mayoría. Afortunadamente, productos como Windows Azure traen gran economía, permitiendo que cualquiera ampliar su poder de cálculo y aplicarlo a grandes cantidades de almacenamiento, todos en el mismo centro de datos. Los datos científicos describen el nuevo fenómeno de datos como el tres Vs — velocidad, volumen y variedad. Nunca ha sido creados datos con tal velocidad, tamaño y la falta de una estructura definida.

El mundo de datos grandes contiene un ecosistema grande y vibrante, pero un proyecto de código abierto reina sobre todos y eso es Hadoop. Hadoop es el estándar de facto para datos distribuidos crujir. Encontrarás una gran introducción a Hadoop en bit.ly/PPGvDP: "Hadoop proporciona un marco de MapReduce para escribir aplicaciones que procesan grandes cantidades de datos estructurados y semiestructurados en paralelo a través de grandes grupos de máquinas de una manera muy fiable y tolerante". Además, mientras aprendes más sobre este espacio, probablemente llegará a acuerdo con la perspectiva de Matt Winkler (principal PM en HDInsight) que Hadoop es "un ecosistema de proyectos relacionados en la parte superior del núcleo distribuido almacenamiento y marco MapReduce." Paco Nathan, director de ciencia de datos en paralelo y un committer en el proyecto de código abierto en cascada (cascading.org), dice además, "las capas de abstracción permiten personas aprovechar Hadoop a escala sin conocer los fundamentos".

El modelo MapReduce

MapReduce es el modelo de programación usado para procesar grandes conjuntos de datos; esencialmente es el "lenguaje ensamblador" para Hadoop, para entender lo que hace es crucial para la comprensión de Hadoop. MapReduce algoritmos están escritos en Java y divide el conjunto de datos de entrada en trozos independientes que son procesados por el mapa de las tareas de una manera totalmente paralela. El marco ordena la salida de los mapas, que luego se introducen a las tareas de reducción. Por lo general, tanto la entrada como la salida del trabajo se almacenan en un sistema de archivos. El marco se encarga de la planificación de tareas, control y vuelva a ejecutar tareas fallidas.

En última instancia, la mayoría de los desarrolladores no autor bajo código Java de MapReduce. En cambio, que van a utilizar herramientas avanzadas que abstrae la complejidad de MapReduce, tales como la colmena o cerdo. Para obtener una apreciación de esta abstracción, tomaremos un vistazo en bajo nivel MapReduce de Java y en cómo el motor de consulta alto nivel colmena, que es compatible con HDInsight, hace el trabajo mucho más fácil.

¿Por qué HDInsight?

HDInsight es una implementación de Apache Hadoop que se ejecuta en datacenters Microsoft distribuidos en todo el mundo. Es un servicio que le permite fácilmente crear un cluster de Hadoop en minutos cuando lo necesite y rasgarla abajo después de ejecutar los trabajos de MapReduce. Como Windows Azure Insiders, creemos que hay unas proposiciones de valor de la clave de HDInsight. La primera es que es 100% basada en Apache, no una versión especial de Microsoft, lo que significa que como Hadoop evoluciona, Microsoft acogerá las nuevas versiones. Por otra parte, Microsoft es una importante contribución al proyecto Apache Hadoop y ha proporcionado una gran cantidad de sus conocimientos de optimización de consultas a las herramientas de consulta, colmena.

El segundo aspecto del HDInsight que es apremiante es que funciona perfectamente con Windows Azure Blobs, mecanismos para almacenar grandes cantidades de datos no estructurados que se pueden acceder desde cualquier parte en el mundo a través de HTTP o HTTPS. HDInsight también es posible que persistan los metadatos de las definiciones de tabla en el SQL Server para que cuando el grupo se cierra, no tienes que volver a crear sus modelos de datos desde cero.

Figura 1 representa la amplitud y profundidad de Hadoop apoyo en la plataforma Windows Azure.

Hadoop Ecosystem in Windows Azure
Figura 1 Hadoop ecosistema en Windows Azure

En la parte superior es el sistema de almacenamiento de Windows Azure, que proporciona almacenamiento de información segura y confiable e incluye geo-replicación incorporada para la redundancia de los datos en todas las regiones. Almacenamiento de Windows Azure incluye una variedad de mecanismos de almacenamiento flexible y potente, como tablas (un NoSQL, tienda keyvalue), base de datos SQL, manchas y más. Es compatible con un resto-ful API que permite que cualquier cliente realizar crear, leer, actualizar, eliminar las operaciones (CRUD) en texto o binario datos, como imágenes, audio y vídeo. Esto significa que cualquier cliente compatible con HTTP puede interactuar con el sistema de almacenamiento. Hadoop interactúa directamente con gotas, pero eso no limita su capacidad de aprovechar otros mecanismos de almacenamiento dentro de su propio código.

La segunda área clave es Windows Azure soporte para máquinas virtuales (VMs) corriendo Linux. Hadoop corre por encima de Linux y aprovecha de Java, que le permite configurar su propio cluster de Hadoop nodo o múltiples nodos. Esto puede ser un ahorrador de dinero enorme y refuerzo de la productividad, porque una sola máquina virtual en Windows Azure es muy económica. En realidad puede construir su propio clúster de varios nodos a mano, pero no es trivial y no es necesario cuando intentas validar algunos algoritmos básicos.

Configurar su propio cluster de Hadoop facilita el inicio de aprendizaje y desarrollo de aplicaciones de Hadoop. Además, realizar la configuración usted mismo proporciona información valiosa sobre el funcionamiento interno de un trabajo de Hadoop. Si quieres saber cómo hacerlo, consulte el blog post, "Cómo para instalar Hadoop en un basado Windows Azure Máquina Virtual," en bit.ly/1am85mU.

Por supuesto, una vez que usted necesita un racimo más grande, usted querrá aprovechar HDInsight, que está hoy disponible en modo de vista previa. Para empezar, entrar en el portal de Windows Azure (bit.ly/12jt5KW) y firmar. A continuación, seleccione los servicios de datos | HDInsight | Rápido crear. Se le preguntará por un nombre del clúster, la cantidad de cálculo nodos (actualmente cuatro a 32 nodos) y el almacenamiento de información de cuenta a los que se unen. La ubicación de tu cuenta de almacenamiento determina la ubicación de su racimo. Por último, haga clic en crear HDINSIGHT CLUSTER. Tardará de 10 a 15 minutos a disposición su racimo. El tiempo que tarda a disposición no está relacionado con el tamaño del clúster.

Nota que también puede crear y administrar un clúster HDInsight mediante programación utilizando Windows PowerShell, así como a través de plataformas útiles en Linux y Mac basado en sistemas. Gran parte de la funcionalidad de la interfaz de línea de comandos (CLI) también está disponible en un portal de administración fácil de usar, que le permite administrar el clúster, incluyendo la ejecución y gestión de puestos de trabajo en el clúster. Puede descargar Windows Azure PowerShell, así como las CLIs para Mac y Linux en bit.ly/ZueX9Z. Configure su VM corriendo CentOS (una versión de Linux), junto con el Java SDK y Hadoop.

Explorando Hadoop

Para experimentar con Hadoop y aprender acerca de su poder, decidimos aprovechar datos públicamente disponibles de data.sfgov.org. Específicamente, hemos descargado un archivo que contiene datos del crimen de San Francisco para los tres meses anteriores y usado como es. El archivo incluye más de 33.000 registros (relativamente pequeño por estándares de datos grande) derivados del sistema SFPD crimen incidente Reporting. Nuestro objetivo era realizar una analítica simple, como calcular el número y tipo de incidentes de delito. Figura 2 muestra parte de la salida del trabajo de Hadoop que resume los datos del crimen.

Figura 2 crimen información resumida por tipo

Grand Theft Auto bloqueado 2617
Vandalismo 1623
Licencia de conducir 1230
Caso asistido 1195
Objetos perdidos 1083

El código en figura 3 resume los tres meses de crímenes. El archivo de entrada contenía más de 30.000 filas de datos, mientras que la salida contenía sólo 1.000 registros. Los primeros cinco de esos 1.000 registros se muestran en figura 2.

Figura 3 el código Java de MapReduce que resume los datos del crimen

    // CrimeCount.java
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.conf.*;
    import org.apache.hadoop.io.*;
    import org.apache.hadoop.mapred.*;
    import org.apache.hadoop.util.*;
    // This code is based on the standard word count examples
    // you can find almost everywhere.
    // We modify the map function to be able to aggregate based on
    // crime type.
    // The reduce function as well as main is unchanged,
    // except for the name of the job.
    public class CrimeCount {
    public static class Map extends MapReduceBase implements 
      Mapper<LongWritable, Text, Text, IntWritable> {
        private final static IntWritable one = new IntWritable(1);
        private Text word = new Text();
        private String mytoken = null;
        public void map(LongWritable key, Text value,
                        OutputCollector<Text, IntWritable> output,
                        Reporter reporter) throws IOException {
          // Read one line from the input file.
    String line = value.toString();
          // Parse the line into separate columns.
    String[] myarray = line.split(",");
          // Verify that there are at least three columns.
    if(myarray.length >= 2){
            // Grab the third column and increment that
            // crime (i.e.
    LOST PROPERTY found, so add 1).
    mytoken = myarray[2];
            word.set(mytoken);
            // Add the key/value pair to the output.
    output.collect(word, one);
          }
        }
      // A fairly generic implementation of reduce.
    public static class Reduce extends MapReduceBase implements Reducer<Text,
        IntWritable, Text, IntWritable> {
        public void reduce(Text key, Iterator<IntWritable> values,
                                   OutputCollector<Text,
                                   IntWritable> output,
                                   Reporter reporter) throws IOException {
          // Loop through an aggregate key/value pairs.
    int sum = 0;
          while (values.hasNext()) {
            sum += values.
    next().get();
          }
          output.collect(key, new IntWritable(sum));
        }
      }
      // Kick off the MapReduce job, specifying the map and reduce
      // construct, as well as input and output parameters.
    public static void main(String[] args) throws Exception {
        JobConf conf = new JobConf(CrimeCount.class);
        conf.setJobName("crimecount");
        conf.setOutputKeyClass(Text.class);
        conf.setOutputValueClass(IntWritable.class);
        conf.setMapperClass(Map.class);
        conf.setCombinerClass(Reduce.class);
        conf.setReducerClass(Reduce.class);
        conf.setInputFormat(TextInputFormat.class);
        conf.setOutputFormat(TextOutputFormat.class);
        FileInputFormat.setInputPaths(conf, new Path(args[0]));
        FileOutputFormat.setOutputPath(conf, new Path(args[1]));
        JobClient.runJob(conf);
      }
    }

Una vez que has salvado el código en figura 3 como CrimeCount.java, tienes que compilar, empaquetar y enviar el trabajo de Hadoop. Figura 4 contiene instrucciones para copiar el archivo de datos de entrada del crimen en el Hadoop distribuyen archivo de sistema (HDFS); compilación de CrimeCount.java; crear el archivo crimecount.jar; el trabajo de Hadoop (mediante crimecount.jar); y ver los resultados — es decir, los datos de salida. Para descargar el código fuente completo, vaya a sdrv.ms/16kKJKh y haga clic derecho en la carpeta CrimeCount.

Figura 4 compilar, empaquetar y ejecutando el trabajo Hadoop

# Make a folder for the input file.
hadoop fs -mkdir /tmp/hadoopjob/crimecount/input
# Copy the data file into the folder.
hadoop fs -put SFPD_Incidents.csv /tmp/hadoopjob/crimecount/input
# Create a folder for the Java output classes.
mkdir crimecount_classes
# Compile the Java source code.
javac -classpath /usr/lib/hadoop/hadoop-common-2.0.0-cdh4.3.0.jar:/usr/lib/hadoop-0.20-mapreduce/hadoop-core-2.0.0-mr1-cdh4.3.0.jar -d crimecount_classes CrimeCount.java
# Create a jar file from the compiled Java code.
jar -cvf crimecount.jar -C crimecount_classes/ .
# Submit the jar file as a Hadoop job, passing in class path as well as
# the input folder and output folder.
# *NOTE* HDInsight users can use \"asv:///SFPD_Incidents.csv,\" instead of
# \"/tmp/hadoopjob/crimecount/input\" if they uploaded the input file
# (SFPD_Incidents.csv) to Windows Azure Storage.
hadoop jar crimecount.jar org.myorg.CrimeCount /tmp/hadoopjob/crimecount/input /tmp/hadoopjob/crimecount/output
# Display the output (the results) from the output folder.
hadoop fs -cat /tmp/hadoopjob/crimecount/output/part-00000

Ahora tienes una idea de las piezas que conforman un entorno mínimo de Hadoop, así como lo parece código MapReduce Java y cómo termina siendo presentado como un trabajo de Hadoop en la línea de comandos. Posibilidades son, en algún momento que usted querrá hacer girar un cluster para ejecutar algunas grandes puestos de trabajo, entonces cerrada hacia abajo usando herramientas de alto nivel como colmena o cerdo y esto es lo que HDInsight es todo acerca de porque resulta fácil, con soporte incorporado para el cerdo y colmena.

Una vez creado el clúster, puede trabajar en el símbolo de Hadoop o puede utilizar el portal para emitir las consultas colmena y cerdo. La ventaja de estas consultas es que nunca debes ahondar en Java y modificar funciones de MapReduce, realizar la compilación y empaquetado o iniciará el trabajo de Hadoop con el archivo jar. Aunque puede remoto en cabeza al nodo del clúster Hadoop y realizar estas tareas (escribiendo código Java , compilar el código Java , lo empaquetado para arriba como un archivo .jar y usando el archivo .jar para ejecutarlo como un trabajo de Hadoop), esto no es el enfoque óptimo para la mayoría de los usuarios de Hadoop — es demasiado baja.

La manera más productiva para ejecutar trabajos de MapReduce es aprovechar el portal de Windows Azure en HDInsight y emitir las consultas de la colmena, suponiendo que con cerdo es menos técnicamente apropiado. Piensa de la colmena como herramientas superiores que abstrae los lejos la complejidad de la escritura MapReduce funciones en Java. Es nada más que un lenguaje de scripts SQL-como. Consultas escritas en colmena conseguir compiladas en funciones de MapReduce de Java . Por otra parte, porque Microsoft ha contribuido a importantes porciones de código de optimización por colmena en el proyecto Apache Hadoop, más probable es que las consultas escritas en colmena estará mejor optimizadas y funcionan más eficientemente que artesanal código en Java. Usted puede encontrar un excelente tutorial en bit.ly/Wzlfbf.

Todo el código Java y el guión que hemos presentado anteriormente pueden reemplazarse con la pequeña cantidad de código en figura 5. Es notables cómo tres líneas de código en colmena pueden alcanzar eficientemente los resultados igual o mejores que el anterior código.

Figura 5 colmena consulta código para realizar el MapReduce

    # Hive does a remarkable job of representing native Hadoop data stores
    # as relational tables so you can issue SQL-like statements.
    # Create a pseudo-table for data loading and querying
    CREATE TABLE sfpdcrime(
    IncidntNum string,
    Category string,
    Descript string,
    DayOfWeek string,
    CrimeDate string,
    CrimeTime string,
    PdDistrict string,
    Resolution string,
    Address string,
    X string,
    Y string,
    CrimeLocation string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
    # Load data into table.
    LOAD DATA INPATH 'asv://sanfrancrime@brunoterkaly.blob.core.windows.
    net/SFPD_Incidents.csv' OVERWRITE INTO TABLE sfpdcrime;
    select count(*) from sfpdcrime;
    # Ad hoc query to aggregate and summarize crime types.
    SELECT Descript, COUNT(*) AS cnt FROM sfpdcrime GROUP BY Descript
    order by cnt desc;

Hay algunos puntos importantes a destacar en figura 5. En primer lugar, observe que estos comandos se parecen familiares sentencias SQL, lo que permite crear estructuras de tabla en la cual se puede cargar datos. Lo que es particularmente interesante es la carga de datos de servicios de almacenamiento de Windows Azure. Tenga en cuenta el prefijo de asv en la instrucción carga figura 5. ASV soportes para bóveda de almacenamiento Azure, puede utilizar como un mecanismo de almacenamiento de información para proporcionar datos de entrada a los trabajos de Hadoop. Como recordarán, mientras aprovisionamiento el proceso de un clúster HDInsight, especificó una o más cuentas de servicio específicas de almacenamiento de Windows Azure. La capacidad de aprovechar los servicios de almacenamiento de Windows Azure en HDInsight dramáticamente mejora la usabilidad y la eficiencia de la gestión y ejecución de trabajos de Hadoop.

Sólo hemos arañado la superficie de este artículo. Hay una gran cantidad de herramientas sofisticadas que apoya y se extienden HDInsight y una variedad de otros proyectos de código abierto se pueden conocer en el portal de Apache Hadoop (hadoop.apache.org). Sus próximos pasos deben incluir viendo el canal 9 video "hacer sus aplicaciones más inteligentes con Azure HDInsight" en bit.ly/19OVzfr. Si tu objetivo es seguir siendo competitivos por tomar decisiones basadas en datos reales y análisis, HDInsight está ahí para ayudar.

El ecosistema de Hadoop

Una vez que abandonas el mundo bajo nivel de escritura MapReduce empleos en Java, usted descubrirá un increíble, altamente evolucionado ecosistema de herramientas que amplía en gran medida las capacidades de Hadoop. Por ejemplo, Cloudera y Hortonworks son empresas exitosas con modelos de negocio basados en productos de Hadoop, educación y servicios de consultoría. Muchos proyectos de código abierto proporcionan capacidades adicionales, tales como máquina de aprendizaje (ML); Motores de consulta SQL-como apoyo a resumir datos y consultas ad hoc (colmena); datos­flujo de ayuda de la lengua (cerdo); y mucho más. Aquí son sólo algunos de los proyectos que valen la pena un vistazo: Sqoop, cerdo, Apache Mahout, cascada y Oozie. Microsoft ofrece una variedad de herramientas, tales como Excel con PowerPivot, poder ver y ODBC drivers que hacen posible que las aplicaciones de Windows emitir las consultas contra datos de colmena. Visita bit.ly/WIeBeq para ver una imagen fascinante del ecosistema Hadoop.

Bruno Terkaly es evangelizador desarrollador para Microsoft. La profundidad de sus conocimientos los debe a años de experiencia en el sector, al escribir código con diversas plataformas, lenguajes, marcos, SDK, bibliotecas y API. Se dedica a programar, publicar en su blog y a realizar presentaciones en vivo sobre la creación de aplicaciones basadas en nube, específicamente con la plataforma Windows Azure. Puede leer su blog en blogs.msdn.com/b/brunoterkaly.

Ricardo Villalobos es un arquitecto de software sazonada con más de 15 años de experiencia en diseño y creación de aplicaciones para empresas en la industria de gestión de cadena de suministro. Sosteniendo diferentes certificaciones técnicas, así como una maestría en administración de empresas por la Universidad de Dallas, trabaja como arquitecto de nube en el grupo de incubación Windows Azure CSV para Microsoft. Usted puede leer su blog en blog.ricardovillalobos.com.

Terkaly y Villalobos presentan conjuntamente conferencias de la industria en general. Animan a los lectores de Windows Azure Insider en contacto con ellos para disponibilidad. Terkaly puede ser contactado en bterkaly@microsoft.com y Villalobos puede ser contactado en Ricardo.Villalobos@microsoft.com.

Gracias a los siguientes expertos técnicos por su ayuda en la revisión de este artículo: Paco Nathan (concurrente Inc.) y Matt Winkler (Microsoft)