2018年二月份总结与三月份计划

Posted by AlstonWilliams on February 17, 2019

转眼一个月过去了.

看看月初立下的flag,完成度怎么样.

二月份,立下的flag,都有这些:

  • 深入阅读MapReduce和YARN的源码
  • 挖掘MapReduce和YARN可以进行性能优化的地方
  • 修改Hadoop的源码,目前想到的有:
    • 在Reducer阶段,可以根据Value进行排序
    • 让Hadoop可以输入不同Job的结果到相同的目录,即如果Job的输出目录已经存在的话,也可以输出,并不会报错
  • 总结MapReduce和YARN的源码,并写成文章发表出来
  • 对Hadoop进行性能测试
  • 阅读《Linux Performance and Tuning Guidelines》,加深对Linux的理解,增强对Linux进行性能调优的能力
  • 阅读完《编程大师访谈录》

其中完成的有:

  • 深入阅读MapReduce和YARN的源码
  • 挖掘MapReduce和YARN可以进行性能优化的地方
  • 阅读《Linux Performance and Tuning Guidelines》,加深对Linux的理解,增强对Linux进行性能调优的能力
  • 阅读完《编程大师访谈录》

未完成的,以及未完成原因有:

  • 修改Hadoop的源码.未完成的原因为,时间不够,以及对想到的修改点失去了兴趣
  • 总结MapReduce和YARN的源码,并写成文章发表出来.未完成的原因为,时间不够.以及到了二月末才对YARN的工作流程整理清楚.
  • 对Hadoop进行性能测试.未完成的原因为,认为完整的对Hadoop进行测试需要很多时间,每一个性能优化点都需要进行多次测试.而我回到上海,就已经是24号了,并且那时YARN的源码还有一部分没有看,就暂时搁置了.

这个月阅读的书籍并不多,大多都是指南,手册性质的.

技术方面,主要阅读了这么三本:

  • 《Linux Performance and Tuning Guidelines》.这个是IBM出的一本Redpaper.非常不错.之前一直非常纠结,我要如何知道怎样从系统层面进行优化,以及优化背后的原理.偶然看到这本Redpaper,读了下来,发现这本Redpaper刚好弥补了这个缝隙,优化点以及其背后的理论的缝隙.这本Redpaper从CPU,内存,硬盘,网络等方面,介绍了一些常用的优化技术.从这本书中,也看到一些新的东西,比如NUMA,THP等,之前都没有接触过.但是,由于这本书Redpaper篇幅并不多,总共才170页,所以,很多其他优化的手段都没有讲到.感觉作为入门使用,还是蛮不错的.
  • 《Hadoop Performance Tuning Guide》.这是AMD写的一份手册.这份手册总共才20几页,但是对于常用的Hadoop的优化手段都有介绍.
  • 《Optimizing Hadoop for MapReduce》.这本书的篇幅也不多,总共才不过120页.但是,书中非常详细的介绍了各种Hadoop的性能优化的手段.覆盖MapReduce的各个阶段.书中也从一些实例出发,告诉我们如何选择Mapper和Reducer的数量等.

除了读书,通过公司的小练习,对HBase,Spark以及Scala的理解也深了一些.

非技术方面,主要把《编程大师访谈录》以及《未来简史》读完了.

《编程大师访谈录》这本书,越往后读越没劲,你会发现,记者提问的问题都差不多,他们的回答也都差不多.读了2/3左右,并没有发现什么特别受用的内容,于是后面的内容索性就直接不读了.

《未来简史》这本书,非常有趣.这本书的作者,还写了另外一本书,就是大名鼎鼎的《人类简史》.在《未来简史》这本书中,作者设想未来,人会变成机械人,即人和机器结合.这是非常可能出现的事情,现在就已经有一些放在人体内,监测人体各项指标的芯片了.这本书还从一个非常新颖的视角,探索了一些有趣的问题.比如,人到底比其他动物高级在哪里?宗教的本质是什么?人有没有灵魂?我们居住的这个世界,是否就是真实的世界?

其实很多问题,很多时候,我也会思索.比如,人有没有灵魂?我们居住的世界,是否是真实的世界?有的时候,还会觉得自己是不是有心理疾病,竟然会思考这种问题,而且往往自己的看法与世界的普遍看法不一致.

对于人有没有灵魂这件事,我认为人是有灵魂的.因为仅靠我们大脑中的那些脑细胞以及神经元,就能让我们能够思考,能够让我们有喜怒哀乐,我觉得是不可能的.

