Apache-pig-reading-data

提供:Dev Guides
移動先:案内検索

Apache Pig-データの読み取り

一般的に、Apache PigはHadoopの上で動作します。 これは、* H adoop F ile S *システムに存在する大規模なデータセットを分析する分析ツールです。 Apache Pigを使用してデータを分析するには、最初にデータをApache Pigにロードする必要があります。 この章では、HDFSからApache Pigにデータをロードする方法について説明します。

HDFSの準備

MapReduceモードでは、PigはHDFSからデータを読み取り(ロード)、HDFSに結果を保存します。 したがって、HDFSを起動し、HDFSに次のサンプルデータを作成します。

Student ID First Name Last Name Phone City
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

上記のデータセットには、6人の学生のID、名、姓、電話番号、市などの個人情報が含まれています。

ステップ1:Hadoopの検証

まず、以下に示すように、Hadoop versionコマンドを使用してインストールを確認します。

$ 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の開始

以下に示すように、Hadoopの sbin ディレクトリを参照し、 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 コマンドを使用してディレクトリを作成できます。 以下に示すように、必要なパスに Pig_Data という名前でHDFSに新しいディレクトリを作成します。

$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.

次に、以下に示すように put コマンドを使用して、ローカルファイルシステムからHDFSにファイルを移動します。 ( 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

ロードオペレーター

*Pig Latin* の *LOAD* 演算子を使用して、ファイルシステム(HDFS/ローカル)からApache Pigにデータをロードできます。

構文

ロードステートメントは、「=」演算子で分割された2つの部分で構成されます。 左側では、データを保存するリレーションの名前( where )を指定する必要があり、右側では、データを保存する*方法*を定義する必要があります。 以下に、 Load 演算子の構文を示します。

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

どこで、

  • relation_name -データを保存するリレーションについて言及する必要があります。
  • 入力ファイルのパス-ファイルが保存されているHDFSディレクトリに言及する必要があります。 (MapReduceモードの場合)
  • 関数-Apache Pigが提供する一連のロード関数( BinStorage、JsonLoader、PigStorage、TextLoader )から関数を選択する必要があります。
  • スキーマ-データのスキーマを定義する必要があります。 次のように必要なスキーマを定義できます-
(column1 : data type, column2 : data type, column3 : data type);

注意-スキーマを指定せずにデータをロードします。 その場合、列は$ 01、$ 02などとしてアドレス指定されます(チェック)。

例として、 LOAD コマンドを使用して、 Student という名前のスキーマの下にあるPigの student_data.txt のデータをロードします。

Pig Grunt Shellを開始します

まず、Linuxターミナルを開きます。 以下に示すように、MapReduceモードでPig Gruntシェルを開始します。

$ 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>

Loadステートメントを実行する

Gruntシェルで次のPig Latinステートメントを実行して、ファイル student_data.txt からPigにデータをロードします。

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

以下は、上記の説明の説明です。

Relation name We have stored the data in the schema student.
Input file path We are reading data from the file *student_data.txt, *which is in the/pig_data/directory of HDFS.
Storage function We have used the* PigStorage()* function. It loads and stores data as structured text files. It takes a delimiter using which each entity of a tuple is separated, as a parameter. By default, it takes ‘\t’ as a parameter.
schema We have stored the data using the following schema.

|column |id |firstname |lastname |phone |city |datatype |int |char array |char array |char array |char array

- load ステートメントは、Pigで指定されたリレーションにデータを単にロードします。 Load ステートメントの実行を検証するには、次の章で説明する Diagnostic Operators を使用する必要があります。