你好,游客 登录
背景:
阅读新闻

艾叔:最全【大数据采集技术】总结

[日期:2019-07-21] 来源:  作者: [字体: ]

本文节选自艾叔即将出版的图书《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企业级项目实战

为何我自学大数据这么久,效果却不好呢?

什么样的数据可以称为“大数据”?

大数据开发的通用步骤

Python or Java? 真的没有那么重要

如何理解Scala的函数式编程

艾叔,我的两台虚拟机咋就通不了呢?

明明是按书上的步骤一步步来的,为什么还总出错?


新公众号,没法留言,如果你想和艾叔交流的话,可扫码私信,咱们微信见

Ps:艾叔不是高手,也不是牛人,编程的道路上,走了很多弯路,也踩了很多坑,如果你也和艾叔当年一样,欢迎关注公众号

如果你觉得本文有用,分享给需要的人。

你的分享点赞,是对艾叔最大的支持和鼓励

收藏 推荐 打印 | 阅读:
相关新闻