开发者学堂课程【大数据Spark2020版(知识精讲与实战演练)第五阶段:Structured_Source_HDFS_案例介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/692/detail/12148
Structured_Source_HDFS_案例介绍
内容介绍:
一、目标和过程
二、案例结构
三、总结
一、目标和过程
1.目标
在数据处理的时候,经常会遇到这样的场景
数据从 MySQL 产生,用 Sqoop 收集到 HDFS 中,使用 Structured Steaming 从 HDFS 中读取文件,放入 HBase 中。
也会遇到这样的情景
Nginx 产生一系列的 log ,通过 Flume 收集,Nginx logs 产生多个文件,经过Flume 放入 HDFS 中,增量以新文件的形式存入 HDFS 中,使用 Structured Steaming 从 HDFS 中读取,放入 HBase 中。
以上两种场景有两个共同的特点。
(1)会产生大量小文件在 HDFS 上
(2)数据需要处理
通过学习,能够更深刻地理解这种结构,具有使用 Structured Streaming 整合 HDFS,从其中读取数据的能力。
2.步骤
(1)案例结构
(2)产生小文件并推送到 HDFS
(3)流式计算统计 HDFS 上的小文件
(4)运行和总结
二、案例结构
1.目标
通过学习了解案例的过程和步骤,以及案例的核心意图
2.步骤
(1)案例结构
(2)实现步骤
(3)难点和易错点
3.案例流程
(1)编写 Python 小程序,在某个目录生成大量小文件
Python 是解释型语言,其程序可以直接使用命令运行无需编译,所以适合编写快速使用的程序,很多时候也使用 Python 代替 Shell
使用 Python 程序创建新的文件,并且固定地生成一段 JSON 文本写入文件
在真实的环境中,数据也是一样的不断产生并且被放入 HDFS 中,但是在真实场景下,可能是 Flume 把小文件不断上传到 HDFS 中,也可能是 Sqoop 增量更新不断在某个目录中上传小文件
(2)使用 Structured Streaming 汇总数据
HDFS 中的数据是不断地产生的,所以也是流式的数据
数据集是 JSON 格式,要有解析 JSON 的能力
因为数据是重复的,要对全局的流数据进行汇总和去重,其实真实场景下的数据清洗大部分情况下也是要去重的
(3)使用控制台展示数据
最终的数据结果以表的形式呈现
使用控制台展示数据意味着不需要在修改展示数据的代码,将 Sink 部分的内容放在下一个大章节去说明
真实的工作中,可能数据是要落地到 MySQL ,HBase ,HDFS 这样的存储系统中
4.实现步骤
step 1:编写 Python 脚本不断地产生数据
(1)使用 Python 创建字符串保存文件中要保存的数据
(2)创建文件并写入文件内容
(3)使用 Python 调用系统 HDFS 命令上传文件
step 2:编写 Structured Streaming 程序处理数据
(1)创建 SparkSession
(2)使用 SparkSession 的 readStream 读取数据源
(3)使用 Dataset 操作数据,只需要去重
(4)使用 Dataset 的 writeStream 设置 Sink 将数据展示在控制台中
Step 3:部署程序,验证结果
(1)上传脚本到服务器中,使用 python 命令运行脚本
(2)开启流计算应用,读取 HDFS 中对应目录的数据
(3)查看运行结果
5. 难点和易错点
(1)在读取 HDFS 的文件时,Source 不仅对接数据源,也负责反序列化数据源中传过来的数据心
Source 可以从不同的数据源中读取数据,如 Kafka ,HDFS
数据源可能会传过来不同的数据格式,如 JSON ,Parquet
(2)读取 HDFS 文件的这个 Source 叫做 FileStreamSource
从命名就可以看出来这个 Source 不仅支持 HDFS ,还支持本地文件读取,亚马逊云,阿里云等文件系统的读取,例如: file://, s3: //, oss : //
(3)基于流的 Dataset 操作和基于静态数据集的 Dataset 操作是一致的
三、总结
1.整个案例运行的逻辑
(1) Python 程序产生数据到 HDFS中
(2) Structured Streaming 从 HDFS中获取数据
(3) Structured Sereaming 处理数据
(4)将数据展示在控制台
2.整个案例的编写步骤
(1) Python 程序
(2) Structured Streaming 程序
(3)运行