同样,对于我们居住的这个世界,是否就是真实的世界,这件事情.我也非常怀疑.我们是否就如我们玩的游戏一样,只是游戏里面的一个NPC,而我们混然不知?我不知道,但有的时候我会认为,可能就是这样.

仔细思考计算机,并思考人类,我发现人类其实和计算机之间,有惊人的相似之处.你看,计算机需要能源,电,而我们需要的是空气,以及靠饮食摄入的能量.计算机内部,是通过电流,进行数据的传递,而我们人体内部,通过血液传输一些物质.我们人类,对一些事情,会记得很牢,对最近发生的一件事情,又会记忆比较模糊.这像不像硬盘和内存?最近发生的事情,先保存到类似一个内存的区域里,然后,根据我们回想的次数,决定是否保存到一个类似硬盘的区域里,供我们以后进行回忆.

也有一些科学实验,给参加实验的人,这些人大多数都是患抑郁症的人,给他们一种头盔,我记得好像是一种头盔.这种头盔的作用就是,刺激脑部的相应区域,让大脑中产生高兴的信号.结果,这些参加实验的人,戴上头盔的那段时间,都说他们非常快乐.而唯一的一个例外,还是因为头盔上的电池没电了.

也就是说,其实你做的任何行为,就比如,你决定现在趴在地上,在地上打滚.看似是非常随意的举动,非常随意的想法,是你确实就是想这么做的.但是,实际上,只不过是大脑中的某些区域,受到某种刺激,而产生的一个信号而已.你以为你是独立思考,其实并不是的.

再看DNA.一个人,能长多高,长的漂亮不漂亮,是否会患癌症等,这些其实在一个人一下生就决定了.都由我们的DNA,我们的基因决定了.

再对比一些其他的方面,你就会发现,人跟机器,很多方面实在太像了.

所以,有的时候我也会悲观的认为,自己或许只是游戏里面的一个NPC,整个世界可能都只是一个游戏而已.

但是,也会安慰自己,管他是不是游戏,是不是NPC,既然在这个世界里,就按照这个世界的规则去做,结婚生子,努力挣钱,孝敬父母.

读完了《未来简史》,就找了一本其他的书籍-龙应台的《目送》.

《目送》这本书,文字非常优美.书中的各个小故事,基本上都是围绕着亲情来写的,也会穿插一些其他的小故事,来表达出作者其他的感悟.

读到有的句子,会有种幡然醒悟的感觉.有的句子,会有种似曾相识的感觉,你会明白,你早就懂得这个道理,只是一直没有说出来,写出来而已.

这里先摘录几句感同身受并且读到时,会泪眼模糊的句子:

我慢慢地、慢慢地了解到,所谓父女母子一场,只不过意味着,你和他的缘分就是今生今世不断地在目送他的背影渐行渐远。你站在小路的这一端,看着他逐渐消失在小路转弯的地方,而且,他用背影默默告诉你:不必追。

有些事,只能一个人做。有些关,只能一个人过。有些路啊,只能一个人走。

我们拼命地学习如何成功冲刺一百米,但是没有人教过我们:你跌倒时,怎么跌得有尊严;你的膝盖破得血肉模糊时,怎么清洗伤口、怎么包扎;你一头栽下时,怎么治疗内心淌血的创痛,怎么获得心灵深层的平静;心像玻璃一样碎了一地时,怎么收拾?

有一种寂寞,身边添一个可谈的人,一条知心的狗,或许就可以消减。有一种寂寞,茫茫天地之间余舟一芥的无边无际无着落,人只能各自孤独面对,素颜修行。

每一句话,都深深的刺痛我的心.

想想这么多年,我们何尝不是这样.消失在小路转弯的地方,用背影告诉我们的父母:不必追.

从上高中开始,就渐渐远离了家乡,远离了父母.

高中住校,半个月回家一次.每次回家时,都会看到茶几上,母亲早就准备好的零食.母亲亦会歇息一天,专门在家陪着我,给我做饭,送我去车站.

上了大学,基本上是半年回一次家.平时,除了索要生活费,基本上不主动跟父母联系.因为嫌父母唠叨.

