你的每一次点击行为,是如何变成数据的?| 聊一聊互联网公司的内部数据采集

数据是怎么来的?

在很多行业,数据都是人工收集来的,比如医学疾病数据、环境数据、经济数据等。数据的更新周期也比较长,比如年度、月度。

但互联网行业不一样,这个天然的流量行业,数据量巨大,更新周期按天就算长了,通常有小时级、分钟级、实时秒级,甚至来不及落入表中,直接对实时流数据就进行计算。

最后说的这种「流式计算」,之前介绍过:什么是流式计算 | 另一个世界系列,对数据流实时进行计算,不需要存储到表里,主要为了满足一些实时级的需求,比如实时监控、实时个性化推荐等。

不管是「流式计算」还是存储到表里再计算,总要对数据源进行采集,那么数据源在哪里?我们每天打开APP、浏览网页、点击、下单、支付等等这些行为,是如何落入表中、变成数据的?

这一切都来源于一个叫「日志」的东西,它记录了何时、发生了什么,也即最原始的事件。这些日志信息是数据的源头,互联网公司通过搭建采集框架,把日志变成数据存储在表里,或变成数据流进行流式计算。

日志的采集工作非常重要,收集好数据,公司才能更好的把精力投入在业务价值的挖掘上。(当然我说的是内部的数据采集,外部的数据爬取、购买的第三方数据,不在本文讨论范围之内)

各大互联网巨头都开发了自己的日志采集系统,如 Apache 的 chukwa,Facebook 的 Scribe,Cloudera 的 flume,Linkedin 的 Kafka, 这几个是目前比较流行的开源日志收集框架,国内公司360使用的是基于 Scribe 的日志收集系统,阿里使用的是自己的 TT(TimeTunel)。

这里主要介绍一下 chukwa 和 Scribe,尽量用简单的语言来让大家明白其架构思想:

1、chukwa

chukwa 是 Apache 的开源项目,作为 Hadoop 系列产品之一,使用了很多 Hadoop 的组件(用HDFS存储,用MapReducec处理数据),完全继承了Hadoop的扩展性和稳定性。

chukwa包括了一系列组件,用于监控数据,分析数据和数据可视化等。 架构图如下:

