Hive 分區 – Sellkart 案例研究 - 戰略性地使用數據
已發表: 2015-08-14Sellkart 是一個主要的印度電子商務網站和零售商店,與其他所有電子商務網站一樣,它必須存儲用戶數據和其銷售的所有商品的庫存。 它使用 MySQL 數據庫,這是主要的數據存儲選擇之一。 MySQL 是安全、可靠和可靠的數據存儲。 但隨著 Sellkart 越來越大,越來越多的客戶開始潛入這個電子商務門戶。 現在 Sellkart 收集用戶數據,例如他們的位置、他們的行為、人口統計日誌、購買的物品和退回的物品、他們的付款方式,如 COD、信用卡/借記卡。 分析師使用這些數據來預測客戶價值、更好的支付選項,並使用更好的廣告活動來擴展業務,從而簡化流程。
為了描述如何戰略性地使用收集到的數據,我們將在這裡考慮一個虛假的消費者數據集,其中包括用戶名、他們的城市、他們的職業、總數。 購買的物品總數和總數。 由於缺陷而退回的物品。
在假數據集(data.csv)中,我們有購買超過 25 件商品的客戶的數據。
data.csv 中的字段
- 用戶名(字符串)
- 城市(字符串)
- 職業(字符串)
- 已購買(整數)
- 返回(整數)
Sellkart 使用這些數據(具有多列和超過幾 GB 的相當大的數據集)來預測和理解其係統的關鍵洞察力,例如:
- 客戶的終生價值
- 產品成功
- 購買產品的人口統計
- 關注區域
- 產品實時定價
- 向上銷售吸引客戶
現在我們將展示如何在 Hadoop 中進行小範圍分析。 我們將使用數據發現:
a) 根據他們購買的產品數量找到最大的消費者。
用途:為最佳買家提供特權,向普通客戶推銷。
b) 尋找購買最多產品的工作部門。
用途:保留更多暢銷產品,推薦給同類產品。
c) 查找購買產品最多的城市。
用途:區域明智地瞄準買家,專注於客戶較少的地區,在良好的市場中嘗試新產品。
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.使用hive處理數據。
a) 在 hive 中創建表,用於存儲這些數據。
[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) 了解表格的見解。
hive> 描述格式化購物;
好的
# col_name data_type 註釋 用戶名字符串 無 城市字符串 無 職業字符串 無 購買項目 int 無 返回的項目 int 無 # 詳細的表信息 數據庫:默認 業主:培訓 創建時間:2015 年 7 月 21 日星期二 16:56:38 IST 上次訪問時間:未知 保護模式:無 留存:0 位置:hdfs://localhost/user/hive/warehouse/shopping 表類型:MANAGED_TABLE 表參數: 瞬態_lastDdlTime 1437478210 # 存儲信息 SerDe 庫:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 輸入格式:org.apache.hadoop.mapred.TextInputFormat 輸出格式:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat 壓縮:否 桶數:-1 桶列:[] 排序列:[] 存儲描述參數: 字段.delim , 序列化.格式, 耗時:0.302 秒
3. 現在我們需要看看如何使用這些數據。
a) 尋找最好的客戶,為他們提供更多折扣。 首先,我們將找到訂購的最高數量,然後我們將該數量與所有記錄相匹配,並找到最大的客戶。
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 時數據非常少時才會出現。
b) 現在分析師可以找到哪個工作部門是他們最好的客戶,即分析購買最多的人的工作,從而增加該部門的產品。
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. 使用豬
現在我們將使用 pig 執行一些其他功能,例如從特定城市收集用戶名組,這些城市是頂級消費者。
a) 在 pig 中加載數據
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;
現在將頂級消費城市分組,以獲取用戶名作為集合。
數據已分組但無序。
所以我們現在需要訂購。
所以通過這種方式,最終的數據是有序的。
現在我們可以使用這些數據了。 同樣,我們可以提取消費者最少的城市,在這些城市中,公司可以為廣告和宣傳活動定義更多預算,以便更多人與門戶網站互動。
而對於消費率高的城市和消費者,公司可以推出新品,擴大圈子。
如果您有任何疑問或疑問,請在下面的評論框中提及。