大数据分析的技术选型考虑

2017-01-12 09:57:23来源:作者:鱼儿的博客人点击

比如站点有1000万用户,用户有各类积分和行为信息,现在想做用户画像的话,基于MYSQL跑统计脚本能否玩的通呢?

一般来说,每个用户的画像简单存储为mysql的一行,有很多属性列,比如A列和B列。

我们从其他系统的mysql里挖掘出一些用户的A属性,希望写回到画像表,做法肯定是遍历挖掘结果,去画像表读出一行,如果用户画像不存在还要创建出来,之后再把A属性填上,将行写回去。

用户少还可以玩,假设有1000万,到底要跑多久才能搞得定呢?这就很难了,1000万次读,1000万次写,用一个单进程脚本读写mysql,中途异常就会中断,即便不中断又要跑多久呢?

先看问题是什么:首先挖掘出的A属性可能也是1000万行,可以直接插入到另外一张表或者sql dump到一个文件中。接下来,这些A属性要更新到对应的用户画像中,1000万用户就要读1000万次用户画像,因为你不读就不知道用户画像记录是否存在,不存在就要建立出来,这个真的无法避免。最后,需要把A属性填到对应的列中,写回这一行。

正是因为mysql是行存储的原因,所以必须通过读一次的方式确认用户记录是否存在。如果我们换成hbase这种列存储,那么直接写1000万次,将A属性作为某个列簇下的值写到hbase里即可。

我建议的做法是在hbase中保存用户画像,基本模型就是userid => {A属性,B属性,C属性}的映射,并在hive种以该hbase作为数据源建立对应hive表,便于后续基于画像数据的数据分析。

为了挖掘A,B,C属性,可以将mysql待挖掘数据同步到hdfs中并建对应的hive表,它作为挖掘属性的数据源,通过执行Hive sql,它基于mapreduce并行可靠的产出结果,快速的挖掘得到1000万用户的各类属性。

最后将挖掘出的属性,通过mapreduce手段更新到hbase中,这个过程只需要基于mapreduce框架执行1000万次写入(实际会批量打包),这样hbase中的画像表就构成了。

对于mysql数据导入hive以及mysql数据增量导入hive的问题,可以用 sqoop工具搞定。而hive本身支持以hbase作为数据源建立hive表,无需做额外的工作。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台