行存储和列存储比较–理解hbase的基础

目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局。在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。在这里,我不讨论这些软件的技术和优缺点,只围绕机械磁盘的物理特质,分析行存储和列存储的存储特点,以及由此产生的一些问题和解决办法。
一.结构布局
行存储数据排列

行存储

行存储


列存储数据排列
列存储

列存储


表格的灰色背景部分表示行列结构,白色背景部分表示数据的物理分布,两种存储的数据都是从上至下,从左向右的排列。行是列的组合,行存储以一行记录为单位,列存储以列数据集合单位,或称列族(column family)。行存储的读写过程是一致的,都是从第一列开始,到最后一列结束。列存储的读取是列数据集中的一段或者全部数据,写入时,一行记录被拆分为多列,每一列数据追加到对应列的末尾处。
二. 对比
从上面表格可以看出,行存储的写入是一次完成。如果这种写入建立在操作系统的文件系统上,可以保证写入过程的成功或者失败,数据的完整性因此可以确定。列存储由于需要把一行记录拆分成单列保存,写入次数明显比行存储多,再加上磁头需要在盘片上移动和定位花费的时间,实际时间消耗会更大。所以,行存储在写入上占有很大的优势。
还有数据修改,这实际也是一次写入过程。不同的是,数据修改是对磁盘上的记录做删除标记。行存储是在指定位置写入一次,列存储是将磁盘定位到多个列上分别写入,这个过程仍是行存储的列数倍。所以,数据修改也是以行存储占优。 数据读取时,行存储通常将一行数据完全读出,如果只需要其中几列数据的情况,就会存在冗余列,出于缩短处理时间的考量,消除冗余列的过程通常是在内存中进行的。列存储每次读取的数据是集合的一段或者全部,如果读取多列时,就需要移动磁头,再次定位到下一列的位置继续读取。 再谈两种存储的数据分布。由于列存储的每一列数据类型是同质的,不存在二义性问题。比如说某列数据类型为整型(int),那么它的数据集合一定是整型数据。这种情况使数据解析变得十分容易。相比之下,行存储则要复杂得多,因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间。所以,列存储的解析过程更有利于分析大数据。
三. 优化
显而易见,两种存储格式都有各自的优缺点:行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。
改进集中在两方面:行存储读取过程中避免产生冗余数据,列存储提高读写效率。
如何改进它们的缺点,并保证优点呢?
行存储的改进:减少冗余数据首先是用户在定义数据时避免冗余列的产生;其次是优化数据存储记录结构,保证从磁盘读出的数据进入内存后,能够被快速分解,消除冗余列。要知道,目前市场上即使最低端CPU和内存的速度也比机械磁盘快上100-1000倍。如果用上高端的硬件配置,这个处理过程还要更快。
列存储的两点改进:1.在计算机上安装多块硬盘,以多线程并行的方式读写它们。多块硬盘并行工作可以减少磁盘读写竞用,这种方式对提高处理效率优势十分明显。缺点是需要更多的硬盘,这会增加投入成本,在大规模数据处理应用中是不小的数目,运营商需要认真考虑这个问题。2.对写过程中的数据完整性问题,可考虑在写入过程中加入类似关系数据库的“回滚”机制,当某一列发生写入失败时,此前写入的数据全部失效,同时加入散列码校验,进一步保证数据完整性。
这两种存储方案还有一个共同改进的地方:频繁的小量的数据写入对磁盘影响很大,更好的解决办法是将数据在内存中暂时保存并整理,达到一定数量后,一次性写入磁盘,这样消耗时间更少一些。目前机械磁盘的写入速度在20M-50M/秒之间,能够以批量的方式写入磁盘,效果也是不错的。
四. 总结
两种存储格式各自的特性都决定了它们不可能是完美的解决方案。 如果首要考虑是数据的完整性和可靠性,那么行存储是不二选择,列存储只有在增加磁盘并改进软件设计后才能接近这样的目标。如果以保存数据为主,行存储的写入性能比列存储高很多。在需要频繁读取单列集合数据的应用中,列存储是最合适的。如果每次读取多列,两个方案可酌情选择:采用行存储时,设计中应考虑减少或避免冗余列;若采用列存储方案,为保证读写入效率,每列数据尽可能分别保存到不同的磁盘上,多个线程并行读写各自的数据,这样避免了磁盘竞用的同时也提高了处理效率。 无论选择哪种方案,将同内容数据聚凑在一起都是必须的,这是减少磁头在磁盘上的移动,提高数据读取时间的有效办法。
行存储列存储