现在工作了,远离了故乡,回家的时间更加少了.去年年底,爷爷去世之前,由于我在外工作,觉得要过年了,而且爷爷的病情看起来似乎并没有那么严重.就没有回去.结果,爷爷在一月份的时候,去世了.去世前,得有半年没有见到过我.听爸妈说,爷爷在去世之前,一直告诉我爸妈,说,快让帅帅回来吧,别在外地了.

其实有的时候想想真的很愁.很纠结.

我喜欢上海这座城市,因为在这座城市里,我感受到有很多跟我一样,在一直努力奋斗的人.整座城市都洋溢着这样一种氛围.

可是,上海这座城市,我喜欢它,它喜欢我吗?

上海的房价,太高,而落户又太难.

但是,若是落不了户,我怎么给我的孩子我想给他的生活?

而且,若是我一直在上海,我的父母怎么办?我的故乡怎么办?我的朋友们怎么办?

但是,如果我不在上海,而回到青岛,我的未来怎么办?

我父母打了一辈子工,挣得钱也不是很多,我要靠自己,买房,买车.如果回青岛,如果做不了我最擅长的计算机行业,我靠什么取妻生子,我靠什么给我的孩子我想给他的生活?而且青岛的工资,不高.计算机行业的公司,又不多.我喜欢的互联网公司更不多.

两座城市,两种选择.要么牺牲对父母的孝,牺牲对朋友的义,要么牺牲自己的理想,孩子的幸福.

怎么选择?我不知道.我只能拼命往前跑,拼命的工作学习,拼命的挣钱.

生活的压力,让我不得不拼命的工作学习,拼命往前跑.

正是20岁出头的年纪,我也想跟其他年轻人一样,多去外面走走,多体验一些东西,谈一场不分手的恋爱.但是,我不能,我必须谨慎地走好生活的每一步,我必须仔细感悟生活,必须小心翼翼地做着每一步的计划.因为我怕走错一步就万劫不复,我怕父母老时,躺在病床上,呼喊着我的名字,而我不能在他们身边,照顾他们,我怕妻子会说,"当初怎么瞎了眼,嫁给你",我怕孩子想去旅行,而我因为囊中生涩而让孩子的愿望落空.

二月份每天的作息表基本是这样:

  • 8:00起床
  • 8:30到达公司并吃饭,然后制定一天的工作和学习计划
  • 9:00-12:00工作
  • 12:00-12:30吃饭
  • 12:30-13:00看一会书
  • 13:00-13:30午休
  • 13:30-19:00工作
  • 19:00-20:00回家,在路上吃饭,到家之后洗头洗脚
  • 20:00-次日1:00(有时次日2:00)学习

每天都这样,累不?

累,好多次都处在崩溃的边缘.

但是,我能怎么办?只能一点点适应这个节奏.适应了次日1:00休息之后,就适应次日2:00休息.

"有些事,只能一个人做。有些关,只能一个人过。有些路啊,只能一个人走。" "有一种寂寞,身边添一个可谈的人,一条知心的狗,或许就可以消减。有一种寂寞,茫茫天地之间余舟一芥的无边无际无着落,人只能各自孤独面对,素颜修行。"

这两句,在读到的时候,潸然泪下.

我在上海,可不就是"茫茫天地之间余舟一芥的无边无际无着落".可不就是"只能孤独面对,素颜修行."

而我就是因为跟前一位女朋友抱怨太多,才让她离开了我.在分手之后,以为是被戴了绿帽子,跟另一位女性朋友倾诉,也让我在想开始一段新的感情的时候,被拒绝了.

有的路,只能一个人走.无需和别人诉说,无需和别人倾诉,自己一个人默默地扛着就好.

在分手后的这段时间,我时常会想起那位前女友.我会想,我知道我哪儿做错了,可是她呢?觉得我哪里做的不对,直接告诉我,我改,不就好了.为什么要直接提分手?在我以为已经找到一位可以过一辈子的女孩,并打算拼尽全力给她幸福生活的时候,离开了我.我当初那么着急到上海,最重要的一个原因,可就是为了能够和她一起奋斗啊!

虽然明白她已经不可能再回到我的身边,可是依然会想起当初我们描绘的幸福生活.在我喝了酒的时候,或者在茫茫人海中看到有一个像她的人的时候,或者孤独地听着一首伤感的歌曲的时候.

无人与我把酒分. 无人告我夜已深. 无人问我粥可暖. 无人与我立黄昏.

