使用Spark和Pig统计每秒钟微博数量

手头有一个新浪微博的数据集,大概在1亿条左右。用Pig和Spark写了几行代码,基于400w条微博,统计了每秒钟发了多少条微博。

Life is too short , show me the code.

将数据从本地拷到HDFS上:

hadoop fs -copyFromLocal /home/data/weibo/201605/weibo_freshdata.2016-05-01 /input/weibo/201605

Pig脚本:

启动pig的grunt交互式窗口:

pig

默认在Hadoop集群环境中运行。脚本如下:

weibo = LOAD 'hdfs://master:9000/input/weibo/201605/weibo_freshdata.2016-05-01';

-- $1是发布事件
grouped_weibo = group weibo by $1;

counts = foreach grouped_weibo generate group , COUNT(weibo);

store counts into '/output/weibo_time_count';

下面是YARN作业截图:

使用Spark和Pig统计每秒钟微博数量_第1张图片

使用Spark和Pig统计每秒钟微博数量_第2张图片

启用了26个Map任务,4个Reduce任务,花了大概2分钟30秒统计完结果。部分结果如下:

Spark

已yarn-client模式启动spark-shell:

spark-shell --master yarn-client

统计的代码如下:

val lines = sc.textFile("hdfs://master:9000/input/weibo/201605/weibo_freshdata.2016-05-01")

val records = lines.map(_.split("\t"))

val record_count = records.map( rec => (rec(1),1))

val group_count = record_count.reduceByKey( (a,b) => a+b)

group_count.saveAsTextFile("output/weibo/spark_count")

大概花了17秒钟得到结果,作业截图如下:

使用Spark和Pig统计每秒钟微博数量_第3张图片

使用Spark和Pig统计每秒钟微博数量_第4张图片

验证结果

针对Pig和Spark统计的结果,随机抽查一下是否一致,结果如下图,上下分别为Pig和Spark的结果:

使用Spark和Pig统计每秒钟微博数量_第5张图片

使用Spark和Pig统计每秒钟微博数量_第6张图片

可视化

根据统计的结果做了个简单趋势图:

使用Spark和Pig统计每秒钟微博数量_第7张图片

可以大概看出,凌晨4,5,6是一天的低峰期,而上午的9点,晚上8点,则处于比较活跃的高峰。

你可能感兴趣的:(Hadoop,Spark)