Apache Pig: lectura de datos

En general, Apache Pig funciona sobre Hadoop. Es una herramienta analítica que analiza grandes conjuntos de datos que existen en elHadoop File System. Para analizar datos usando Apache Pig, tenemos que cargar inicialmente los datos en Apache Pig. Este capítulo explica cómo cargar datos en Apache Pig desde HDFS.

Preparando HDFS

En el modo MapReduce, Pig lee (carga) datos de HDFS y almacena los resultados en HDFS. Por lo tanto, iniciemos HDFS y creemos los siguientes datos de muestra en HDFS.

Identificación del Estudiante Nombre de pila Apellido Teléfono Ciudad
001 Rajiv Reddy 9848022337 Hyderabad
002 Siddarth Battacharya 9848022338 Calcuta
003 Rajesh Khanna 9848022339 Delhi
004 Preethi Agarwal 9848022330 Pune
005 Trupthi Mohanthy 9848022336 Bhuwaneshwar
006 Archana Mishra 9848022335 Chennai

El conjunto de datos anterior contiene detalles personales como identificación, nombre, apellido, número de teléfono y ciudad, de seis estudiantes.

Paso 1: verificar Hadoop

En primer lugar, verifique la instalación con el comando de la versión de Hadoop, como se muestra a continuación.

$ hadoop version

Si su sistema contiene Hadoop, y si ha establecido la variable PATH, obtendrá el siguiente resultado:

Hadoop 2.6.0 
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r 
e3496499ecb8d220fba99dc5ed4c99c8f9e33bb1 
Compiled by jenkins on 2014-11-13T21:10Z 
Compiled with protoc 2.5.0 
From source with checksum 18e43357c8f927c0695f1e9522859d6a 
This command was run using /home/Hadoop/hadoop/share/hadoop/common/hadoop
common-2.6.0.jar

Paso 2: iniciar HDFS

Navegar por el sbin directorio de Hadoop y empezar yarn y Hadoop dfs (sistema de archivos distribuido) como se muestra a continuación.

cd /$Hadoop_Home/sbin/ 
$ start-dfs.sh 
localhost: starting namenode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-namenode-localhost.localdomain.out 
localhost: starting datanode, logging to /home/Hadoop/hadoop/logs/hadoopHadoop-datanode-localhost.localdomain.out 
Starting secondary namenodes [0.0.0.0] 
starting secondarynamenode, logging to /home/Hadoop/hadoop/logs/hadoop-Hadoopsecondarynamenode-localhost.localdomain.out
 
$ start-yarn.sh 
starting yarn daemons 
starting resourcemanager, logging to /home/Hadoop/hadoop/logs/yarn-Hadoopresourcemanager-localhost.localdomain.out 
localhost: starting nodemanager, logging to /home/Hadoop/hadoop/logs/yarnHadoop-nodemanager-localhost.localdomain.out

Paso 3: cree un directorio en HDFS

En Hadoop DFS, puede crear directorios usando el comando mkdir. Cree un nuevo directorio en HDFS con el nombrePig_Data en la ruta requerida como se muestra a continuación.

$cd /$Hadoop_Home/bin/ 
$ hdfs dfs -mkdir hdfs://localhost:9000/Pig_Data

Paso 4: colocar los datos en HDFS

El archivo de entrada de Pig contiene cada tupla / registro en líneas individuales. Y las entidades del registro están separadas por un delimitador (en nuestro ejemplo usamos“,”).

En el sistema de archivos local, cree un archivo de entrada student_data.txt que contiene datos como se muestra a continuación.

001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai.

Ahora, mueva el archivo del sistema de archivos local a HDFS usando putcomando como se muestra a continuación. (Puedes usarcopyFromLocal comando también.)

$ cd $HADOOP_HOME/bin 
$ hdfs dfs -put /home/Hadoop/Pig/Pig_Data/student_data.txt dfs://localhost:9000/pig_data/

Verificando el archivo

Puedes usar el cat comando para verificar si el archivo se ha movido al HDFS, como se muestra a continuación.

$ cd $HADOOP_HOME/bin
$ hdfs dfs -cat hdfs://localhost:9000/pig_data/student_data.txt

Salida

Puede ver el contenido del archivo como se muestra a continuación.

