数据仓库的构建
- 通过shell 编写kafka的消费者,将数据处理到源数据落地区
- 周期性的装载数据到hive中,构建了小时级的数据仓库
实时计算
计算一个小时的热词
由于接收到的是自己通过接口发的12年的微博数据,所以并没有设计滑动窗口,而是按照发微博时间来统计。如果需要的话,只需要把滑动时间为1小时,滑动大小设置为想要的大小就可以统计隔一段时间一小时内的热词,然后通过redis的hincrBy按时间存到redis中
计算PV
拿到数据后处理,在foreachPartiton直接用reids的incr加入数据库
计算UV
数据处理后用redis的set或者hyperloglog自动去重存入redis中
定期将redis的数据写入hbase,进行数据持久化,供前端展示
难点总结
1.curl使用问题
--data "param1=value1¶m2=value" 和 -d 查找自资料-d后传递的参数都没有“”,但是实际操作发现不加引号的话会把数据中的&当作第二个参数处理
2.热词的统计
我们用到自然语言处理,采用nlp分词,对微博数据进行分词处理
3.flatmap的使用
map中函数式方法返回值为对象,也就是原始流中有n个元素,处理之后的流中元素个数也是n个。即使你在返回的时候返回了多个元素如数组,他也会把数组当成一个对象处理。
flatMap中函数式方法返回值为流,flat为扁平的意思,也就是说,我们可以通过flatMap改变原始流中对象的个数,flatMap会将返回的流合并成一个流,而不是当成对象处理。
有二箱鸡蛋,每箱5个,现在要把鸡蛋加工成煎蛋,然后分给学生。
map做的事情:把二箱鸡蛋分别加工成煎蛋,还是放成原来的两箱,分给2组学生;
flatMap做的事情:把二箱鸡蛋分别加工成煎蛋,然后放到一起【10个煎蛋】,分给10个学生;
4.redis连接池配置
每一个partition运行在一台机器上,所以把redis的获取放回放在foreachpartition循环那就可以