Hadoop学习之内容概览

Background:第一次接触hadoop,之前总听说,也早早的列了学习计划,中途间间断断的看了官网文档,买了本书,太厚了,只看了封皮。终于今天有时间和兴趣,初窥门径,赶紧记下来。

Hadoop是什么?就是Apache Hadoop,一个大数据技术框架,Big Data一般指就是它了。

解决什么问题?这个也许是我最关系的问题了,其实官方文档里面没有讲太多,都是技术细节,这个就要搜索了。大概比较满意的答案是说,非结构化的数据,比如网页搜索引擎的检索结果,数据量很大的时候,用传统的数据库存储和处理就不太合适了,需要换个思路,就是Hadoop的思路,解决这类问题的。所以有时被贴上NoSQL的标签,其实和SQL没什么对立。参考:https://www.oreilly.com/ideas/what-is-hadoop

工作原理是啥?这个就是要研读官方文档了,也是最需要花时间的地方,这边就简单归纳一下吧。

大概分两块,基础软件包和开发接口。基础软件包是讲运行环境的搭建、安装、部署,是一个分布式文件系统,即HDFS,工作原理比较复杂,但技术核心也在这里。开发接口是讲怎么用的,Hadoop其实是面向技术人员的,是一个技术框架,所以落地是怎么用,就是MapReduce,这个接口需要运行在HDFS之上的,必须配套使用。

HDFS工作原理

HDFS Architecture

看上去比较复杂,的确复杂,不过和SAP NW思路有类似的地方,Datanodes可以理解为真正存数据的地方,类似于NW的servernode,Namenode可以理解为控制怎么存数的地方,类似于NW的message server和enqueue server。里面的Datanode里面绿色的block应该是划分的物理空间大小,比如128MB一个块。Client就是用户了,写操作是写多个地方的,读操作是读一个地方的。HDFS有冗余机制判断写多个地方成功几个算成功,好处就是不怕单点故障,这就是分布式的好处。并且HDFS有数据复制机制,增加数据存储的可靠性。

MapReduce工作原理

其实MapReduce即使一个Hadoop Job工作的2个阶段,第一个阶段是定义问题,就是Map,把Text中要关心的数据的Key定义出来。第二个阶段就归纳问题,就是Reduce,Job跑完Map接口后会跑Reduce,会基于Map阶段定义的Key Value,对相同的Key进行合并,所以合并完,结果集里面Key基本唯一了,复杂的场景可能要跑多轮,比如多个Reducer同时Reduce,第一轮每一个Reducer拿到的Map都是不全的,Reduce一遍之后,再集中Reduce一遍,得到最终的结果集,这是后Key就唯一了,任务就完成了,数据就可以被使用或消费了。

结尾,底层很多复杂的细节不再深究了。比如为了管理这套东西,提供的专门的一套命令行工具,就是Common。还有YARN,实现了资源和应用的全局管理。

 

 

2018新年快乐

最近一直加班,春节到了,在这里也和世界问一声好,2018,新年快乐!

完成阅读《深入剖析Tomcat》

实际上很早就开始读这本书了,只不过中间又去先读了别的书,所以现在才读完。

读这本书的起源是先前想了解tomcat源码,下载了tomcat的源码阅读,但是发现源码很多,直接阅读起来十分困难,很是费力,于是想找一找,有没有一本书可以帮助阅读源码,于是找到了这本书。

归根到底,这本书还是围绕着tomcat源码开展的,源码阅读是十分费力的,所以常常有些章节也是粗略略过,总体上看的不是十分细致,勉强看完。不过现如今也是不求甚解,故到此告一段落。

系统更新

wordpress系统更新到4.9。

这两天利用零碎时间,手动更新了wordpress,今天早晨完成了更新。但还有些后续常规运维操作,如备案信息维护,插件检查等。会抽空尽量完成。

关于ctblog升级的通知

