В общем, 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 , вы должны использовать диагностические операторы, которые обсуждаются в следующих главах.