行存储列存储


http://www.infoq.com/cn/articles/bigdata-store-choose

软考-计算机技术与软件专业技术资格(水平)考试

软考-计算机技术与软件专业技术资格(水平)考试 信息系统项目管理师
很多朋友都有系统集成项目管理工程师证书,但证书考出来之后发现这个证书好像没什么用处,于是便把它“冷落”了,或者也有朋友知道这个证书是可以挂靠赚钱的,但苦于不知道挂靠的流程或找不到企业挂靠,于是也把它忽视了。下面可以教大家如何将这类证书挂靠出去。
身份证、毕业证及软考分数或软考证(各城市要求不同,大部分城市需要原件)
小一寸电子版照片
1、找到需要证书的企业(如果觉得不好找的话,建议可以到国内某些知名咨询机构咨询一下),然后与企业签合同,确定挂靠价格。
2、企业买入你的社保(最好不要在同一个城市,同一城市不能重复买入社保的)。
3、企业准备帮你申请项目经理的业绩,1个项目经理需2个200万以上的业绩或总额500万以上其中至少一项合同额在100万以上、软件费用不低于30%的项目,同时准备好你的申请表(当然这个内容需要你配合)。
4、在提交材料前需要你的身份证、毕业证及软考分数或软考证(各城市要求不同,大部分城市需要原件),还有小一寸电子版照片。
5、拿着前面所有的材料,交到当地相关部门。
6、完成后,等工信部网上公示。
买社保最好不要在同一个城市,同一城市不能重复买入社保的

软考科目

软考科目

Hadoop 2.0激活大数据应用开发

Hadoop生态系统还在不断演进。倒退几年,我们还仅仅把Hadoop看作是HDFS(分布式文件系统)、MapReduce(软件编程模型)以及一些元素(工具与API)的组合,它们逐渐成为了大数据的代名词。
然而上周在圣何塞举行的Hadoop峰会2013让我们意识到,Hadoop已经发生了本质上的变化。Hadoop 2.0登上历史舞台,随之而来的增强特性为我们带来了一套新的数据编程方式,尽管依然依附于Hadoop,但它已经为我们提供了打破Hadoop固有印象的可能。
在Hadoop 2.0中,新增强的功能虽然还是围绕HDFS以及相关组件,如HBase数据库、Hive数据仓库以及Knox安全网关等,但是最引人关注的还是2.0中的YARN组件。YARN的名称来自于字母缩写“Yet Another Resource Manager”,直译可以称为另一个资源管理器。利用YARN,用户可以完全放弃原有的MapReduce,通过与批处理完全不同的新的交互方式来运行Hadoop。
商业智能咨询顾问Colin White 指出,Hadoop 2.0的HDFS对架构进行了重新设计,从而消除了某些单点故障的隐患。这仅仅是开始,更关键的进步在于API层面。White表示:“具有革命性的变化来自于YARN,它使得我们可以使用另外一种文件系统,为环境添加更多的灵活性,这是企业级用户最想要的功能。”
事实上,很多用户已经在讨论在Hadoop中运行其他的文件系统,比如IBM的通用并行文件系统,或者用Lustre的文件系统进行高性能集群计算。而YARN的出现,使得MapReduce不再是必需品,而变成了一种选项。
  Gartner分析师Merv Adrian表示,“核心Hadoop”的概念在未来也许将不复存在,数据架构中类似可插拔的选项已经提上了Hadoop的议事日程,任何层面都不再是只提供唯一解决方案,万事皆有可能。
  Hadoop以及相关工具在近几年中层出不穷,Adrian向TechTarget记者表示,当Web应用开发者开始决定创建一个专有数据存储之后,他们往往会选择把它开源。
  Adrian说:“Hadoop社区是吸引创新的支点,但Gartner建议企业用户尽量使用商用版的Hadoop解决方案。免费下载的开源产品可以用来进行沙盒实验。”
  用Adrian的话来说,近些年来发生的最大变化是数据存储的“爆炸”,许多都跟NoSQL相关。人们开始质疑传统SQL数据模型存在的弊端,而Hadoop更像是一个大的帐篷,把包括NoSQL运动在内的所有数据相关变化全部包容在内。
  这一变化的原因包括三点:首先,大规模扩展的关系型数据库系统成本过于昂贵;其次,数据库Schema的限制往往成为创新的阻力;最后,关系型数据库不能很好地支持Web应用。
  现在,关注各种类型数据存储的架构师和开发者都能够在Hadoop生态系统中找到他们想要的。在Hadoop峰会上,关于新范式的热情是显而易见的,就如同几年前Java和AJAX一样。Java语言是新时代应用开发的起点,AJAX也同样。如今的Hadoop与AJAX很像,成为一个符号化的概念,而围绕它的技术或者编程语言才是实体。
  很重要的一个观点是,Hadoop社区在做的事情代表了数据管理的一个主要发展方向。这些有着奇奇怪怪名称的开源工具以及API将能够让开发者以更创新的方式开发大数据应用,而这在之前是难以实现的。
