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 ซึ่งจะกล่าวถึงในบทต่อไป