Hive 分区 – Sellkart 案例研究 - 战略性地使用数据

已发表: 2015-08-14

Sellkart 是一个主要的印度电子商务网站和零售商店,与其他所有电子商务网站一样,它必须存储用户数据和其销售的所有商品的库存。 它使用 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;

现在将顶级消费城市分组,以获取用户名作为集合。

数据已分组但无序。

所以我们现在需要订购。

所以通过这种方式,最终的数据是有序的。

现在我们可以使用这些数据了。 同样,我们可以提取消费者最少的城市,在这些城市中,公司可以为广告和宣传活动定义更多预算,以便更多人与门户网站互动。

而对于消费率高的城市和消费者,公司可以推出新品,扩大圈子。

如果您有任何疑问或疑问,请在下面的评论框中提及。