Batch Processing (1) - Batch Processing with Unix Tools

Batch Processing

从去年开始写 本系列文 开始到现在,我们着墨的都是现代系统的样子,你发送 request 或送一个查询,然後系统回给你 response 或结果,像资料库、快取服务器、搜寻引擎、web 服务器、API 服务器等等,这些都可视为 在线系统 (online system),依据这个分法,我们可把系统区分成:

  • Services (online systems)

    就是开头写的那样子,服务处理的速度越快越好,所以 回应时间 (response time) 通常是测量效能的指标。

  • Batch processing systems (offline systems)

    批次处理系统 (batch processing system) 处理大量的资料,然後产出一些资料,处理工作时间从几分钟到几天都有可能,所以它的效能指标是 吞吐量 (throughput),同样时间内能处理多大的资料,这也是这几天要讨论的主题。

  • Stream processing systems (near-real-time systems)

    串流处理系统 (stream processing system) 介於 online 和 offline 之间,所以称为 接近即时 (near-real-time) 系统,串流处理主要是 消费 (consume) 和 生产 (produce)(而不是 request 和 response),另外串流作业是建立在批次处理之上的,我们应该会在 Day 28 开始介绍。

批次处理系统也是需要符合 Reliable、Scalable 和 maintainable 原则的 (2020 Day 2),所以这几天会探讨多种批次处理的方法,而主角就是捧红大数据的 MapReduce ,在这之前先来看看如何用标准 Unix 工具做资料处理吧,今天的重点就是了解 Unix 哲学,带领我们往更大规模的分散式系统前进。

使用 Unix 工具做批次处理

如果你有 nginx 的 log 长这样:

93.180.71.3 - - [17/May/2015:08:05:32 +0000] "GET /downloads/product_1 HTTP/1.1" 304 0 "-" "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"

你要如何透过 Unix 的工具做次数计算的统计分析呢?

范例资料可以从这里下载

Simple Log analysis

Unix 底下其实有很多好用的工具,若你想知道网站前 3 名的 URL 是什麽,你可以在 Unix shell 中写:

cat nginx.log 		|
awk '{print $7}'  | 
sort 							|
uniq -c 					| 
sort -r -n 				| 
head -n 3

由上到下它总共做了这些事:

  1. 读取 log 档案
  2. 将每一行用空白分隔,然後输出 URL。
  3. 使用 sort 以字母顺序做排序,所以一样的 URL 会排在一起。
  4. uniq 能去重除重复的行,加上 -c 选项能输出每个去重复 URL 後的次数,输出长这样 21104 /downloads/product_2
  5. 再使用 sort 排序一次,因为次数在前,所以加上 -n 以次数数值排序,再用 -r 做反向排序。
  6. 列出前 3 名。

结果长这样:

30285 /downloads/product_1
21104 /downloads/product_2
  73 /downloads/product_3

Unix 哲学

在用 Unix 分析 log 的案例中,我们使用 管线命令 (pipe) | 将所有命令串连起来,Unix pipe 的发明者 Malcolm Douglas ,在 1964 年第一次这样描述它:

We should have some ways of connecting programs like [a] garden hose—screw in another segment when it becomes necessary to massage data in another way. This is the way of I/O also.

我们应该要有一些把程序像园艺软管那样连接起来的方法,当需要以另一种方式处理数据时,就拧入另一个程序片段,这也是 I/O 的方式。

这个把程序当水管连接的想法也就成为 Unix 哲学的一部份。

透明度和易於实验

Unix 工具成功的一部份原因是它们很容易看到正在发生的事情:

  • Unix 的档案输入通常都是不可变的,这意味者你能执行多个命令却不会损害输入档案。
  • 你可以在任何一个地方结束管线命令,然後马上看到结果,这也让工程师易於 debug。
  • 很好做管线命令的阶段性输出,然後当下一个管线命令阶段的输入。

虽然 Unix 工具跟优化过的资料库查询相比,显得直率、简单,但它们仍然很有用,尤其是你想做实验观察资料的时候。

然而,Unix 工具最大的限制就是你只能在单台机器上执行,所以这也让像 Hadoop 这样的工具有用武之地。


<<:  Day9 Html常用标签_4

>>:  Day 10 [Python ML、特徵工程] 特徵生成

Day_08 有线网路应用(一)

延续昨天Day_07 有线网路应用(一)进度 讨论一些我遇到的问题与细节补充。 Troublesho...

Day7 HTML 区块标签:div、span

区块元素(div) HTML是网页的骨架,架构出来,再用CSS来对网页进行美化,如果希望某段落的一两...

Day 06 - 私有云VPC设置

今天我们来研究看看私有云VPC吧 VPC的价值: 懂得如何运用VPC,提供我们一套更好的安全机制,来...

Day 18: Behavioral patterns - Chain of Responsibility

目的 当一个行为需要经过多道步骤时,可以将步骤串在一起。 说明 该模式常见於两种情境: 行为不一定一...

立委名单/提案 Open Data / CsvToBean - day23

目标 今天写个时事题,我们来查询立委议案提案 本日重点 立法院 Open Data 如何将 CSV ...