Apache Pig - чтение данных
В целом Apache Pig работает поверх Hadoop. Это аналитический инструмент, который анализирует большие наборы данных, существующие вHAdoop File Sсистема. Чтобы анализировать данные с помощью Apache Pig, мы должны изначально загрузить данные в Apache Pig. В этой главе объясняется, как загружать данные в Apache Pig из HDFS.
Подготовка HDFS
В режиме MapReduce Pig считывает (загружает) данные из HDFS и сохраняет результаты обратно в HDFS. Поэтому давайте запустим HDFS и создадим следующие образцы данных в HDFS.
Студенческий билет | Имя | Фамилия | Телефон | город |
---|---|---|---|---|
001 | Раджив | Редди | 9848022337 | Хайдарабад |
002 | Сиддарт | Баттачарья | 9848022338 | Калькутта |
003 | Раджеш | Ханна | 9848022339 | Дели |
004 | Preethi | Агарвал | 9848022330 | Пуна |
005 | Trupthi | Моханти | 9848022336 | Бхуванешвар |
006 | Арчана | Мишра | 9848022335 | Ченнаи |
Приведенный выше набор данных содержит личные данные, такие как идентификатор, имя, фамилия, номер телефона и город, шести студентов.
Шаг 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.
Синтаксис
Оператор загрузки состоит из двух частей, разделенных оператором «=». В левой части нужно указать название отношенияwhere мы хотим хранить данные, и в правой части мы должны определить howмы храним данные. Ниже приведен синтаксисLoad оператор.
Relation_name = LOAD 'Input file path' USING function as schema;
Куда,
relation_name - Мы должны указать отношение, в котором мы хотим хранить данные.
Input file path- Мы должны упомянуть каталог HDFS, в котором хранится файл. (В режиме MapReduce)
function - Мы должны выбрать функцию из набора функций загрузки, предоставляемого Apache Pig (BinStorage, JsonLoader, PigStorage, TextLoader).
Schema- Мы должны определить схему данных. Мы можем определить требуемую схему следующим образом -
(column1 : data type, column2 : data type, column3 : data type);
Note- Загружаем данные без указания схемы. В этом случае столбцы будут адресованы как $ 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. | ||||||||||||
Путь к входному файлу | Читаем данные из файла student_data.txt, который находится в каталоге / pig_data / HDFS. | ||||||||||||
Функция хранения | Мы использовали PigStorage()функция. Он загружает и хранит данные в виде структурированных текстовых файлов. В качестве параметра требуется разделитель, с помощью которого отделяется каждая сущность кортежа. По умолчанию в качестве параметра используется '\ t'. | ||||||||||||
схема | Мы сохранили данные, используя следующую схему.
|
Note - The loadоператор просто загрузит данные в указанное отношение в Pig. Чтобы проверить выполнениеLoad заявление, вы должны использовать Diagnostic Operators которые обсуждаются в следующих главах.