Apache Pig - การอ่านข้อมูล
โดยทั่วไปแล้ว Apache Pig จะทำงานบน Hadoop เป็นเครื่องมือวิเคราะห์ที่วิเคราะห์ชุดข้อมูลขนาดใหญ่ที่มีอยู่ในไฟล์Hadoop File System. ในการวิเคราะห์ข้อมูลโดยใช้ Apache Pig เราต้องโหลดข้อมูลลงใน Apache Pig ก่อน บทนี้จะอธิบายวิธีการโหลดข้อมูลไปยัง Apache Pig จาก HDFS
กำลังเตรียม HDFS
ในโหมด MapReduce Pig จะอ่าน (โหลด) ข้อมูลจาก HDFS และเก็บผลลัพธ์ไว้ใน HDFS ดังนั้นให้เราเริ่ม HDFS และสร้างข้อมูลตัวอย่างต่อไปนี้ใน HDFS
| รหัสนักศึกษา | ชื่อจริง | นามสกุล | โทรศัพท์ | เมือง |
|---|---|---|---|---|
| 001 | ราจีฟ | เรดดี้ | 9848022337 | ไฮเดอราบาด |
| 002 | Siddarth | Battacharya | 9848022338 | กัลกัตตา |
| 003 | Rajesh | คันนา | 9848022339 | เดลี |
| 004 | พรีธี | Agarwal | 9848022330 | ปูน |
| 005 | ทรัพฐี | โมฮันธี | 9848022336 | ภุวาเนศวร |
| 006 | อรชนา | มิชรา | 9848022335 | เจนไน |
ชุดข้อมูลข้างต้นประกอบด้วยรายละเอียดส่วนบุคคลเช่นรหัสชื่อนามสกุลหมายเลขโทรศัพท์และเมืองของนักเรียนหกคน
ขั้นตอนที่ 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
เรียกดูไฟล์ 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 ในหมูภายใต้สคีมาชื่อ 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 shell
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 - loadคำสั่งจะโหลดข้อมูลลงในความสัมพันธ์ที่ระบุใน Pig เพื่อตรวจสอบการดำเนินการของไฟล์Load คุณต้องใช้ไฟล์ Diagnostic Operators ซึ่งจะกล่าวถึงในบทต่อไป