Hadoop + Hive应用实例(附源码)
基于消费者对商品购买数据统计
1 引言
当前许多企业逐渐将电子商务作为商业交易、营销等商业行为 的工具及载体,视网络购物为新一轮企业竞争的主要手段,同时,越来越多的个人也将在 INTERNET 上开设自己的网络商店作为创业 的一种方式。调查显示,全球在家上网人口于 2002 年为 5 亿 3,130 万人,预计至 2009 年,全球网络交易金额将突破 1 兆美元。开设网 络商店,与开实体店面相比;创业所需成本、费用、设备,低廉许多。 但也因网络商店进入门坎较低,加之许多网络商店经营者缺乏经营经验和对市场应有的分析,往往导致在茫茫网络中,难以脱颖而出, 甚至难以为继。许多网络商店的经营者往往把经营重心放在吸引新的顾客,经常是提供各种优惠或广告手法吸引顾客上网消费,而忽略顾客真正需求。本文以某娱乐商品销售网络商店为例,从网络商店特性、商品特性、消费者购买行为等几个方面,根据消费者购买的订单表(orders.csv)和订单对应商品的表( order_products_prior.csv)
统计出如下几项内容:1. 每个用户平均每个订单商品数量 2. 每个用户购买订单的最大最小间隔 3.每个用户最喜爱购买的三个product 4.每个用户总商品数量和去重后的商品数量(下划线连接)然后将这每个用户对应的四个信息做成一个表格导入到hadoop的hive中。
根据得到的统计信息形成用户的消费特征,从而对用户间的消费进行建模,合理推销商品探讨他们之间的关联性,建立了影响消费者网络购物因素的研究总体框架,目的是希望为想在网络创业及网络商店经营者提供有益的参考。
2 国内外研究现状
(1)国外研究现状 
如何把握网络消费者的购买喜好及其忠诚度的培养,如何全方位地管理网络品牌。 被誉为“全球定位之父”的美国著名营销大师阿尔·里斯在《打造网络品牌的 11条法则》一书中,提出在网络消费时代中最成功的的品牌将是一种“交互式”的品牌,强调了消费者信息在网络购物中的重要作用,并且指导企业如何以 11 条精炼的法则来完成其网络品牌建设。 国外其他对网络与品牌关系有所研究的学者还有迪尔德丽·布瑞肯里奇(Deirdre Breakenridge)所编
著的《品牌的革命》以及马克·布朗斯坦(Marc Braunstein)的《网络品牌》,分别讲述了品牌如何应对网络所带来的大量挑战与机遇以及网络品牌区别于传统品牌的建设方式,对企业来说有着实际的指导作用。 网络信息技术的发展影响了品牌的运营方式,而大数据的普遍出现与应用则能进一步改变网络商业模式。被誉为“大数据商业应用第一人”的美国著名学者维克托·迈尔-舍恩伯格(Viktor Mayer-Schönberger)在其著作《大数据时代》一书中提出,大数据将为人类的生活创造前所未有可量化的维度,并且以亚马逊、谷歌、Facebook 等网络商业巨头为案例,更加深入的向读者说明大数据的价值所在。
(2)国内研究现状
我国虽然在网络购物方面起步较晚,但是凭借着自身优势,其发展速度却远远超过了世界上大部分国家。在网络品牌理论方面,国内也有许多学者及成功的企业家提出了自己独到的见解。
中国互联网品牌营销专家杨小辉在其著作《当品牌遇上网络:悄然兴起的互联网品牌营销》讲述了在互联网时代下,品牌进行网络营销的重要性和必要性,在分析多个实际品牌案例后,结合自身的网络品牌营销经验,提出了颇具创意的网络品牌生态树理论,从品牌定位、产品
策划、网络推广等多个方面来引导企业网络品牌有效地进行网络营销。 《中高端男装网络品牌营销策略分析》(章思思 东华大学)一文中,以现代中高端网络男装品牌为主要研究对象,实例分析了国内中高端男装网络品牌的定位方向、产品策略、价格策略、渠道策略、促销策略,总结出中高端男装网络品牌的定位与建设不仅仅是产品本身,更重要的是一种品牌文化的推崇,对现代男装品牌线上网络营销策略有一定的借鉴意义。 《男装品牌网络形象塑造的研究与应用》(程利 西安工程科技学院)针对国内男装品牌现状,详细分析了在网络环境下男装品牌形象塑造的不足之处与可行性应对策略。 《基于 BtoC 电子商务模式的服装品牌商品企划研究》(陈红星  东华大学)阐述了国内 BtoC 电子商务模式的概况与特点,并且在此基础上针对服装品牌的品牌策略、产品企划等多方面进行了详细的介绍与深入分析,为 BtoC 模式下的服装品牌系统合理地规划产品开发提供理论指导。 《大数据的商业价值》(陈宪宇)一文全面的向读者介绍了大数据的概念、特征,并且从各个商业角度阐释了大数据为其带来的巨大价值,尤其在网络购物方面,数据的作用已经上升为品牌的重要战略资源。
3 方案设计
    整个数据分析过程包括环境搭建、数据准备与预处理、MapReduce算法设计三方面,详细方案设计如下。
2.1实验环境
操作系统:CentOS6.5
集环境:Hadoop2.6.5 + Hive2.3.6 + Haproxy1.7.9
结点:
    名称结点:nna + MySQL Server + Haproxy
    数据结点:dn1 + HiveServer
程序语言:JDK1.8 + Centos6 Shell
    Hive集的搭建不再赘述。