(图片源于http://dongxicheng.org/search-engine/log-systems/)

(1)HDFS

  • HDFS 是 Hadoop 分布式文件系统,chukwa采用了 HDFS 作为存储系统。
  • HDFS 支持大文件存储、小并发高速写的应用场景。

然而问题是,日志系统的场景正好相反,需要高并发、低速写大量的小文件。系统中的 Agent 和 Collector 也是为了满足这样的支持。

(2)什么是 Agent

  • Agent 是驻守在各个节点上的负责收集数据的程序。
  • Agent 又由若干 adapter 组成,adapter 运行在 Agent 进程以内,执行实际收集数据的工作,而 Agent 则负责 adapter 的管理,包括启动和关闭 adaptor。
  • Agent 将数据通过 HTTP 传递给 Collector

(3)什么是 Collector

  • Collector 收集各个 Agent 传来的数据,合并后,将这些数据写入 HDFS。
  • 然后由 Map-Reduce job 进行数据的预处理。

实际上,chukwa 的效率并不高,因为它并不是单纯的日志收集工具,而是包含了数据的分析处理、可视化等功能的完整数据框架。但是,数据收集和数据分析俩大任务在优化目标上并不相同甚至一定程度上是相悖的。这样会影响到对数据的收集效率。

很多人认为,这样还不如只专一的做数据收集,把数据分析等交给其他成熟的框架来实现,也因此chukwa并没有被广泛的使用。

2、scribe

Scribe 是 Facebook 的开源日志收集系统。它主要思想是「分布式收集,统一处理」,从各种日志源上收集数据,存储到一个中央存储系统中。框架如下:

(Scribe 架构图1 来源于http://dongxicheng.org/search-engine/log-systems/)

(Scribe 架构图2 来源于网络,侵删)

具体而言,在分布式系统中,每一个节点都会部署 scribe 服务(local scribe server),收集此节点的日志信息,并将其发送给scribe中央服务(central scribe server)。

Scribe 的一个重要优点是容错性。节点信息发送给 scribe中央服务之后,如果中央服务系统挂!了!(crash),怎么办?

此时本地的 scribe服务就会将信息写到本地磁盘,当中央服务可用时重新发送。 scribe中央服务将数据写入到最终的目的地。是不是很机智!当然,在一些特点情况下,Scribe 也会丢失数据,比如:

  • 如果客户端scribe服务崩溃, 会造成内存中的少量数据丢失,但磁盘数据不会丢失。
  • 客户端的scribe既不能连接到本地文件系统,也不能连接到scribe中央服务器,这种情况除非神仙来了!
  • 多种情况并发,如重发服务无法连接到任何的中央服务器,而且本地磁盘已满,这种情况神仙来了也没办法了!

本文分享自微信公众号 - 数说工作室(shushuojun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

机器学习算法究竟需要试验多少次,才能有效反映模型性能?

编者按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI 研习社编译。文中相关链接详见文末“阅...

30260
来自专栏IT派

入门十大Python机器学习算法

今天,给大家推荐最常用的10种机器学习算法,它们几乎可以用在所有的数据问题上: 1、线性回归 线性回归通常用于根据连续变量估计实际数值(房价、呼叫次数、总销售...

53050
来自专栏AI研习社

英伟达内训的深度学习是什么样?AI 开发者有必要亲身体验

作为一名 AI 技术从业者,你是否经常遇到这样的问题: 好不容易搞懂了一种 AI 算法,代码也写好了,结果 CPU 算力吃紧,跑不起来; 好不容易入门了一种开源...

43950
来自专栏AI研习社

AlphaGo战胜世界第一棋手,一页核心算法总结必胜秘诀

AI研习社按:本文作者夏飞,清华大学与卡内基梅隆大学毕业,现于谷歌从事技术研发工作。本文是对《自然》上发表的知名论文 “Mastering the game o...

41580
来自专栏AI研习社

一文详解神经网络 BP 算法原理及 Python 实现

最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能力有限,若有明显错误,还请指正。 什么是梯度下降和链式求导法则 假设我们有一个函数 J(w...

66850
来自专栏AI研习社

从理论到实践,一文详解 AI 推荐系统的三大算法

介绍 背景 随着互联网行业的井喷式发展,获取信息的方式越来越多,人们从主动获取信息逐渐变成了被动接受信息,信息量也在以几何倍数式爆发增长。举一个例子,PC时...

49070
来自专栏数说工作室

金融数据挖掘之朴素贝叶斯

你和我之前的人生, 就像是来自同一个分布族的共轭曲线, 即使有各自的参数空间, 也注定要相识相念。 你和我之后的人生, 是我们相扶相持下不离不弃的最大似然, 用...

398100
来自专栏IT派

编程 | 2017年最受欢迎的10个编程挑战网站

编程几乎已经成为了人类所知每个行业的必要组成部分,如今有越来越多的人开始了他们的编程之旅。 如果你正在在学习编程,那么我可以告诉你一个提高技能的好方法,那就是...

45460
来自专栏数说工作室

【概率论-上帝的赌术】第三话:正态分布,众生的百态

本系列是数说君去年10-11月发布在微博上的漫画趣文,本次发布的微信的版本经过了一些修改,供大家回顾。本系列旨在趣解一些基本概率和统计知识,非学术探讨,不能替代...

45770
来自专栏量子位

AI有了更强的想象力!DeepMind又立功了 | 附两篇新论文

陈桦 编译自 DeepMind Blog 量子位 报道 | 公众号 QbitAI ? 人类,可以在行动之前预想到后果,这是我们认知能力中一种强大的工具。 举例来...

34260

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励