如果我能有机会跟她再说一次情话,我想说:

   他真的很喜欢你
  像风走了八千里
  他真的很喜欢你
  像阵雨下到了南极
   他真的很想念你
  像珊瑚沉在海底
  他真的很喜欢你
  不问归期不远万里
  他真的很喜欢你
  像盲人看一出哑剧
  他真的很喜欢你
  像第一首诗不尽人意
  他真的很喜欢你
  像太阳自转无论朝夕
  他真的很喜欢你
  千言万语乐此不疲
  他真的很喜欢你
  像春雨下得淅淅沥沥
  他真的很喜欢你
  像夏日聒噪的蝉鸣
  他真的很想念你
  像秋叶落得悄无声息
  他真的很喜欢你
  想冬天的雪沁在心里
  他真的很喜欢你
  像狗本性难移
  他真的很喜欢你
  所以他可以一直没脸没皮
  他真的很想念你
  无时不刻不在想你
  他真的很喜欢你
  所以他把你捧在手心
  他真的很喜欢你
  所以固执地排比比喻
  他真的很喜欢你
  虽然他的感情实在细腻
  他真的很想念你
  真的无时无刻不再想你
  他真的很喜欢你
  不想浪费时间的一点一滴

关于读源码这件事情,过去我一直觉得,读完一个项目的源码,我就能回答出来全部关于这个项目的问题.比如,在我读完Hadoop的源码之后,我应该就要能够回答出StackOverflow上全部关于Hadoop的问题.

但是后来我发现我错了,实际上,去查StackOverflow上关于这个项目的问题列表,会发现,基本上能够回答出来的很少.因为我在读源码的时候,主要理解的是处理逻辑,部分地方精读了一下.而关于为什么会出现某个Exception这样的问题,当然回答不上来.但是这种问题,去查一下对应的源码,应该也能知道问题所在.

大数据,也越发的让我着迷.我发现它真的像是一门科学.而不是之前做Web,做后端时那样.在之前做后端时,基本上就是套框架,偶尔需要写个稍微复杂一点的功能.大多数,都是套框架的增删改查.实在是没什么难度.优化的话,大多数通过添加一个缓存,或者添加一个中间层,也就可以解决了.

而大数据则不是这样的.首先,由于数据量很大,需要用一个来处理,所以,就涉及到分布式计算,分布式存储等.而我对这种分布式系统又很感兴趣.而分布式系统的调试,一直都是一个难点.

而且,由于数据量很大,很多传统的算法,传统的数据结构就对它不起作用.比如Hash运算这件事情,一般情况下,是没有什么哈希碰撞的问题的.但是,当处理大数据时,动不动就几十亿的数据,进行哈希运算,就必须选择合理的哈希算法,避免哈希碰撞的问题.

数据量大,对它的存储所需的空间的开销,以及读取数据时,网络的开销,以及处理的时候,内存的开销,都是需要考虑的问题.所以,需要采用合适的压缩算法,必须选择合适的数据结构,来保证使用的内存要足够小.而且,由于木桶效应,还要尽量保证数据在处理的过程中,不会因为过度倾斜而导致整个作业的运行时间太长.还要保证要能够充分利用集群资源,不会出现有10000台服务器,却只有50台机器参与运算的情况.

在大数据领域,也是必然存在误差的.其中一个原因就是上面提到过的哈希碰撞的问题.还有就是业务的运算粒度.这些都会导致误差的存在.而我们就要寻找更好的方法来让这个误差尽量少.

感觉大数据这个领域中,结合了目前我非常感兴趣的分布式系统方面以及性能调优方面.

上周的一个事件,也让我对自己读书的效率有了怀疑.

当时我们在开会的时候,我们Leader讲到HBase的一个概念-Coprocessor,当他说到这个概念的时候,我是一脸懵逼.而我们组的另一位实习的女生巴拉巴拉说出来了.

后来,我就思索,我看书看的蛮快的,但是,真的记住了吗?

思索了一番,感觉是由两个方面导致的:

  • 读书的时候,相关的部分没有仔细看.
  • 做的笔记并没有拿出来复习

所以,打算重新翻看一下那些书中,之前没有仔细看的部分,并好好复习一下做的笔记.

好了,那就开始列三月份的计划:

  • 精读MapReduce和YARN中,提纲中十几个问题的源码,并总结成文章发表出来
  • 阅读《Apache Hadoop YARN》
  • 阅读《目送》
  • 如果还有时间,就开始阅读HDFS的源码