大数据从哪里来?
现代商业市场是一个数据驱动的环境,可以说不论技术怎么更新换代,数据都有着不可替代的地位,而且抛开数据谈大数据就是瞎扯,没有数据作支撑的大数据平台就是一个空壳。无论是公司内部的数据还是外部的数据都可以构成我们大数据平台的来源数据,大数据平台的数据来源主要有数据库、日志、前端埋点、爬虫。
1 从数据库导入
在大数据技术风靡起来前,关系型数据库(RDMS)是主要的数据分析与处理的途径。发展至今数据库技术已经相当完善,当大数据出现的时候,行业就在考虑能否把数据库数据处理的方法应用到大数据中,于是 Hive、Spark SQL 等大数据 SQL 产品就这样诞生。
虽然出现 Hive 大数据产品,但是在生产过程中业务数据依旧使用 RDMS 进行存储,这是因为产品需要实时响应用户的操作,在毫秒级完成读写操作,而大数据产品不是应对这种情况出现的。到这里你可能就有一个疑问,如何把业务的数据库同步到大数据平台中?一般来说业务数据我们使用实时和离线采集数据来将数据抽取到数据仓库中。然后再进行后续数据处理和分析,一些常见的数据库导入工具有 Sqoop、Datax 和 Canal 等。
Sqoop 是 Apache 旗下一款 Hadoop 和关系型数据库之间传送离线数据的工具。实现关系型数据库(MySQL 、Postgres 等)同 Hadoop 集群的 Hdfs、Hbase、Hive 进行数据同步, 是连接传统关系型数据库和 Hadoop 的桥梁。datax 与 sqoop 类似也是进行离线数据传输,支持阿里数据库系列数据同步。
Canal 则是通过读取 MySql的 BinLog 日志 实时传输数据到大数据平台,实现数据的实时介入。
2 日志导入
日志系统将我们系统运行的每一个状况信息都使用文字或者日志的方式记录下来,这些信息我们可以理解为业务或是设备在虚拟世界的行为的痕迹,通过日志对业务关键指标以及设备运行状态等信息进行分析。
Apache Flume 是大数据日志收集常用的工具。从图中可以看出 Flume 运行的核心是 Agent,以 Agent 为最小的独立运行单位。Agent 主要由三个组件:Source,Channel、Sink。
Source: 收集数据,封装数据为事件(Event)后发送到 Channel,数据来源可以是企业服务器、文件系统、云、数据存储库等。
Channel: 通常,读取速度比写入速度快。因此,我们需要一些缓冲区来匹配读写速度差异。基本上,Channel 提供一个消息队列的功能,用于存储 Source 发送的事件,对事件进行消息排序,发送到 Sink。
Sink: 从 Channel 收集数据,将数据输送大数据存储设备,比如 HDFS、Hive、Hbase 等,Sink 也可以作为新的 Source 输入源,两个Agent 进行级联,根据需求开发各种处理结构。
3 前端埋点
为什么需要埋点?现在的互联网公司越来越关注转化、新增、留存,而不是简单的统计 PV、UV。这些分析数据来源通过埋点获取,前端埋点分为三种:手工埋点、可视化埋点、自动化埋点。
手工埋点:
前端需要返回数据的位置调用写好的埋点 SDK 的函数,按照规范传入参数通过 Http 方式传入后代服务器中。这种方式可以下钻并精准采集数据,但工程量巨大。
自动化埋点:
也叫无埋点,即是无需埋点,在全部位置都设置埋点,对用户所有操作进行采集,这种方式通过统一的 SDK 返回数据,再选择需要的数据进行分析,这种方式加大服务器的压力,采集许多不需要的数据,浪费资源。在实践中,可以采用对部分用户或者部分简单操作页面进行全埋点采集。
可视化埋点:
是介于手工埋点和自动化埋点之间方式,通过可视化交互设置埋点,可以理解为人为干预的自动化埋点形式。
那如何选择埋点方式?对于一个按钮,如果采用可视化埋点或者自动化埋点时,可以轻易采集用户何时点击按钮,对于需要运行获取获得的数据是无法采集,比如订单的商品详细信息等,对这种情况应该采用手动埋点处理采集。对此,埋点问题不应该通过单一的技术方案来解决,在不同场景下我们需要选择不同的埋点方案。
4 爬虫
时至至今, 爬虫的数据成为公司重要战略资源,通过获取同行的数据跟自己的数据进行支撑对比,管理者可以更好的做出决策。而且越难爬虫获取竞争对手的数据,对于公司来说是越有价值。
小结
数据采集本身不是目的,只有采集到的数据是可用、能用,且能服务于最终应用分析的数据采集才是根本。数据采集的科学性决定了这个数据分析报告是不是有使用价值。只有当数据采集具有科学性、客观、严密的逻辑性时,建立在这样的数据分析基础之上的的出来的结论才具有现实的价值和意义。
更多干货,欢迎关注公众号,哈尔的数据城堡,关注免费领取学习资料~