Este es un programa Java para crear un índice invertido de palabras que ocurren en un gran conjunto de documentos extraídos de páginas web utilizando Hadoop MapReduce y Google DataProc.
Como nuestro conjunto de datos, estamos utilizando un subconjunto de 74 archivos de un total de 408 archivos (texto extraído de etiquetas HTML) derivado del proyecto Stanford Webbase que está disponible aquí. Se obtuvo de un rastreo web realizado en febrero de 2007. Es una de las colecciones más grandes que totalizan más de 100 millones de páginas web de más de 50,000 sitios web. Esta versión ya ha sido limpiada.
En este proyecto, primero configuramos un clúster de Hadoop de muestra utilizando el modo Local (independiente) e implementamos el proyecto real en modo totalmente distribuido en Google DataProc en el conjunto de datos real.
Necesitamos configurar el proyecto en GNU/Linux, ya que es la plataforma de desarrollo y producción compatible para Hadoop. Para obtener una distribución de Hadoop, descargue una versión estable reciente de uno de los espejos de descarga de Apache. Tenga en cuenta que este proyecto fue implementado y probado con hadoop-3.1.1 . Desempaqué la distribución de Hadoop descargada. En la carpeta de distribución, edite el archivo etc/hadoop/hadoop-env.sh para definir los parámetros variables de entorno de la siguiente manera:
# add these line to the hadoop-env.sh or set them in terminal
export JAVA_HOME=/usr/java/latest
export PATH= ${JAVA_HOME} /bin: ${PATH}
export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarLuego pruebe el siguiente comando:
$ bin/hadoopEsto debería mostrar la documentación de uso para el script Hadoop. Ahora está listo para comenzar su clúster Hadoop en el modo independiente.
Este simple trabajo de Hadoop obtiene dos archivos de texto de la carpeta "Entrada" como los argumentos del mapeador.
# file01
5722018411 Hello World Bye World # file02
6722018415 Hello Hadoop Goodbye HadoopY al enviar un trabajo de Hadoop y aplicar el paso de reducción, genera un índice invertido como se muestra a continuación:
bye 5722018411:1
goodbye 6722018415:1
hadoop 6722018415:2
hello 5722018411:1 6722018415:1
world 5722018411:2 Para enviar un trabajo de Hadoop, la implementación de Madeduce debe empaquetarse como un archivo jar . Para hacerlo, copie el archivo InvertedIndex.java de este proyecto a la carpeta raíz de distribución de Hadoop y, mientras aún está allí, ejecute los siguientes comandos para compilar InvertedIndex.java y crear un archivo jar .
$ bin/hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .class Copie input/file01 y input/file02 de este proyecto y colóquelos dentro de la carpeta input de la carpeta de distribución de Hadoop. Mientras aún esté allí, ejecute el siguiente comando para enviar el trabajo, obtener los archivos de entrada de la carpeta input , generar el índice invertido y almacenar su salida en la carpeta output :
$ bin/hadoop jar invertedindex.jar InvertedIndex input outputY finalmente para ver la salida, ejecute el siguiente comando:
$ bin/hadoop dfs -cat output/part-r-00000 En esta sección creamos un clúster con 3 nodos de trabajadores en Google DataProc y ejecutamos el trabajo invertedindex.jar en el conjunto de datos real.
Primero necesitamos una cuenta en Google Cloud Platform. Puede registrarse para una prueba con un crédito gratuito de $ 300 si aún no tiene uno.
En la consola de Google Cloud, cree un nuevo proyecto o seleccione uno existente. Para este ejercicio usaremos DatapROC. Usando DatapROC, podemos crear rápidamente un clúster de instancias de cómputo que ejecutan Hadoop. La alternativa a DatapROC sería configurar individualmente cada nodo de cálculo, instalar Hadoop en él, configurar HDFS, configurar el nodo maestro, etc. DataProc automatiza este proceso agotador para nosotros.
En Google Cloud Consol, seleccione DatapROC de la lista de navegación a la izquierda. Si esta es la primera vez que usa DatapROC, entonces es posible que deba habilitar primero la API de DataProc. Haga clic en 'Crear clúster' lo llevará a la sección Configuración del clúster. Dé cualquier nombre único a su clúster y seleccione una zona deseada. Necesita crear un maestro y 3 nodos de trabajadores. Seleccione los procesadores de configuración predeterminados (memoria N1-Standard-4 4VCPU 15 GB) para el maestro y cada miembro y reduzca el almacenamiento a 32 GB de almacenamiento HDD. Cambie el número de nodos de trabajadores a 3. Deje todo lo demás predeterminado y haga clic en 'Crear'.
Ahora que el clúster está configurado, tendremos que configurarlo un poco antes de que podamos ejecutar trabajos en él. Seleccione el clúster que acaba de crear en la lista de clústeres en la sección Cloud DataProc en su consola. Vaya a la pestaña Instancias VM y haga clic en el botón SSH junto a la instancia con el rol maestro.
Al hacer clic en el botón SSH, lo llevará a una interfaz de línea de comando (CLI) como un Xterm o terminal. Todos los comandos en los siguientes pasos deben ingresarse en la CLI. No hay directorio de inicio en HDFS para el usuario actual, tendremos que configurar esto antes de continuar. (Para averiguar su nombre de usuario, ejecute whoami )
$ hadoop fs -mkdir -p /user/ < your username here > JAVA_HOME ya se ha configurado y no necesitamos configurarlo nuevamente.
Tenga en cuenta que este paso debe hacerse cada vez que abra una nueva terminal SSH. Para eliminar este paso, también puede configurar este JAVA_HOME , PATH y HADOOP_CLASSPATH en el etc/hadoop/hadoop-env.sh .
$ export PATH= ${JAVA_HOME} /bin: ${PATH}
$ export HADOOP_CLASSPATH= ${JAVA_HOME} /lib/tools.jarAhora corre:
$ hadoop fs -lsSi no hay error, esto implica que su clúster se configuró con éxito. Si se encuentra con un error, es muy probable que se deba a una variable de entorno faltante o un directorio de inicio del usuario que no se está configurando correctamente.
Para garantizar que se establezcan las variables de entorno, ejecute el comando env .
Nota : Desactive la facturación del clúster cuando no lo usa. Dejarlo en funcionamiento costará créditos adicionales.
Descargue el conjunto de datos de este enlace y descomprima el contenido. Encontrará dos carpetas dentro de 'Desarrollo' y 'Datos completos'. Los datos de 'desarrollo' se pueden utilizar para fines de desarrollo y prueba.
Haga clic en 'DataProc' en el menú de navegación izquierda. A continuación, localice la dirección del cubo predeterminado de almacenamiento de Google Cloud Storage para su clúster.
Vaya a la sección de almacenamiento en la barra de navegación izquierda y seleccione el cubo predeterminado de su clúster en la lista de cubos. Haga clic en el botón Upload Folder y cargue las carpetas devdata y fulldata individualmente.
Ahora estamos listos para enviar un trabajo de Hadoop para ejecutar nuestra implementación de MapReduce en los datos reales. Use el comando ssh o nano / vi para copiar o crear InvertedIndex.java en el clúster maestro.
Ejecute el siguiente comando para crear el archivo jar :
$ hadoop com.sun.tools.javac.Main InvertedIndex.java
$ jar cf invertedindex.jar InvertedIndex * .classAhora tiene un archivo JAR para su trabajo. Debe colocar este archivo JAR en el cubo de nube predeterminado de su clúster. Simplemente cree una carpeta llamada Jar en su cubo y cárguela a esa carpeta. Si creó su archivo JAR en el nodo maestro del clúster, use los siguientes comandos para copiarlo en la carpeta JAR.
$ hadoop fs -copyFromLocal ./invertedindex.jar
$ hadoop fs -cp ./invertedindex.jar gs://dataproc-69070.../JAR El gs://dataproc-69070... La parte es el cubo predeterminado de su clúster. Debe ser preparado por el GS: // para decirle al entorno Hadoop que es un cubo y no una ubicación regular en el sistema de archivos.
Vaya a la sección 'Jobs' en la barra de navegación izquierda de la página DataProc y haga clic en 'Enviar trabajo'. Llene los parámetros del trabajo de la siguiente manera:
gs:///dataproc-69070.../JAR/invertedindex.jar .gs:///dataproc-69070.../fulldata .gs:///dataproc-69070.../fulloutput . La carpeta se crea durante la ejecución. Recibirá un error si da el nombre de una carpeta existente.Ahora envíe el trabajo. Puede ver el registro mientras se está ejecutando.
Nota : Si se encuentra con una Java.lang.Interrupted Exception puede ignorarlo de manera segura. Su trabajo aún se ejecutará.
Los archivos de salida se almacenarán en la carpeta de salida en el cubo. Si abre esta carpeta, notará que el índice invertido se encuentra en varios segmentos (elimine el archivo _success en la carpeta antes del mermano todos los archivos de salida). Para fusionar los archivos y crear una salida de texto final, ejecute los siguientes comandos:
$ hadoop fs -getmerge gs://dataproc-69070.../fulloutput ./output.txt
$ hadoop fs -copyFromLocal ./output.txt
$ hadoop fs -cp ./output.txt gs://dataproc-69070.../output.txt Ahora ha creado con éxito un índice invertido de todo el conjunto de datos. Puede usar grep para ver entradas de índice para cualquier palabra apecífica:
$ grep -w ' ^peace ' output.txt Si desea volver a compilar y enviar un nuevo trabajo nuevamente, puede eliminar los archivos .jar , .class , .java y hadoop utilizando el comando a continuación en consecuencia.
$ hadoop fs -rm ./wordcount.jar ./output.txt WordCount * .class
$ hadoop fs -rm gs://dataproc-69070.../JAR/wordcount.jar ; gs://dataproc-69070.../output.txt
$ hadoop fs -rm gs://dataproc-69070.../fulloutput/ *
$ hadoop fs -rmdir gs://dataproc-69070.../fulloutput
Este trabajo tiene licencia bajo una licencia internacional Creative Commons Attribution 4.0.