Apache-pig-reading-data
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 を使用する必要があります。