本文节选自艾叔即将出版的图书《Spark大数据编程实用教程》
上一节介绍了大数据的开发过程,如图1-1所示。
图 1-1大数据开发通用步骤图
后续,将依次介绍大数据开发过程中,各个阶段所涉及的具体技术。
本节介绍“大数据采集”阶段所涉及的技术。
1. 大数据采集技术的特点
和传统的数据采集技术相比,大数据采集技术有2个特点:
(1)大数据采集通常采用分布式架构
这是因为,大数据采集的数据流量大,数据集记录条数多,传统的单机采集方式,在性能和存储空间上都无法满足需���。
(2)多种采集技术混合使用
这是因为大数据不像普通数据采集那样单一,往往是多种数据源同时采集,而不同的数据源对应的采集技术通常不一样,很难有一种平台或技术能够统一所有的数据源,因此大数据采集时,往往是多种技术混合使用,要求更高。
2. 大数据采集技术按数据源分类
大数据的采集从数据源上可以分为四类:
-
Web数据(包括网页、视频、音频、动画、图片等)
-
日志数据
-
数据库数据
-
其它数据
不同的数据源对应不同的采集技术,如图1-2所示。
图 1-2大数据采集技术分类图
3. 大数据采集技术按知识层次分类
根据上图内容,对大数据采集技术按照知识层次进行分类,如下所示:
(1)数据采集相关的基础知识
包括操作系统的相关知识和操作,如Linux基本使用等,因为采集程序和被采集的对象都是运行在操作系统上的,必须要有相应的基础知识;
TCP/IP网络协议原理,因为所有采集数据的传输和存储都是通过网络的,因此了解相应的网络传输协议是必须的;
Http相关协议,Web数据的采集是通过HTTP协议完成的,还需要有HTML,CSS等Web相关知识;
数据库原理及SQL操作,这个是采集数据库数据所必须的;
数据提取清洗技术,基本的数据格式,如CSV、JSON等常见格式以及它们的转换操作是必须掌握的;
HDFS和HBase的运行机制和基本操作,分别用于结构化和非结构化海量数据的存储;
由于大数据采集的架构通常是分布式的,因此,在开发专门的采集程序时,还需要有分布式应用开发的基础,如自定义网络协议、网络异常处理、应用间的同步与异常处理等。
(2)常用的数据采集工具
不同的数据源对应不同的采集工具,也可能多个数据源可以用同一个采集工具。
例如,Flume可以采集数据库和日志数据。但是,很难有一种工具能覆盖所有的数据源。
因此,不同的采集需求,需要掌握不同采集工具的使用。
如果是采集数据库、日志文件,则涉及Flume、Fluentd等工具。
如果是采集web页面,则涉及HtmlUnit/webmagic等爬虫框架,同时还涉及反爬虫技术。
此外,如果要实现大规模的数据采集、分发、订阅,还需要Kafka等组件。
(3)Shell脚本
和采集工具相比,Shell脚本采集数据更为灵活,和Python相比,Shell脚本更方便,开发简单、效率高。
因此,在能满足需求的情况下,完全可以采用Shell脚本快速完成数据的采集,在数据量大的情况下,可以使用Shell脚本采集部分数据,快速完成原型验证。
很多资料提到数据采集,言必称Python,使用Python进行数据采集似乎更高级。但是,我们要清楚,Python也好,Shell脚本也罢,它们都只是实现数据采集的一个工具而已,技术选型应以“满足需求”为第一要务,哪种语言能够以最简单地方式达到目的,就选它。
(4)编程语言
在采集工具和Shell脚本都无法满足需求的情况下,就需要使用编程语言来编写特定的采集程序了。
常用的编程语言有:Python、Java、Scala等,当然,不仅限于此,其它的编程语言只要能达到同样的目的皆可。
就Python、Java和Scala而言,除了基础语法、基本数据类型、控制结构等知识点外,还涉及网络编程、I/O文件等接口。
这些语言都提供了丰富的函数库资源用于采集数据,例如各种数据格式的转换、数据库连接访问、网络传输、应用层网络协议库等,这些也是所涉及的技术;
此外,采集的数据要通过API调用存储到分布式存储中,因此,诸如HDFS、HBase的读写接口也是所涉及的技术。
自己编写采集程序是最为灵活、可控的方式,基本上只要数据源采集的通道打通了,后续的采集就不成问题。
但是,这也是最耗时、门槛最高的一种方式,尽管每门语言提供了丰富的函数库,但仍然需要我们自身编写逻辑,把这些库函数组合利用起来,同时,如果是分布式架构的话,还要考虑处理分布式系统中的通信、同步、一致性,以及各类异常处理等问题,因此,工作量是很大的,在技术选型时要慎重考虑。
艾叔大数据系列
推荐:和艾叔一起学:Docker+Hadoop企业级项目实战
新公众号,没法留言,如果你想和艾叔交流的话,可扫码私信,咱们微信见!
Ps:艾叔不是高手,也不是牛人,编程的道路上,走了很多弯路,也踩了很多坑,如果你也和艾叔当年一样,欢迎关注公众号。
如果你觉得本文有用,请分享给需要的人。
你的分享和点赞,是对艾叔最大的支持和鼓励,