数据分析的七种武器

2018-09-08 Mithrilwoodrat 更多博文 » 博客 » GitHub »

原文链接 http://woodrat.xyz/2018/09/08/seven-weapons-of-data-analysis/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


在日常的工作过程中,我们常常会遇到各种需要分析数据的场景,简单的比如说统计今天服务访问中有多少请求的 status_code 是 500,或是从几天的后台服务 log 中寻找特定的 log 来定位错误。复杂的情况下可能涉及到多天的数据聚合发现异常,或是从实时日志中统计用户信息,甚至是从TB、PB级别的数据中检索、聚合出需要的信息。

根据数据量的大小,处理的复杂度,和需求的实时性要求我们需要使用不同的工具和框架来完成我们的工作。

在对少量数据,例如日志数据进行离线分析的时候,我们可以使用 Shell 中的 cat、grep、awk、sed、uniq、sort 等命令完成一些基本的统计和分析工作。

针对存储在数据库中的数据,一般而言大小为 1 TB 以内。我们可以编写 SQL 语句来分析。

对于大量的,需要近实时分析的热数据,我们可以使用 ELK 组件来构建我们的数据分析流程。

对于实时性要求更高的统计分析任务,就需要用到 Storm、Spark Streaming、 Flink 等实时分析组件之一来处理了。推荐使用 Flink ,其支持的 Flink SQL 可以避免很多开发定制工作。

对于数据量大,并且时间区间较长的数据,在不需要快速分析的情况下,使用 ELK 消耗的存储和计算资源可能无法接受。这时候就需要祭出 Hadoop 了。对于数据分析工作,最常用的是基于 Hadoop 的 Hive,HiveQL 在很多程度上写起来和 Sql 类似,虽然他们的实现方式不尽相同。近几年 Spark SQL 也比较流行,哪种跟合适需要根据分析所需要的功能和所在公司对不同组件的支持程序来决定。

如果场景复杂到使用上面单一的工具或者组件已经无法处理,需要根据需求组合使用上面的工具,或者使用 PySpark 自行定制分析任务。

在分析的过程中,选择合适的工具固然重要,但更主要的是要明白业务场景,即有什么类型的数据、为什么要分析、需要满足什么需求。

接下来的几篇文章中,我们将一一了解上面提到的各种工具。

数据分析的七种武器(1)--Shell