15/10/01 12:16:55 WARN util.NativeCodeLoader: Unable to load native-hadoop
library for your platform... using builtin-java classes where applicable
  
001,Rajiv,Reddy,9848022337,Hyderabad
002,siddarth,Battacharya,9848022338,Kolkata
003,Rajesh,Khanna,9848022339,Delhi
004,Preethi,Agarwal,9848022330,Pune
005,Trupthi,Mohanthy,9848022336,Bhuwaneshwar
006,Archana,Mishra,9848022335,Chennai

El operador de carga

Puede cargar datos en Apache Pig desde el sistema de archivos (HDFS / Local) usando LOAD operador de Pig Latin.

Sintaxis

La declaración de carga consta de dos partes divididas por el operador "=". En el lado izquierdo, debemos mencionar el nombre de la relaciónwhere queremos almacenar los datos, y en el lado derecho, tenemos que definir howalmacenamos los datos. A continuación se muestra la sintaxis de laLoad operador.

Relation_name = LOAD 'Input file path' USING function as schema;

Dónde,

  • relation_name - Tenemos que mencionar la relación en la que queremos almacenar los datos.

  • Input file path- Tenemos que mencionar el directorio HDFS donde se almacena el archivo. (En modo MapReduce)

  • function - Tenemos que elegir una función del conjunto de funciones de carga que proporciona Apache Pig (BinStorage, JsonLoader, PigStorage, TextLoader).

  • Schema- Tenemos que definir el esquema de los datos. Podemos definir el esquema requerido de la siguiente manera:

(column1 : data type, column2 : data type, column3 : data type);

Note- Cargamos los datos sin especificar el esquema. En ese caso, las columnas se direccionarán como $ 01, $ 02, etc… (verifique).

Ejemplo

Como ejemplo, carguemos los datos en student_data.txt en Pig bajo el esquema llamado Student utilizando la LOAD mando.

Iniciar el cerdo Grunt Shell

En primer lugar, abra la terminal de Linux. Inicie el shell Pig Grunt en modo MapReduce como se muestra a continuación.

$ Pig –x mapreduce

Iniciará el caparazón de Pig Grunt como se muestra a continuación.

15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : LOCAL
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Trying ExecType : MAPREDUCE
15/10/01 12:33:37 INFO pig.ExecTypeProvider: Picked MAPREDUCE as the ExecType

2015-10-01 12:33:38,080 [main] INFO  org.apache.pig.Main - Apache Pig version 0.15.0 (r1682971) compiled Jun 01 2015, 11:44:35
2015-10-01 12:33:38,080 [main] INFO  org.apache.pig.Main - Logging error messages to: /home/Hadoop/pig_1443683018078.log
2015-10-01 12:33:38,242 [main] INFO  org.apache.pig.impl.util.Utils - Default bootup file /home/Hadoop/.pigbootup not found
  
2015-10-01 12:33:39,630 [main]
INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine - Connecting to hadoop file system at: hdfs://localhost:9000
 
grunt>

Ejecute la declaración de carga

Ahora cargue los datos del archivo student_data.txt en Pig ejecutando la siguiente instrucción Pig Latin en el shell Grunt.

grunt> student = LOAD 'hdfs://localhost:9000/pig_data/student_data.txt' 
   USING PigStorage(',')
   as ( id:int, firstname:chararray, lastname:chararray, phone:chararray, 
   city:chararray );

A continuación se muestra la descripción de la declaración anterior.

Nombre de la relación Hemos almacenado los datos en el esquema. student.
Ruta del archivo de entrada Estamos leyendo datos del archivo. student_data.txt, que se encuentra en el directorio / pig_data / de HDFS.
Función de almacenamiento Hemos utilizado el PigStorage()función. Carga y almacena datos como archivos de texto estructurados. Toma un delimitador mediante el cual se separa cada entidad de una tupla, como parámetro. De forma predeterminada, toma '\ t' como parámetro.
esquema

Hemos almacenado los datos utilizando el siguiente esquema.

columna carné de identidad nombre de pila apellido teléfono ciudad
tipo de datos En t matriz de caracteres matriz de caracteres matriz de caracteres matriz de caracteres

Note - el loaddeclaración simplemente cargará los datos en la relación especificada en Pig. Para verificar la ejecución delLoad declaración, tienes que usar el Diagnostic Operators que se tratan en los siguientes capítulos.