พาร์ติชั่นไฮฟ์ – กรณีศึกษาของ Sellkart- การใช้ข้อมูลอย่างมีกลยุทธ์

เผยแพร่แล้ว: 2015-08-14

Sellkart เป็นเว็บไซต์อีคอมเมิร์ซหลักของอินเดียและร้านค้าปลีก และเช่นเดียวกับเว็บไซต์อีคอมเมิร์ซอื่นๆ ทุกแห่งจะต้องจัดเก็บข้อมูลผู้ใช้และสินค้าคงคลังของสินค้าทั้งหมดที่ขาย ใช้ฐานข้อมูล 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;

การจัดกลุ่มเมืองผู้บริโภคชั้นนำในขณะนี้ เพื่อรับชื่อผู้ใช้เป็นคอลเลกชัน

ข้อมูลถูกจัดกลุ่มแต่ไม่ได้เรียงลำดับ

เราเลยต้องสั่งตอนนี้

ด้วยวิธีนี้ข้อมูลสุดท้ายจะถูกจัดลำดับ

ตอนนี้เราสามารถใช้ข้อมูลนี้ได้ ในทำนองเดียวกัน เราสามารถแยกเมืองที่มีผู้บริโภคน้อยที่สุด ในเมืองเหล่านั้น บริษัทสามารถกำหนดงบประมาณเพิ่มเติมสำหรับแคมเปญโฆษณาและประชาสัมพันธ์ เพื่อให้ผู้คนโต้ตอบกับพอร์ทัลมากขึ้น

และสำหรับเมืองและผู้บริโภคที่มีอัตราการบริโภคสูง บริษัทสามารถเปิดตัวผลิตภัณฑ์ใหม่และขยายแวดวงของตนได้

หากคุณมีข้อสงสัยหรือข้อสงสัยใด ๆ ให้พูดถึงในช่องแสดงความคิดเห็นด้านล่าง