http://www.searchbi.com.cn/showcontent_74554.htm

数据分析的广阔前景

数据分析作为一个新的行业领域正在全球迅速发展,它开辟了人类获取知识的新途径。
目前,数据库技术、软件工具、各硬件设备飞速发展,在这些软硬件技术与设备的支持下,信息技术应用已在各行各业全面展开,尤其是对通信、互联网、金融等行业的发展
做出了巨大贡献,并且经过长期的应用积累大量丰富的数据。但大部分企业对其存储信息利用率极低。庞大的历史数据是否有价值?有何价值?是否可以综合利用分析?是否能够为领导决策提供参考依据?
回答是肯定的,数据分析这一项工作越来越受到领导层的重视,借助数据分析的各种工具从海量的历史数据中提取、挖掘对业务发展有价值的、潜在的知识,找出趋势,为决
策层的决策提供有力的依据,对产品或服务的发展方向起到积极作用,有力推动企业内部的科学化、信息化管理。
从20世纪90年代起,欧美国家开始大量培养数据分析师,直到现在,对数据分析师的需求仍然长盛不衰,而且还有扩展之势。根据美国劳工部预测,到2018年,数据分析师的
需求量将增长20%。就算你不是数据分析师,但数据分析技能也是未来必不可少的工作技能之一。
数据分析师如此抢手的原因何在呢?
一个简单的原因就是社会越发达,人们对数据的依赖就越多。无论政府决策还是公司运营,科学研究还是媒体宣传,都需要数据支持。那么,对数据有如此大的依赖,就必然导致对数据分析的大量需求。因此,将数据转化为知识、结论和规律,就是数据分析的作用和价值。
那数据究竟会庞大到什么地步呢?
据国际知名咨询公司估计,到2020年,全球每年产生的数据量将达到3500万亿GB,打个比方,就是用普通的DVD一张一张地摞起来,可以从地球摞两个堆一直到月球。
面对这样庞大的数据,数据分析师的职责就不仅仅是单纯的分析了,更重要的是与相关业务部门进行合作,将数据真正应用到业务中,根据实际的业务发展情况识别哪些数据可用,哪些不适用,而不是孤立地在“真空环境”下进行分析。这就要求数据分析师不仅具备洞察数据的能力,还要对相关业务的背景有深入的了解,明白客户或业务部门的需求,从而将数据信息化、可视化,最后转化为生产力,帮助企业获得利润。这就是整个数据“供应链”。当然数据分析师也需要理解这个“供应链”。
那怎样才能成为一名优秀的数据分析师呢?
学习数据分析需要时间和经验的积累,而不能一蹴而就。在工作中运用不同的分析方法对数据进行分析,并与业务部门同事积极沟通,加深自己对整个行业或研究内容的理解,相信在两到三年内,一个优秀的数据分析师就会诞生。

