Spark存储机制分析

Background

Apache Spark是最近非常火热的一个分布式计算框架,计算速度远快于Hadoop。Spark计算性能优秀的一个秘密在于它会将相当的计算结果缓存在内存中而不是直接写入硬盘,而它的RDD结构设计又决定了它会大量利用到缓存的数据。今天我就打算对Spark的存储部分进行分析,分析的主要着重点在于它的缓存策略,多机之间的通信部分不会过多涉及。

相关类概述

RDD是用户实际操作的类,也是缓存机制的入口,CacheManager类是RDD和实际查询之间的中间层,一方面将RDD的信息传递给BlockingManager,一方面保证每个节点不会重复读取RDD,提供并发控制。BlockingManager类提供了实际的查询接口,通过MemoryStore、DiskStore和TachyonStore三个类管理具体的缓存位置。

写huasio库的心得

寒假里我了解了一下node.js,感觉它的全异步设计很好玩,于是就系统地学习了一下有关异步编程的知识,
同时大概了解了一下node.js的底层实现————libuv的设计。libuv是个基于事件驱动模型的库,异步部分使用libeio编写。
之前我就了解过一些linux平台上异步IO的情况,可惜linux原生的aio很不完善,glibc里面的异步库bug也很多。出
于好奇和好玩,我打算参考一下libeio自己实现一个。

【翻译】提高你对C++11和C++14使用能力的42条准则

原文在此,如有版权问题请迅速联系我,我会立刻删除。

1.了解模板的类型推断机制。
2.了解auto的类型推断机制。
3.了解decltype
4.知道怎样查看推断出的类型。
5.在显式类型声明时优先使用auto
6.当auto无法推断出想要的类型时使用显式声明类型的初始化器。
7.在创建对象时区分(){}.
8.优先使用nullptr而不是NULL0.
9.优先使用别名声明而不是typedef
10.优先使用枚举类来代替原来的枚举类型。
11.在不需要一个成员函数时使用delete而不是将其定义为私有成员函数。
12.在声明重写函数时使用override

【翻译】关于Go和Erlang的一些看法

原文在此,本翻译仅供学习与参考,如有侵权请联系我,我会迅速删除。

更新:我发现我这篇文章的观点写得不是很明确。我没有说Go语言多么不好或者说它应当改得更像Erlang。我想说的是,Go语言选择的语言特性使它在对高可用性、高并发低延迟有要求的服务器端应用场景下无法代替Erlang。同时请注意,我没有写有关类似的Julia语言的内容。我听说Go语言被广泛宣传为——不仅仅是应用于新的项目,而且是在重写旧项目时——可取代Erlang的选择。没有人会用这个口号来宣传Julia,但是Go和Node.js往往像这样被某些人宣传为一个更合适的选择。另外,我也没有说Erlang是万金油!这篇文章仅仅针对某些适合Erlang而不适合Go的场景来说的。

【翻译】生活在没有泛型的Go语言世界里

原文在此,本翻译仅供学习与参考,如有侵权请联系我,我会迅速删除。

许多不必要的忙乱的工作是Golang特性的缺乏所造成的。一旦关于Golang的话题在Reddit或HackerNews上出现,那些热衷于五花八门的特性的黑客们便会因为这种极简语言的存在而表现出前所未有的愤慨。在这篇文章中,我会解释一种用于取代Golang所不具备的特性————泛型————的简单方法。

有许多使用泛型的理由,然而在其中99%的情况下使用Golang的内建类型(比如slice和map)或是面对对象的模式就已经足够了。这篇文章讨论的是那1%的情况————你需要一个类型安全的链表、栈或是其他数据类型同时你又不想为每个具体的类型维护一个不同的结构。

【翻译】为什么我的数据库变得这么慢?

这是原文,本翻译仅供学习与参考,如有侵权请联系我,我会迅速删除的。

本文将教你如何与降低数据库性能的敌人们较量,以及如何避免使你的数据流停滞在泥沼中。

随着数据的增长,性能会有所下降——这并不是什么秘密,但是幅度经常十分惊人。

如果这是一个常见的问题,那么理解“数据库速度下降”的底层原因就十分有必要,因为这可以使你尽早发现性能下降的预兆并加以预防。具体来讲,你需要了解数据库性能的三大敌人。

这些“敌人”是我在职业生涯中遇到的最常见的一些问题,正确处理这些问题能常常能使你在许多情况下避免遭遇数据库性能下降的境地。

【翻译】设计线程安全的数据结构的几条准则

译者注:这篇文章来自《C++ concurrency in action》chapter 6.2, 仅供学习参考

就像我之前提到的,在设计支持并发访问的数据结构时往往有两方面需要考虑:确保这些访问是安全的,同时确保这个数据结构支持真正的并发访问。使数据结构线程安全化的一些基础知识在第三章中讲过了。

有的状态的不变性会被其他线程的行为打破,确保没有线程会遇到这样的状态。
通过提供完成整步操作而不是分步操作的函数作为接口,来避免数据结构的接口可能导致的潜在的竞态条件。
通过留意数据结构在出现异常的表现来确保不变性不会被打破。
压缩上锁的范围,避免嵌套锁的使用,这样可以减小出现死锁的可能性。

About my blog

Yesterday Brother Hao showed us his simple blessing website for his GF(it’s really romantic!!!), then I decided to build my own blog .

En…Actually I planned to build one during the summer vacation, but as we all know I’m very lazy…At that time I want to implement the website with Python(Django or Flask). This time I need a more easier way. After investigating many other projects, I chose Hexo eventually.

The theme of my blog is light-jimliu, it’s a mature and convenient theme extending light, it has already integrated many useful widgets.

My blog is hosting on Github, so it has another Github page address.

The domain name was bought from godaddy, I buy it for 3 years, which only cost me less than 180 CNY, so I think it cheap. The DNS service is provided by DNSPod, it’s free.

BTW, I register a domain email, which is related with my QQ email.