2.2 数据预处理
    orders.csv文件保存的是用户订单和用户的对应关系,order_products_prior.csv文件保存的是用户的订单与商品的对应关系,各个字段的描述如图所示:
整个数据集包含200万个用户,342万个订单和3423万个商品,考虑用MapReduce来做数据统计。
    数据的统计涉及用户和商品的对应关系,而user_id和product_id分别在两张表中,为了减少程序计算的复杂性,将两张表合成一张表,通过增加数据冗余来降低计算复杂度,提高统计效率。
在hive中创建orders表和order_products_prior,并将对应文件的本地文件中的数据导入到两张表中。
将csv文件中的数据导入到两个表中,如下:
两个表的结构如下:
建表过程如下:
   
Hive支持直接通过命令将文件导入到hive数据仓库中,并且也支持将对数据库的操作转化为MapReduce任务,数据的查询效率高。
通过order_id在orders表和order_products_prior表上做联合查询,并将查询的结果写入到user_order_product表中,该过程自动生成MapReduce任务:
查看合成表的数据格式:
将合成的数据表通过命令行的方式导出到本地,方便自己编写的MapReduce程序读取数据:
查看导出文件的数据格式:
将导出的user_, 订单表文件orders.csv, 订单与商品对应关系表order_products__prior.csv上传到hdfs:
数据的统计即可以直接从Hive读取数据,也可以从HDFS读取数据,但在不知道user_id的情况下,直接读取HDFS的数据无疑是更好的选择,且若从Hive读取数据,需要对每个user做一次查询,不如直接从本地顺序读取数据效率好。
2.3 算法设计与实现
2.3.1 每个用户平均每个订单商品数量
算法描述
国外网站源码
1)Map阶段
a)按行读取user_文件的数据
b) key: user_id , value: order_id写入上下文
2)Reduce阶段
a)统计key中相同value的个数,存入HashMap
b)计算每个用户的订单数和总商品数
c)计算平均每个订单的商品数量
d)将计算结果写入HDFS,输出格式为key : user_id, value : 订单数 + 商品总数 + 平均每个订单的商品数量
算法流程
实验结果如下:
   
2.3.2 每个用户购买订单的最大最小间隔
算法描述
1)Map阶段
a)按行读取orders.csv文件的数据
b) key: user_id , value: order_number + hour + day写入上下文
2)Reduce阶段
a)value中的hour和day按格式order_number: hour, order_number:day写入TreeMap
b)TreeMap中读取相邻两个订单的时间,计算时间差
c)得到每个用户购买订单的最大、最小时间差
d)将计算结果写入HDFS,输出格式为key : user_id,value : 最小时间间隔 + 最大时间间隔
此处应该注意的是,TreeMap中的元素会自动根据order_number排序,因此得到的TreeMap序列是有序的。
算法流程
实验结果
2.3.3每个用户最喜爱购买的三个product
算法描述
1)Map阶段
a)按行读取按行读取user_文件的数据
b) key: user_id , value: product_id写入上下文
2)Reduce阶段
a)统计product_id出现的次数,按Entry(key:product_id, value:number)写入TreeMap
b)TreeMap转化为ArrayList,并通过比较器对Entry的value进行降序排序
c)得到每个用户最喜欢的三个product
d)将计算结果写入HDFS,结果的格式为key : user_id,value : 最喜欢商品1.id + 最喜欢商品2.id + 最喜欢商品3.id
算法流程
实验结果
2.3.4 每个用户总商品数量和去重后的商品数量
算法描述
1)Map阶段
a)按行读取按行读取user_文件的数据
b) key: user_id , value: product_id写入上下文
2)Reduce阶段
a)统计product_id出现的次数,按Entry(key:product_id, value:number)写入TreeMap
b)key的数量为去重后的商品数量,value的和为总商品数量
c)将计算结果写入HDFS,结果格式为key : user_id, value : 商品总数 + 去重后的商品数量
算法流程
实验结果
2.3.5统计结果合并
上述四个MapReduce任务输出的结果可能不在同一个文件,因此需要先将结果通过命令行的当时下载到本地,重命名后重新上传到HDFS,该过程可通过编写shell脚本来执行。脚本代码如下:
通过MapReduce将个文件中需要的数据合并到一个文件(Data_To_Table),算法流程与上述类似,执行的结果如下:
将最终的结果上传到Hive,该过程也通过shell脚本来实现,代码如下:
统计的最终结果如下(部分):
3 技术/非技术可行性评价
3.1 技术层面
MapReduce 构建于基 于 Key/value 存储的分布式存储系统之上,通过元数 据集中存储、数据以 chunk 为单位分布存储和数据chunk 冗余复制 (默认为三复本) 来保证其高可用性MapReduce 是一种并行编程模型,它把计算过程分解 为两个主要阶段,即 Map 阶段和 Reduce 阶段。Map 函数处理 Key/value 对,产生一系列的中间 Key/value 对,Reduce 函数用来合并所有具有相同 key 值的中 间键值对,计算最终结果。并行任务调度负责在对输入数据分块后启动并行 Map 函数,在数据端完成本地数据处理并写入磁盘,在 Reduce 阶段由 Reduce 函数 将 Map 阶段具有相同 key 值的中间结果收集到相同的Reduce 节点进行合并处理,并将结果写入本地磁盘。 MapReduce 是一种简洁的并行计算模型,其设计的初衷主要是解决简单数据模型大数据在大规模并行计算集上的高可扩展性和高可用性分析处理,其 处理模式以离线式批量处理为主。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。