“鼠标之父”恩格尔巴特于昨日去世 享年88岁

北京时间7月4日消息,据国外媒体报道,发明了计算机鼠标的硅谷工程师道格拉斯·恩格尔巴特(Douglas Engelbart),昨天在加州阿塞顿家中去世,享年88岁。
道格拉斯·恩格尔巴特被誉为“鼠标之父”。他出生于1925年二战期间,成年后参加了美国海军,成为一名电子和雷达技师。
战争结束后,恩格尔巴特进入俄勒冈州立大学学习电气工程,后又在加州大学伯克利分校完成了他的硕士和博士学位。
1957年,恩格尔巴特加入了斯坦福研究院(SRI International,斯坦福国际研究所),直至1977年,他带领研究中心创作了多项发明,其中就包括1963年的电脑鼠标。当时的鼠标是一个木壳,下面两个金属轮子。
电脑鼠标的问世改变了整个PC产业,但直至几年后,鼠标才真正进入公众的视线。1984年鼠标开始商用,当时苹果推出了革命性的Macintosh。
1968年12月9日的旧金山秋季联合计算机会议上,恩格尔巴特展示了自己的发明,除了鼠标外,他还提出了超文本链接、实时文本编辑、多窗口和电话会议等概念,他同时展示了一组能够控制计算机的设备。“多窗口”是恩格尔巴特另一个杰出的贡献,它帮助推动了计算机的发展。
恩格尔巴特拥有自己的实验室,它帮助了ARPANet的开发,后者是一个政府研究网络,它孕育了互联网。
SRI International CEO柯蒂斯·R·卡尔森(Curtis R. Carlson)称,,恩格尔巴特为社会带来巨大价值。他说:“我们会怀念他的才华、热情和魅力。他留下了巨大的技术遗产,每一个使用鼠标的人、每一个享受PC高生产力的人都受益于他。”
恩格尔巴特凭借自己的发明获得了无数奖项。1997年,恩格尔巴特获得莱梅尔逊奖(Lemelson-MIT Prize)。三年后,美国当时的总统克林顿(Bill Clinton)授予他美国国家技术奖。
老爷子,走好!!!

程序员,你会问问题吗?

在工作和生活中,总是会有很多人问题我很多技术方面的问题。有一些时候,问问题的和答问题的总是会有一些不爽的事情发生。如下面的几种情况:

  • 比如:“我的电脑老是蓝屏,怎么办?”,通常这样的问题90%以上的回答是:“重装吧”。这让问问题的人感到很沮丧,但你不能不承认那不是答案。而且有时候让人无法解答,比如:“我的makefiel出错了,你帮我看看我的makfile”,我通常会非反问,报了什么错吗?
  • 另一种情况是,回答问题的人首先先对问问题的人的抱怨,你问的问题就不对,或是,你问的这个问题是什么意思,而导致问问题的人却在不停地解释,结果花了好长时间来讨论问题本身是什么。
  • 还有一种情况是,问的问题太简单了甚至太白痴了,比如你自己试一试或是读读文档就知道了的问题,或是问这个问题直接表明了你的无知或是懒惰。这种问题会相当影响别人对你的印象。
  • 第四种情况是,提问者滔滔不绝,扯这扯那,讲了一大堆,听得听累了。最后都不知道你要干什么。

