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;
现在将顶级消费城市分组,以获取用户名作为集合。
数据已分组但无序。
所以我们现在需要订购。
所以通过这种方式,最终的数据是有序的。
现在我们可以使用这些数据了。 同样,我们可以提取消费者最少的城市,在这些城市中,公司可以为广告和宣传活动定义更多预算,以便更多人与门户网站互动。
而对于消费率高的城市和消费者,公司可以推出新品,扩大圈子。
如果您有任何疑问或疑问,请在下面的评论框中提及。