dantezhao / data-group

77 stars 12 forks source link

SparkStreaming如何有效的结合hdfs中的历史数据和接收的准实时数据进行聚合运算? #10

Open AlanHand opened 6 years ago

AlanHand commented 6 years ago
   有一个需求是关于实时统计平台的用户数的, 以身份证号码作为统计条件,及一个身份证号码代表一个用户.

问题是平台中每一个来注册的用户可能身份证信息已经存在于平台的mysql数据库中,一个身份证可以有多个注册账号, 后台业务开发会将日志信息落成文件,我使用flume进行实时采集,然后进入kafka,再由SparkStreaing接收数据进行计算 , 在开始运行SparkStreaming时我会使用sqoop将mysql的初始数据同步到hdfs中,因此在SprakStreaming计算的时候需要加载hdfs的数据进行聚合运算, 问题如下: 1.SparkStreaming的数据接收时间间隔往往很小,hdfs数据大,不能每个batch时间都去加载hdfs的数据 2.cache到内存的数据不能在一个batch处理时间之后被回收 3.SparkStreaming接收的数据与hdfs数据shuffle时影响了性能 4.不能频繁的进行checkpoint

rorovic commented 6 years ago

建议把HDFS中需要用到的短暂历史数据,cache到缓存里使用。缓存方案很多,类似Tair甚至Alluxio这种,速度会提高很多。

rorovic commented 6 years ago

或者在HDFS的存储文件上下功夫,类似Parquet文件这种,压缩比和读写速度都很好。

chuancyzhang commented 4 years ago

现在有apache hudi 这类的数据湖项目,可以考虑下