开发者学堂课程【2020版大数据实战项目之DMP广告系统(第一阶段):Kudu入门_应用场景_方案一】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/676/detail/11747
Kudu入门_应用场景_方案一
方案1:使用Spark Streaming配合HDFS存储
做这种方案无论是做上节杜撰出来的项目,还是做以后真实的项目,都是类似的解决方式,总结一下需求
1.数据要实时处理,Spark Streaming
2.大数据存储,HDFS。
3.使用 Kafka 过渡数据。
在使用 Spark Streaming 不至于把工厂数据直接交给 Spark Streaming,这些工厂的机器要把数据交给的 Kafka。Kafka 是一个队列天然的就可以实时的过渡数据,然后 Spark Streaming从Kafka 中读取数据,然后外部使用 SQL,或者 Spark 来进行查询分析,所以需要把 Spark Streaming 处理过的数据放到 HDFS 中,这个过程凸显出 ETL 和分析,之前提到,一般情况下会先对数据做一些 ETL,然后再放到 HDFS 提供一些接口去进行一些相应的访问,或利用Hive 进行相应的查询。可知,对于数据的处理步骤为,第一步 ETL,它虽然是一大步,但是可能是执行很多次,所以它可能会有很多小步骤会有很多的迭代,然后落地到 HDFS 中,接下来我们使用 Hive 读取 HDFS 文件,然后数据分析师等人就可以通过 Hive 来进行数据分析,从而得到结果。这就是整个数据开发的流程。
ETL 负责,从 MY SQL 中读取出数字来,然后把数据多张表合为一张表。还有一种使用 ODS 系统从 MY SQL 中读出数据, 直接落地到 HDFS 中,HDFS 表中的内容 和原始表中的内容是一样的,这些数据生成完以后就可以在外部使用Hive 查询生成的数据。
先通过 Spark Streaming 进行 ETL 处理,处理完以后我们把数据放到 HDFS 中,之后外部使用 SQL 或者 Spark 来进行分析,存在的问题是 Spark Streaming 把数据放到 HDFS 这一步非常的不科学,因为 Spark Streaming 是处理的小批量的文件,它的小文件不会全都落地到 HDFS 上,HDFS 的外部有一个 namenote 来进行管理,外部文件要往里面存的时候先找 note,找到 datanote 的地址以后,外部的文件直接把数据推给Kafka的过程,所以 namenote 可以管理多个 dataname。
这种方案的厉害之处在于,对于每个 datanote 的数据进行处理时,可以把计算任务分发到每一个分片中,所以整个过程是一个并行的过程,这说明 HDFS 特别擅长处理批量读取批量分析的存储引擎,但是在这个方案中,产生了很多小文件放到 HDFS 中,这个时候它都不满意,不会利用到 HDFS 的优势。第二个原因,当有很多个小文件的时候,对于 namenote 的负载是不是过于高了,namenote 存储空间很快就满了,就要想一些扩展方案,这将在下节课讲。