Учебники

Apache Pig — чтение данных

В общем, Apache Pig работает поверх Hadoop. Это аналитический инструмент, который анализирует большие наборы данных, которые существуют в H adoop File System. Чтобы проанализировать данные с помощью Apache Pig, мы должны сначала загрузить данные в Apache Pig. В этой главе объясняется, как загрузить данные в Apache Pig из HDFS.

Подготовка HDFS

В режиме MapReduce Pig считывает (загружает) данные из HDFS и сохраняет результаты обратно в HDFS. Поэтому давайте запустим HDFS и создадим следующий пример данных в HDFS.

Студенческий билет Имя Фамилия Телефон город
001 Раджив Reddy 9848022337 Хайдарабад
002 Siddarth Battacharya 9848022338 Kolkata
003 Раджеш Кханна 9848022339 Дели
004 Preethi Агарвал 9848022330 Пуна
005 Trupthi Mohanthy 9848022336 Bhuwaneshwar
006 Archana Мишра 9848022335 Chennai

Приведенный выше набор данных содержит личные данные, такие как удостоверение личности, имя, фамилия, номер телефона и город для шести студентов.

Шаг 1: Проверка Hadoop

Прежде всего, проверьте установку с помощью команды версии Hadoop, как показано ниже.

$ hadoop version

Если ваша система содержит Hadoop, и вы установили переменную PATH, вы получите следующий вывод:

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

Шаг 2: Запуск HDFS

Просмотрите каталог sbin Hadoop и запустите yarn и Hadoop dfs (распределенную файловую систему), как показано ниже.

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

Шаг 3: Создайте каталог в HDFS

В Hadoop DFS вы можете создавать каталоги с помощью команды mkdir . Создайте новый каталог в HDFS с именем Pig_Data в требуемом пути, как показано ниже.

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

Шаг 4: Размещение данных в HDFS

Входной файл Pig содержит каждый кортеж / запись в отдельных строках. А сущности записи разделяются разделителем (в нашем примере мы использовали «,» ).

В локальной файловой системе создайте входной файл student_data.txt, содержащий данные, как показано ниже.

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.

Теперь переместите файл из локальной файловой системы в HDFS, используя команду put, как показано ниже. (Вы также можете использовать команду copyFromLocal .)

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

Проверка файла

Вы можете использовать команду cat, чтобы проверить, был ли файл перемещен в HDFS, как показано ниже.

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

Выход

Вы можете увидеть содержимое файла, как показано ниже.

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

Оператор загрузки

Вы можете загрузить данные в Apache Pig из файловой системы (HDFS / Local), используя оператор LOAD для Pig Latin .

Синтаксис

Оператор загрузки состоит из двух частей, разделенных оператором «=». С левой стороны нам нужно указать имя отношения, в котором мы хотим хранить данные, а с правой стороны мы должны определить, как мы храним данные. Ниже приведен синтаксис оператора Load .

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

Куда,

  • имя_отношения — мы должны упомянуть отношение, в котором мы хотим хранить данные.

  • Путь к входному файлу — мы должны упомянуть каталог HDFS, в котором хранится файл. (В режиме MapReduce)

  • функция — мы должны выбрать функцию из набора функций загрузки, предоставляемых Apache Pig ( BinStorage, JsonLoader, PigStorage, TextLoader ).

  • Схема — мы должны определить схему данных. Мы можем определить требуемую схему следующим образом:

имя_отношения — мы должны упомянуть отношение, в котором мы хотим хранить данные.

Путь к входному файлу — мы должны упомянуть каталог HDFS, в котором хранится файл. (В режиме MapReduce)

функция — мы должны выбрать функцию из набора функций загрузки, предоставляемых Apache Pig ( BinStorage, JsonLoader, PigStorage, TextLoader ).

Схема — мы должны определить схему данных. Мы можем определить требуемую схему следующим образом:

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

Примечание. Мы загружаем данные без указания схемы. В этом случае столбцы будут адресованы как $ 01, $ 02 и т. Д. (Отметьте).

пример

В качестве примера, давайте загрузим данные в student_data.txt в Pig по схеме с именем Student, используя команду LOAD .

Запустите Pig Grunt Shell

Прежде всего, откройте терминал Linux. Запустите оболочку Pig Grunt в режиме MapReduce, как показано ниже.

$ Pig x mapreduce

Это запустит Pig Grunt, как показано ниже.

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>

Выполнить оператор загрузки

Теперь загрузите данные из файла student_data.txt в Pig, выполнив следующую инструкцию Pig Latin в оболочке 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 );

Ниже приведено описание вышеприведенного утверждения.

Имя отношения Мы сохранили данные в схеме студента .
Путь к входному файлу Мы читаем данные из файла student_data.txt, которая находится в каталоге / pig_data / HDFS.
Функция хранения Мы использовали функцию PigStorage () . Он загружает и хранит данные в виде структурированных текстовых файлов. В качестве параметра требуется разделитель, использующий каждую сущность кортежа. По умолчанию он принимает ‘\ t’ в качестве параметра.
схема

Мы сохранили данные, используя следующую схему.

колонка Я бы имя Фамилия Телефон город
тип данных ИНТ массив символов массив символов массив символов массив символов

Мы сохранили данные, используя следующую схему.

Примечание. Оператор load просто загружает данные в указанное отношение в Pig. Чтобы проверить выполнение оператора Load , вы должны использовать диагностические операторы, которые обсуждаются в следующих главах.