Fast, Approximate Analysis of Big Data

The Challenge: Fast, Approximate Analysis of Big Data Computer Scientists have known about these types of queries for a long time, but not much attention was paid to the impact of these queries until the Internet exploded and Big Data reared its ugly head. It has been proved (and can be intuited, with some thought) that in order to compute these queries exactly, assuming nothing about the input stream and, for the quantiles case, without any restrictions on the number of quantiles requested, requires the query process to keep copies of every unique value encountered....

January 19, 2018 · 5 min · 977 words · Me

This is the implementation of 6.824 Lab1 MapReduce

Part 1: Map/Reduce and output What you have to do is to finish the two function doMap() and doReduce() Each call to doMap() reads the appropriate file, calls the map function on that file’s contents, and writes the resulting key/value pairs to nReduce intermediate files. doMap() hashes each key to pick the intermediate file and thus the reduce task that will process the key. There will be nMap x nReduce files after all map tasks are done....

January 19, 2018 · 12 min · 2441 words · Me

Docker introduction

Docker introduction different with virtual machine CONTAINERS Containers are an abstraction at the app layer that packages code and dependencies together. Multiple containers can run on the same machine and share the OS kernel with other containers, each running as isolated processes in user space. Containers take up less space than VMs (container images are typically tens of MBs in size), and start almost instantly. VIRTUAL MACHINES Virtual machines (VMs) are an abstraction of physical hardware turning one server into many servers....

4 min · 788 words · Me

GK 算法简介

GK algorithm introduction 在这里,我们研究了一种算法,该算法可以持续维护汇总信息,并且只需要使用通常需要的一小部分内存就能在小的有界误差范围内回答查询。有许多算法可以解决这个问题,但是我们要研究的是 Greenwald 和 Khanna 在他们的 2001 年的论文 “空间高效的在线计算分位数摘要”。比其他许多算法理解起来要复杂得多,但据我所知,它是空间使用最好的。另外,我们稍后将会研究的其他许多论文将用它来解决有趣的问题。 data structure Greenwald-Khanna(GK 从现在开始)基于一个简单的数据结构。S(n) 这种数据结构包括了一系列排过序的元组,这些元组对应了我们迄今以来观察到的数据的一个子集,对于每个观察到的在 S 中的v,我们维护一个 implicit bound 对于观察点的最大可能的 rank 值和最小可能的 rank 值.令 rmin(v) 和 rmax(v) 分别表示v可能的 rank 的上届和下届.S 包括了 t0,t1,…ts-1 个元组,每一个元组(v,g,Δ)包含了三个元素. vi 表示数据流中实际出现的一个值. gi = rmin(vi) - rmin(vi-1). Δ = rmax(vi) - rmin(vi). 这样,我们可以确保,在任何时刻,最大可能和最小可能都在 description 中.换句话说,v0 和 vs-1 一直表示我们看到的数据流中的最大值和最小值.rmin(vi) = sum(gj),where j<=i. rmax(vi) = sum(gj+Δj),where j<=i ,因此, gi + Δi - 1 是所有数字的上届,sum(gi) = n, 表示所有出现的数字的数量和. 该算法通过相应的插入和压缩算法,以尽量保持尽可能少的元组,同时始终保持对于任何元组我们有 g +Δ<= 2 ε n 的不变量。只要我们能够牢记这一点,算法总会给出正确的ε- 近似的答案。ε的有效值在很大程度上取决于你想要做什么样的查询。例如,如果你想要第 90 百分位数,那么ε= 0....

2 min · 250 words · Me

Go 的定时器的使用

time.Newtimer 函数 初始化一个到期时间据此时的间隔为 3 小时 30 分的定时器 t := time.Newtimer(3time.Hour + 30time.Minute) 注意,这里的变量 t 是 * time.NewTimer 类型的,这个指针类型的方法集合包含两个方法 Rest 用于重置定时器 该方法返回一个 bool 类型的值 Stop 用来停止定时器 该方法返回一个 bool 类型的值,如果返回 false,说明该定时器在之前已经到期或者已经被停止了, 反之返回 true。 通过定时器的字段 C, 我们可以及时得知定时器到期的这个事件来临,C 是一个 chan time.Time 类型的缓冲通道 ,一旦触及到期时间,定时器就会向自己的 C 字段发送一个 time.Time 类型的元素值 package main import ( "fmt" "time" ) func main(){ // 初始化定时器 t := time.NewTimer(2 * time.Second) // 当前时间 now := time.Now() fmt.Printf("Now time : %v.\n", now) expire := <- t....

3 min · 530 words · Me