พาร์ติชั่นไฮฟ์ – กรณีศึกษาของ Sellkart- การใช้ข้อมูลอย่างมีกลยุทธ์
เผยแพร่แล้ว: 2015-08-14Sellkart เป็นเว็บไซต์อีคอมเมิร์ซหลักของอินเดียและร้านค้าปลีก และเช่นเดียวกับเว็บไซต์อีคอมเมิร์ซอื่นๆ ทุกแห่งจะต้องจัดเก็บข้อมูลผู้ใช้และสินค้าคงคลังของสินค้าทั้งหมดที่ขาย ใช้ฐานข้อมูล MySQL ซึ่งเป็นหนึ่งในตัวเลือกการจัดเก็บข้อมูลหลัก MySQL เป็นที่เก็บข้อมูลที่ปลอดภัย ปลอดภัย และเชื่อถือได้ แต่เมื่อ Sellkart เติบโตขึ้น ลูกค้าก็เริ่มเข้าสู่พอร์ทัลอีคอมเมิร์ซนี้มากขึ้นเรื่อยๆ ตอนนี้ Sellkart รวบรวมข้อมูลผู้ใช้ เช่น ตำแหน่ง พฤติกรรม บันทึกข้อมูลประชากร รายการที่ซื้อ และรายการที่ส่งคืน ตัวเลือกการชำระเงิน เช่น COD บัตรเครดิต/บัตรเดบิต นักวิเคราะห์ใช้ข้อมูลนี้เพื่อคาดการณ์มูลค่าของลูกค้า ตัวเลือกการชำระเงินที่ดีขึ้น และขยายธุรกิจโดยใช้แคมเปญโฆษณาที่ดีขึ้น ทำให้กระบวนการง่ายขึ้น
เพื่ออธิบายวิธีที่ข้อมูลที่รวบรวมสามารถนำมาใช้อย่างมีกลยุทธ์ เราจะพิจารณาชุดข้อมูลปลอมของผู้บริโภคที่นี่ ซึ่งประกอบด้วยชื่อผู้ใช้ เมือง อาชีพของพวกเขา จำนวนทั้งหมด ของรายการที่ซื้อและจำนวนรวม ของสินค้าที่ส่งคืนเนื่องจากชำรุด
ที่นี่ในชุดข้อมูลปลอม (data.csv) เรามีข้อมูลของลูกค้าที่ซื้อมากกว่า 25 รายการ
ฟิลด์ใน data.csv
- ชื่อผู้ใช้ (สตริง)
- เมือง (สตริง)
- อาชีพ (สตริง)
- ซื้อแล้ว (จำนวนเต็ม)
- ส่งกลับ (จำนวนเต็ม)
Sellkart ใช้ข้อมูลนี้ ซึ่งมีหลายคอลัมน์และชุดข้อมูลขนาดใหญ่กว่าหลายกิกะไบต์ เพื่อคาดการณ์และทำความเข้าใจข้อมูลเชิงลึกที่สำคัญของระบบ เช่น:
- มูลค่าตลอดอายุการใช้งานของลูกค้า
- ความสำเร็จของผลิตภัณฑ์
- การซื้อตามข้อมูลประชากรของผลิตภัณฑ์
- ภูมิภาคที่น่าเป็นห่วง
- การกำหนดราคาสินค้าตามเวลาจริง
- เพิ่มยอดขายให้กับลูกค้าที่มีส่วนร่วม
ตอนนี้เราจะแสดงให้เห็นว่าการวิเคราะห์ช่วงเล็ก ๆ เกิดขึ้นใน Hadoop อย่างไร สิ่งที่เราจะหาโดยใช้ข้อมูล:
ก) การค้นหาผู้บริโภคอันดับต้น ๆ โดยพิจารณาจากจำนวนสินค้าที่พวกเขาซื้อ
การ ใช้งาน: มอบสิทธิพิเศษให้กับผู้ซื้อที่ดีที่สุด เพิ่มยอดขายลูกค้าโดยเฉลี่ย
ข) ค้นหาภาคงานที่ซื้อสินค้าส่วนใหญ่
การ ใช้งาน: รักษาผลิตภัณฑ์ที่มียอดขายสูงสุด แนะนำผลิตภัณฑ์ประเภทเดียวกัน
ค) ค้นหาเมืองที่ซื้อสินค้าส่วนใหญ่
การ ใช้งาน: กำหนดเป้าหมายผู้ซื้อตามภูมิภาค เน้นพื้นที่ที่มีลูกค้าน้อยกว่า ทดลองใช้ผลิตภัณฑ์ใหม่ในตลาดที่ดี
1.คัดลอกข้อมูลลงใน HDFS
a) สร้างไดเร็กทอรีใน hadoop HDFS
[training@localhost ~]$ hadoop fs -mkdir /user/training/case1
[training@localhost ~]$ hadoop fs -ls
Found 3 items
drwxr-xr-x - training supergroup 0 2015-07-21 16:48 /user/training/case1
-rw-r--r-- 1 training supergroup 44009445 2015-07-20 12:39 /user/training/crime
drwxr-xr-x - training supergroup 0 2015-07-20 14:21 /user/training/csvfile
b) คัดลอกไฟล์เพื่อใช้งานต่อไป
[training@localhost ~]$ hadoop fs -copyFromLocal ~/Desktop/case1/data.csv /user/training/case1
[training@localhost ~]$ hadoop fs -ls /user/training/case1
Found 1 items
-rw-r--r-- 1 training supergroup 2489638 2015-07-21 16:49 /user/training/case1/data.csv
หลังจากคัดลอกไฟล์นี้แล้ว ไฟล์จะถูกประมวลผลโดยใช้ Hive เพื่อให้ได้ผลลัพธ์ที่แตกต่างกัน
2. การใช้ไฮฟ์ในการประมวลผลข้อมูล
ก) การสร้างตารางในกลุ่ม ซึ่งจะใช้เพื่อเก็บข้อมูลนี้
[training@localhost ~]$ hive
creatHive history file=/tmp/training/hive_job_log_training_201507211652_319213433.txt
hive> create table shopping (username string,city string,occupation string,purchaseditem,int,returneditem int) row format delimited fields
terminated by ',' stored as textfile
OK
Time taken: 2.892 seconds
hive> show tables;
OK
crimes
shopping
Time taken: 0.171 seconds
b) โหลดไฟล์ลงในตารางไฮฟ์ช็อปปิ้ง
Hive>load data inpath '/user/training/case1/data.csv' overwrite into table shopping;
Loading data to table default.shopping
Deleted hdfs://localhost/user/hive/warehouse/shopping
OK
Time taken: 2.798 seconds
c) รู้ข้อมูลเชิงลึกของตาราง
รัง> อธิบายการจัดรูปแบบการช้อปปิ้ง;
ตกลง
# col_name data_type ความคิดเห็น ชื่อผู้ใช้สตริงไม่มี สตริงเมืองไม่มี สายอาชีพไม่มี ซื้อรายการ int ไม่มี ส่งคืนสินค้าเป็นจำนวนเต็ม ไม่มี # ข้อมูลตารางโดยละเอียด ฐานข้อมูล: ค่าเริ่มต้น เจ้าของ: การฝึกอบรม CreateTime: อังคาร 21 ก.ค. 16:56:38 IST 2015 LastAccessTime: UNKNOWN โหมดป้องกัน: ไม่มี การเก็บรักษา: 0 ที่ตั้ง: hdfs://localhost/user/hive/warehouse/shopping ประเภทตาราง: MANAGED_TABLE พารามิเตอร์ตาราง: transient_lastDdlTime 1437478210 # ข้อมูลการจัดเก็บ ไลบรารี SerDe: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat รูปแบบเอาต์พุต: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat บีบอัด: ไม่ จำนวนถัง: -1 คอลัมน์ถัง: [] จัดเรียงคอลัมน์: [] พารามิเตอร์การจัดเก็บ Desc: field.delim , serialization.format , ใช้เวลา: 0.302 วินาที
3. ตอนนี้เราต้องดูว่าข้อมูลนี้ใช้ได้อย่างไร
ก) หาคนที่เป็นลูกค้าที่ดีที่สุดเพื่อเสนอส่วนลดให้พวกเขามากขึ้น อันดับแรก เราจะหาว่าปริมาณการสั่งซื้อสูงสุดคือเท่าใด จากนั้นเราจะจับคู่ปริมาณนั้นกับระเบียนทั้งหมดและค้นหาลูกค้าอันดับต้นๆ
hive> select * from shopping limit 5;
OK
Seattle Podiatric doctor 187 5
Detroit Lakes Engineering and natural sciences manager 168 11
Jackson Map editor 187 17
Miami Clinical manager 193 5
Santa Fe Springs Radiographer 207 20
Time taken: 0.335 seconds
hive> select max(purchaseditem) from shopping;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201507212155_0001, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507212155_0001
Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507212155_0001
2015-07-21 23:16:01,887 Stage-1 map = 0%, reduce = 0%
2015-07-21 23:16:06,988 Stage-1 map = 100%, reduce = 0%
2015-07-21 23:16:16,075 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201507212155_0001
OK
250
Time taken: 18.794 seconds
hive> select * from shopping where purchaseditem = 250;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201507212155_0002, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507212155_0002
Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507212155_0002
2015-07-21 23:18:31,586 Stage-1 map = 0%, reduce = 0%
2015-07-21 23:18:33,598 Stage-1 map = 100%, reduce = 0%
2015-07-21 23:18:34,608 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201507212155_0002
OK
Ablay1993 Seattle Ergonomist 250 7
Ablent71 Sugar Land Professional property manager 250 10
Affew1942 Alquippa Human resources consultant 250 13
Agar1976 Bell Oak Zookeeper 250 5
Akeem Manchester Marine 250 11
Alat1954 Columbus Assembler 250 7
Albertha Baton Rouge Mixing and blending machine operator 250 21
Amelia.Skiles Westfield Mediator 250 0
Amir_Spencer Polk City Epidemiologist 250 11
Angel.Thiel Hamilton Keying machine operator 250 21
Annalise_Langosh East Northport Fitness director 250 24
ตอนนี้บริษัทสามารถค้นหาลูกค้าอันดับต้นๆ ได้ ขั้นตอนนี้สามารถทำได้ง่ายบน MySQL แต่เมื่อข้อมูลมีขนาดเล็กมากเมื่อข้อมูลอยู่ในหน่วยกิกะบิต Hadoop เข้ามาเพื่อบันทึกวัน
ข) ตอนนี้นักวิเคราะห์สามารถค้นหาว่ากลุ่มงานใดเป็นลูกค้าที่ดีที่สุด เช่น วิเคราะห์งานของผู้ซื้อมากที่สุด เพื่อเพิ่มผลิตภัณฑ์ของภาคนั้น
hive> select distinct occupation from shopping where purchaseditem = 250;;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Estimated from input data size: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201507220045_0006, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507220045_0006
Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507220045_0006
2015-07-22 01:09:52,904 Stage-1 map = 0%, reduce = 0%
2015-07-22 01:09:54,914 Stage-1 map = 100%, reduce = 0%
2015-07-22 01:10:01,968 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201507220045_0006
OK
Account clerk
Accounting clerk
Actuarie
Administrative assistant.
และอื่นๆ.
ตอนนี้เมื่อรู้ว่าพนักงานบัญชีเป็นหนึ่งในกลุ่มงานอันดับต้นๆ ที่ผู้คนซื้อของ พวกเขาสามารถเพิ่มยอดขายในแผนกนี้ได้
4. การใช้หมู
ตอนนี้เราจะใช้หมูเพื่อทำหน้าที่อื่นๆ เช่น การรวบรวมกลุ่มชื่อผู้ใช้จากเมืองใดเมืองหนึ่ง และเมืองเหล่านี้เป็นผู้บริโภคอันดับต้นๆ
ก) โหลดข้อมูลในหมู
grunt> fulldata = load '/user/training/case1/' using PigStorage(',') as
(username:chararray,city:chararray,occupation:chararray, purchaseditem:int,returneditem:int);
grunt>dump fulldata;(username:chararray,city:chararray,occupation:chararray, purchaseditem:int,returneditem:int);
grunt>dump fulldata;
b) ตอนนี้เราจะจัดกลุ่มชื่อผู้ใช้ของผู้บริโภคชั้นนำตามเมืองต่างๆ
สำหรับการแยกบันทึกของผู้บริโภคชั้นนำ
Hive>top = filter fulldata by purchaseditem==250;
การจัดกลุ่มเมืองผู้บริโภคชั้นนำในขณะนี้ เพื่อรับชื่อผู้ใช้เป็นคอลเลกชัน
ข้อมูลถูกจัดกลุ่มแต่ไม่ได้เรียงลำดับ
เราเลยต้องสั่งตอนนี้
ด้วยวิธีนี้ข้อมูลสุดท้ายจะถูกจัดลำดับ
ตอนนี้เราสามารถใช้ข้อมูลนี้ได้ ในทำนองเดียวกัน เราสามารถแยกเมืองที่มีผู้บริโภคน้อยที่สุด ในเมืองเหล่านั้น บริษัทสามารถกำหนดงบประมาณเพิ่มเติมสำหรับแคมเปญโฆษณาและประชาสัมพันธ์ เพื่อให้ผู้คนโต้ตอบกับพอร์ทัลมากขึ้น
และสำหรับเมืองและผู้บริโภคที่มีอัตราการบริโภคสูง บริษัทสามารถเปิดตัวผลิตภัณฑ์ใหม่และขยายแวดวงของตนได้
หากคุณมีข้อสงสัยหรือข้อสงสัยใด ๆ ให้พูดถึงในช่องแสดงความคิดเห็นด้านล่าง