所以,怎么去问问题,怎么问一个好的问题,是一个很重要的事。你提问的技术直接关系到了你是否能够很快得到你满意的答案。
这里有一篇文章推荐给大家《How To Ask Questions The Smart Way》,中文版在这里《提问的智慧》(链接无效了 囧),我把其中的几个亮点总结如下:

  • 提问前先自己尝试查找答案,读读文档、手册,看看有没有相似的问题,看看那些方法能不能帮你解决问题,自己去试一试。如果你是程序员,你应该先学会自己调查一下源代码。(不然,人家回答你的一定是——RTFM – Read The Fucking Manual)这样的问题很多。我有时候很不愿意回答这样的问题,因为我觉得问问题的人把我当成了他的小跟班了。
  • 提问的时候,找正确的人或是正确的论坛发问。向陌生人或是不负责的人提问可能会是很危险的。不正确的人,会让你事倍功半。如果你问Linux的人Windows太慢怎么办?他们一定会让你把Windows删了装Linux去的。
  • 问的问题一定要是很明确的,并且阐述你做了哪些尝试,你一定要简化你的问题,这样可以让你的问题更容易被回答。对于一些问题,最好提供最小化的重现问题的步骤。
  • 你一定要让问题变得简单易读,这和写代码是一样的。只有简单易读的邮件,人们才会去读,试想看到一封巨大无比的邮件,读邮件的心情都没有了。而且,内容越多,可能越容易让人理解错了。
  • 你问问题的态度应该是以一种讨论的态度,即不是低三下四,也不是没有底气。只有这样,你和你的问题才能真正被人看得起。要达到这个状态,不想让别人看不起你,你就一定需要自己去做好充足的调查。问题 问得好的话,其实会让人觉得你很有经验的,能想到别人想不到的地方。
  • 不要过早下结论。比如:“我这边的程序不转了,我觉得是你那边的问题,你什么时候能fix?”,或是“太难调试了,gdb怎么这么烂?!”。当你这么做的时候,你一定要有足够的信息和证据,否则,你就显得很自大。好的问题应该是,“我和你的接口的程序有问题,我输入了这样的合法的参数,但是XX函数却总是返回失败,我们能一起看看吗?”,“我看了一下gdb的文档,发现我在用XXX命令调试YYY的时候,有这样ZZZ的问题,是不是我哪里做错了?”

http://coolshell.cn/articles/3713.html  转自酷壳

数据分析是什么

摘自《谁说菜鸟不会数据分析》,基础理论到哪里都是一样的,这里就没写个人心得了。只想强调一点:Hadoop可以作为数据分析的一种工具!
PS:如果你是一个研究hadoop的程序员的话,在你的心里一定是hadoop更重要,但是在数据分析这个领域,hadoop只是其中的一种工具,还有大量做数据分析的在使用其他工具。
数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总、理解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。这里数据也称观测值,是通过实验、测量、观察、调查等方式获取的结果,常常以数量的形式展现出来。
数据分析的目的是把隐藏在一大批看似杂乱无章的数据背后的信息集中和提炼出来,总结出研究对象的内在规律。在实际工作当中,数据分析能够帮助管理者进行判断和决策,以便采取适当策略与行动。例如,如果企业的高层希望通过市场分析和研究,把握当前产品的市场动向,制订合理的产品研发和销售计划,就必须依赖数据分析才能完成。
在统计学领域,有些学者将数据分析划分为描述性数据分析、探索性数据分析以及验证性数据分析。其中,探索性数据分析侧重于在数据之中发现新的特征,而验证性数据分析则侧重于验证已有假设的真伪性。
从另一个角度看,描述性数据分析属于初级数据分析,常见的分析方法有对比分析法、平均分析法、交叉分析法等;而探索性数据分析以及验证性数据分析属于高级数据分析,常见的分析方法有相关分析、因子分析、回归分析等。我们日常学习和工作中涉及的数据分析方法主要是描述性数据分析,也就是大家常用的初级数据分析。