最近实在不能忍,一天cpu 100%2次,都是xmlrpc,所以决定好好研究一下wordpress,首先要做的就是升级到最新版本。

当前使用的是4.7.3 版本,要升级到4.9版本。大概需要4个小时左右的时间。中午12点开始。

程序之路上的一些感悟

好久没有写东西了,转眼工作近7年了,趁着有激情,写一写这些年的工作感悟吧。

中心思想,还是围绕着如何走好程序之路,如何积累,如何提高,总结总结,少走弯路,站在前人的肩膀上,越走越远。

一项工作做的越久,就越能感受到工作的平凡。这话是什么意思呢,就是说,刚开始工作靠的是激情、速度,但越到后面,靠的越是方向、耐力。还在坚持的、剩下的人越来越少了。很多人上了年纪就转行了,剩下的人中,一部分也会因为成家了,有小孩了,很多心思和重心会放在孩子身上,追求工作和生活的平衡。所以也是“剩”者为王。就算是工作进取心较强的人,也会由于没有同龄的对手,只剩下自己和自己较劲了,所以,从主客观因素来看,工作是寂寞的,是平凡。

工作的越久,会发现技能、技巧的成分越少。刚毕业时,总能感受到某项新技术的震撼,特别牛。但久了会发现,真正牛逼的是深度,而不是某项技术。技术日新月异,XML之后又有JSON,Java之后又有grovvy, go, nodejs, swift,VMware之后又有docker。HTML5, Java8, Java9,等等。总之,新技术从来没停止过出现。如果只着眼于学习一种牛逼的技术,那么很可能会失望,等技术过气之后发现很无奈。相反,技术深度却永远不会过气,比如高并发架构,高可用,灾备,性能调优,等等,是每个技术都离开的话题。不同技术的差别,只不过不同场景的差别,简单来说就是适合干的事情不同,有牺牲性能提高可扩展性的,有牺牲性能提高开发速度的,但也有只注重性能的场景,根据业务需要,选择不同的技术,有条件可以做搭配,发挥各种技术的长处,扬长避短。

什么都会,其实就是什么也不会,精力被分摊了,或者说,如果你真有一样拿手的,你很难做到,也没必要做到什么都会。在差一个数量级的人的眼里才可能觉得有些人什么都会,其实不是的,人总要从自己身边的事情,工作需要,缘分,先接触到技术做起,而且先要有一门看家本领,所以掌握程度总会有较大差异。

其实就算是开发,也会有分化。有项目做的多的,客户需求,行业知识掌握的多的专家。有专攻通用技术框架,对时间复杂度、算法敏感的技术大牛。个人感觉,程序写多了,其实就是思维习惯的改变,越来越懂如何用程序将现实表达起来,也就是常说的业务建模。不管是行业专家,还是技术大牛,其实也有很多共性,就是持续学习。搞开发就像搞建筑,偏实践,动手能力。所以所谓的牛逼的技术,也许核心就是科研人员的一篇论文,懂实践的人用程序实现了。将精力花在自己擅长的环节,是一种聪明。

设计比编程重要,方向比设计重要,一切目的都是积累。如果谁能用技术将人类的智慧管理起来,每个人都干不同的事,最后大家又能无冲突的汇集起来,那人类就无敌了。其实编程没有难事,一切觉的难都是因为没有想明白,等想明白了也就不急着去做了,反而觉得浪费时间,想明白就是设计。然而技术之路能走多远,兴趣、身体健康状况、寿命长短、心态、正义等等都起决定作用,资源调配的合理才能走的远,有时有必要可以牺牲速度,这就是方向。最后看毕生成就的高度,或者技术的伟大程度就是看积累的总量,所以,哪怕一点点进步,但是坚实的,方向是向前的,都应该为自己庆贺!

洋洋洒洒,又写了这么多。也是最近1、2年来的所见、所思、所想。既然想走的远,总要迈出第一步。希望我的文字,能帮助到别人,值了。