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" เป็นพารามิเตอร์
สคีมา

เราได้จัดเก็บข้อมูลโดยใช้สคีมาต่อไปนี้

คอลัมน์ id ชื่อจริง นามสกุล โทรศัพท์ เมือง
ประเภทข้อมูล int อาร์เรย์ถ่าน อาร์เรย์ถ่าน อาร์เรย์ถ่าน อาร์เรย์ถ่าน

Note - loadคำสั่งจะโหลดข้อมูลลงในความสัมพันธ์ที่ระบุใน Pig เพื่อตรวจสอบการดำเนินการของไฟล์Load คุณต้องใช้ไฟล์ Diagnostic Operators ซึ่งจะกล่าวถึงในบทต่อไป