大数据公司是做什么的,FAST做得怎么样

1.&Hadoop.Operations.pdf.zip&&a href=&///?target=http%3A///s/vDOQs6xMAQH62& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/s/vDOQs&/span&&span class=&invisible&&6xMAQH62&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&2.&Hadoop权威指南(中文版)(带书签).pdf&&a href=&///?target=http%3A///s/wxJYuVE573j& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop权威指南(中文版)(带书签).pdf&i class=&icon-external&&&/i&&/a&&br&3.&[Hadoop权威指南(第2版)].pdf&&a href=&///?target=http%3A///s/vmaSwlKBP5Kt& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[Hadoop权威指南(第2版)].pdf&i class=&icon-external&&&/i&&/a&&br&4.&hadoop权威指南第3版2012.rar&&a href=&///?target=http%3A///s/aN4iIpKT0Kml& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hadoop权威指南第3版2012.rar&i class=&icon-external&&&/i&&/a&&br&&br&5.《Hadoop技术内幕:深入解析HadoopCommon和HDFS.pdf&&a href=&///?target=http%3A///s/dlA_OphOI5AQU& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&《Hadoop技术内幕:深入解析Hadoop Common和HDFS.pdf&i class=&icon-external&&&/i&&/a&&br&6.&Hadoop技术内幕:深入解析MapReduce架构设计与实现原理.pdf&&a href=&///?target=http%3A///s/uIsyCUsePIjoh& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop技术内幕:深入解析MapReduce架构设计与实现原理.pdf&i class=&icon-external&&&/i&&/a&&br&&br&7.&Hadoop实战.pdf&&a href=&///?target=http%3A///s/BXMAwF_-NCyZw& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop实战.pdf&i class=&icon-external&&&/i&&/a&&br&8.&Hadoop实战-陆嘉恒(高清完整版).pdf&&a href=&///?target=http%3A///s/z5rVAAQ3zblXs& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop实战-陆嘉恒(高清完整版).pdf&i class=&icon-external&&&/i&&/a&&br&9.&Hadoop实战(第2版).pdf&&a href=&///?target=http%3A///s/j6KrzC8boQ1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop实战(第2版).pdf&i class=&icon-external&&&/i&&/a&&br&10.&HadoopinAction.pdf&&a href=&///?target=http%3A///s/BLZQKXQryIW7z& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop in Action.pdf&i class=&icon-external&&&/i&&/a&&br&&br&11&Hadoop in practice.pdf&&a href=&///?target=http%3A///s/CbeFlyMYjJq3C& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop in practice.pdf&i class=&icon-external&&&/i&&/a&&br&12&HadoopThe.Definitive.Guide,3Ed.pdf&&a href=&///?target=http%3A///s/dlQXvZtzIH6KO& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop The.Definitive.Guide,3Ed.pdf&i class=&icon-external&&&/i&&/a&&br&13.&O'Reilly.Hadoop.The.Definitive.Guide.3rd.Edition.May.2012.pdf&&a href=&///?target=http%3A///s/znRfJCcREJGsZ& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&O'Reilly.Hadoop.The.Definitive.Guide.3rd.Edition.May.2012.pdf&i class=&icon-external&&&/i&&/a&&br&&br&14.&hadoop入门实战手册.pdf&&a href=&///?target=http%3A///s/aprYE9iSa5XEs& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hadoop入门实战手册.pdf&i class=&icon-external&&&/i&&/a&&br&15.&Hadoop入门手册.chm&&a href=&///?target=http%3A///s/dDOrPlQHwCtJ& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop入门手册.chm&i class=&icon-external&&&/i&&/a&&br&&br&16.&windows下配置cygwin、hadoop等并运行mapreduce及mapreduce程序讲解.doc&&a href=&///?target=http%3A///s/drDKePjiE_dtP& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&windows下配置cygwin、hadoop等并运行mapreduce及mapreduce程序讲解.doc&i class=&icon-external&&&/i&&/a&&br&17&在Windows上安装Hadoop教程.pdf&&a href=&///?target=http%3A///s/zbLG_VnilVLPF& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&在Windows上安装Hadoop教程.pdf&i class=&icon-external&&&/i&&/a&&br&&br&18.&Hadoop源代码分析(完整版).pdf&&a href=&///?target=http%3A///s/bef7_LzOlZB5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop源代码分析(完整版).pdf&i class=&icon-external&&&/i&&/a&&br&19.&hadoop-api.CHM&&a href=&///?target=http%3A///s/aGkLoGJkdIegt& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hadoop-api.CHM&i class=&icon-external&&&/i&&/a&&br&&br&20.&HBase-Hadoop@小米.pptx& &a href=&///?target=http%3A///s/z83zdriL8kvgi& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HBase-Hadoop@小米.pptx&i class=&icon-external&&&/i&&/a&&br&21.&但彬-Hadoop平台的大数据整合.pdf&&a href=&///?target=http%3A///s/u90dUcJt2FEnP& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&但彬-Hadoop平台的大数据整合.pdf&i class=&icon-external&&&/i&&/a&&br&&br&22.&QCon2013-罗李-Hadoop在阿里.pdf&&a href=&///?target=http%3A///s/u5f-a75unTu1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&QCon2013-罗李&i class=&icon-external&&&/i&&/a&&br&23.&百度hadoop计算技术发展.pdf&&a href=&///?target=http%3A///s/aX0ftWKG8HXua& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&百度hadoop计算技术发展.pdf&i class=&icon-external&&&/i&&/a&&br&24.&QCon-吴威-基于Hadoop的海量数据平台.pdf&&a href=&///?target=http%3A///s/Er65NDisGiC& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&QCon-吴威-基于Hadoop的海量数据平台.pdf&i class=&icon-external&&&/i&&/a&&br&25.&8步安装好你的hadoop.docx&&a href=&///?target=http%3A///s/wfP0FRVUCC1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&8步安装好你的hadoop.docx&i class=&icon-external&&&/i&&/a&&br&26.&hadoop运维经验分享.ppsx&&a href=&///?target=http%3A///s/Er65NDit1x7& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hadoop运维经验分享.ppsx&i class=&icon-external&&&/i&&/a&&br&&br&27.&PPT集萃:20位Hadoop专家分享大数据技术工具与最佳实践.rar&&a href=&///?target=http%3A///s/uf1uFDgIUS3q_& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PPT集萃:20位Hadoop专家分享大数据技术工具与最佳实践.rar&i class=&icon-external&&&/i&&/a&&br&28.&Hadoop2.0基本架构和发展趋势.pdf&&a href=&///?target=http%3A///s/z7Iw9cNWdwcfd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop 2.0基本架构和发展趋势.pdf&i class=&icon-external&&&/i&&/a&&br&29.&Hadoop与大数据技术大会PPT资料.rar&&a href=&///?target=http%3A///s/aX0ftWKG8HEgB& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop与大数据技术大会PPT资料.rar&i class=&icon-external&&&/i&&/a&&br&30.&Hadoop2011云计算大会.rar&&a href=&///?target=http%3A///s/aX0ftWKG8HlNE& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop2011云计算大会.rar&i class=&icon-external&&&/i&&/a&&br&&br&31.&hadoop开发者(1~3)期.zip&&a href=&///?target=http%3A///s/dpAuMB4WqHl7H& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hadoop开发者.zip&i class=&icon-external&&&/i&&/a&
1."Hadoop.Operations.pdf.zip" 2."Hadoop权威指南(中文版)(带书签).pdf" 3."[Hadoop权威指南(第2版)].pdf" 4."hadoop权威指南第3版2012.rar"…
&p&作者:祝威廉 @ 乐视云数据,已得到作者的授权。&br&&/p&&br&&p&&strong&1.如何基于Spark做机器学习(Spark-Shell其实也算的上即席查询了)&/strong&&br&&strong&2.基于Spark做新词发现(依托Spark的强大计算能力)&/strong&&br&&strong&3.基于Spark做智能问答(Spark上的算法支持)&/strong&&/p&&br&如何基于spark做机器学习&br&&br&&p&Spark发展到1.5版本,算是全平台了,实时批计算,批处理,算法库,SQL,hadoop能做的,基本他都能做,而且做的比Hadoop好。&/p&&br&&p&当然要提及的是,Spark依然是Hadoop生态圈的一员,他替换的也仅仅是MR的计算模型而已。资源调度依赖于Yarn,存储则依赖于HDFS,是hadoop生态圈的一颗新星(其实算是老星啦)。&/p&&br&&p&Spark-Shell 是个伟大的创新,加上牛逼的Scala语言,写spark程序就和写普通的shell脚本(或者类似python程序)一样容易。问题是,原来的shell,python只能在单机工作,现在你写的每一行代码,都被放到了一个几百台,几千台的规模上去做了。&/p&&br&&p&以前的统计/机器学习依赖于数据抽样,抽样从统计的角度来看,如果足够随机,其实可以很精准的反应全集的结果,但事实上往往很难做好随机,所以通常做出来也会很不准。现在大数据解决了这个问题,但不是通过优化抽样的随机来解决,而是通过全量数据来解决。&/p&&br&&p&要解决全量的就需要有强大的处理能力,spark首先具备强大的处理能力,其次SparkShell带来了传说中的即席查询。做算法的工程师,以前经常是在小数据集上跑个单机,然后看效果不错,一到全量上,就歇菜了,和单机效果很不一样。虽然是小数据,但是在你的笔记本上跑你几个小时,也是很正常的。&/p&&br&&p&但是有了spark后,不一样了,尤其是有了spark-shell。 后面的两个例子,都完全是在spark-shell上写就的。边写代码,边运行,边看结果。CSDN几百万博文就是直接拿全量数据跑,直接看效果。spark 抽样也很方便,一个sample函数,你想要多少就多少。&/p&&br&&p&几十个G的博文数据,count一下 也就十几秒,cache了之后 几秒就count完了。所以说,如果docker颠覆了部署,那么spark-shell 也应该颠覆算法工程师的日常工作。现在会和一个百度的朋友比,哇,最近spark集群内存有9个T了,对方鄙视的看我一眼:百T的飘过.....&/p&&br&&p&目前Spark已经提供的算法,用的最多的是贝叶斯,word2vec,线性回归等。所以这里,作为算法工程师,或者分析师,一定要学会用spark-shell。&/p&&br&基于Spark做新词发现&br&&p&新词发现是一个非常有意思的领域,用途非常多。譬如可以构建垂直领域词库,自动发现新热门词汇。词库的重要性不用强调了。基于Spark强大的计算能力,直接对200万+的博文进行了分析,得到大概八万词,包含中文、英文、中英文混合词。通过凝固度、自由度、词频、idf以及重合子串(比如 c1c2c3..cN c2c3..cN-1 这种形态的,我们认为是重合子串,如果词频一样,则都过滤掉,否则留词频高的)五个维度进行阈值设置和过滤。事实上,中间结果可以到几百亿,一个不小心就可以把Spark跑死,但是也在这个过程中慢慢对Spark有了更深的理解。 最终效果还是不错的,现在它已经作为我们的基础词库了。&/p&&br&&p&基本上就是用spark计算出词的五个属性: 凝固度、自由度、词频、idf以及重合子串。算法自然是参考论文的,凝固度、自由度的概念来源于这里(&a href=&///?target=http%3A///blog/archives/5044& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/blog/archi&/span&&span class=&invisible&&ves/5044&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&) 重合子串能修正一类的问题,但感触比较深的是,通常某篇论文只会在一个视角去focus 某件事情,所以你需要参考多篇,从不同角度去理解这件事情的解决方式,最后通过实验综合,得到一个更好解决方案。参考了两篇论文,比如凝固度,自由度是出自一篇论文,而重合子串则来自另外一篇论文,然后自己观察实际数据,添加了很多规则,才得到最后的结果。&/p&&p&一说到算法,大概很多人心里就是想着,把数据转化为算法需要的格式,然后丢给现成的算法跑,跑着就出结果,或者出模型,然后反复尝试,直到得到你认为能接受的或者最优的结果。可是如果你真的做这件事情,就发现完全不是那样子啊,需要注意的细节太多了。&/p&&br&&p&新词发现没有现成的工具包,所以完全自己写了。第一步,你要获取语料。这容易,基于现有的平台,资源中心挑出了200万篇文章id,然后根据id到数据网关获取title,body字段。这个基于现有的平台,也就一个SQL + 几行Scala代码就搞定的事情。&/p&&br&&p&SQL 其实就是用Hive 生成一个200万博文id列表。Scala代码也就几行。&br&因为我们的新词发现是没有词典的,需要枚举所有组合,然后通过一定的规则判定这是不是一个词。比如 ‘我是天才’,就这四个字, 组合有,‘我是’,‘我是天’,‘我是天才’,‘是天’,‘是天才’,‘天才’ 。你想想,200万篇文章,这种组合得多夸张,问题是你还要接着给这些组合做计算呢。这个算法可没告诉你怎么处理的,你只能自己去想办法。看到了,真正你做算法的过程中,不只是实现,你需要面对的问题特别多,是怎么做的呢?&/p&&ol&&li&将所有html标签替换成空格。&/li&&li&通过小空格将一个大文本切分成无数小文本块。&/li&&li&我们认为一个词的长度最长不能超过5个字。&/li&&li&对每个小文本块再抽取出中文,中英文,英文。&/li&&li&将一些特殊字符,类似“!¥……()+{}【】的呀啊阿哎吧和与兮呃呗咚咦喏啐喔唷嗬嗯嗳你们我他她,这是由于” 这些不可能成词的字符先去掉。处理的过程中,你可能需要写中文,英文,中英文的抽取方法。&/li&&/ol&&p&通过上面的五个处理,你计算规模会小非常多。如果不这样处理,估计再大内存都能让你歇菜。接着就是按论文里的规则做计算了,比如算词的凝固度,算重合子串。这里面还会遇到很多性能,或者内存的坑,比如Spark里的groupByKey,reduceByKey。 一开始用了groupByKey,歇菜了,内存直接爆了,为啥,你要去研究groupByKey到底是怎么实现的,一个词出现几十万次,几百万次都很正常啊,groupByKey受不了这种情况。所以你得用reduceByKey。&/p&&p&在spark 1.5里,已经支持动态调整worker数目了。之前做这个的时候,会开的比较大,如果集群规模比较小,可能会影响别人,而且用完要赶紧释放,但释放了重新再起,也还是很麻烦的,现在好很多了。&/p&&br&&p&很好,实现了算法后得到了结果,可人家没告诉你,他贴出来的结果都是好看的,那是因为他是按频次排的,但如果你拉到最后看,结果就不太好看了。这个时候你就需要观察数据了,然后提出新的规则,比如最后得到的中文词结果,用了一些简单规则过滤下,都是哪些呢?凡是词里面包含‘或’的,或者'就'的或者上面罗列的,都认为这个词是没有意义的,经过这个简单规则一过滤,效果好非常多,很多没什么意义的生活词,或者不成词的词就被去掉了。中文,英文,中英文混合,加了很多这种规则,最终才过滤出了八万计算机词汇。&/p&&br&&p&在做上面的方案时,基本上就是在spark-shell中完成的。其实有点像ngram,就是对所有字符串做所有枚举,只是会限制最终成词的长度。这里中文是最长五个字,英文是四个字,中英文一块的 是五个字,接着要算出每个词左右连接字。具体的算法大家可以参考&a href=&///?target=http%3A///blog/archives/5044& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/blog/archi&/span&&span class=&invisible&&ves/5044&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a& 这篇文章。而且如果有spark环境的,也可以尝试自己实现一把。&/p&&br&&p&重合子串,是这个算法的一个比较大的问题,比如 c1c2c3...cN c2c3...cN-1,因为是从统计的方案做的,c1c2c3…cN c2c3...cN-1 他们两算出来的分数可能就是一样的,所以如果我们发现他们的分值或者出现频率是一样的,就可以直接排除掉了。&/p&&br&基于Spark做智能问答&p&其实做的事情非常简单:&/p&&br&&p&&strong&比较两个标题的相似度&/strong&&/p&&p&如果我们能知道两个句子说的其实是一件事情,那么就能打通各产品的互通鸿沟了。之前试水的项目是打通问答到博客的通道。具体效果大家可以看看CSDN的问答产品,里面的机器人,背后用的算法就是这套。当用户问一个问题,机器人就会到博客里去找有没有这个问题的答案,或者有没有可以做参考的。 比较神奇的是,之前有个在问答活跃的人也特别喜欢贴博客链接作为回答,我们对比了机器人和他的结果,发现机器人和他贴的差不多。&/p&&p&对于拥有内容的网站来说,这个技术还是非常重要的,比如CSDN,有论坛,博客,资讯,杂志等等,都是内容的载体。用户在问答频道里问的一个问题,其实在博客,在论坛早就已经有答案了。具体做法是透过word2vec解决一意多词的问题。接着将词转换为句子向量。这样任何一个问题都可以转换为一个向量。同理任何一篇博文的标题也可以转化为一个向量。&/p&&p&word2vec,采用的数据来源用的搜索引擎的数据。大部分内容类的网站,他的PV应该有相当一部分来自搜索引擎,其实搜索引擎对这些网站来说,就是一个大的宝藏。因为搜索的query串,都是用户遇到的问题,然后指向到解决这些问题的内容上。内容上直接拿用户的query作为word2vec的语料,得到一些常用的提问词,每个词用一个50维度的向量表示。当然,我们不可能真的让一个问题和几百万内容直接做比较,一个简单有效的方式是,先通过搜索引擎去搜,然后将搜索得到top100结果做向量计算得到新的得分。 基本相似度大于0.9 的可以算作答案。大于0.7的就可以作为参考答案了。站内搜索服务应该是标配了,所以对大部分网站应该不是问题。&/p&&p&对了,这里有个问题是:word2vec计算出来的是用一个稠密的定长向量表示词,做法是直接把一个句子的里的词的向量按位做加法,重新得到一个新的向量作为句子的向量。当然,这种方式也是有缺陷,也就是句子越长,信息损耗越大。但是做这种标题性质的相似度,效果出奇的好,那种句子里很多词汇不相同的,它都能算出他们很相似来,这是因为word2vec可以算出不同词汇之间关系。&/p&&p&好了,具体的内容就分享到这里。&/p&&br&总结&ol&&li&&p&作为数据分析师,算法工程师,请好好利用spark-shell。 Spark社区为了满足数据分析师,算法工程师,其实也做了非常多的工作,包括Python, R语言的支持。15年社区努力做的DataFrame其实就是从R里借鉴过来的,也方便R数据科学家方便的迁移过来。大家都应该与时俱进,不要只玩单机了。&/p&&/li&&li&&p&机器学习平台的构建,可以参考这篇文章&a href=&///?target=http%3A///p/d59c3e037cb7& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&从内容/用户画像到如何做算法研发&i class=&icon-external&&&/i&&/a& 里面对平台方面一些看法。&/p&&/li&&/ol&课程Q&A&p&&strong&Q: 如何从0开始系统学习spark,最后转行?&/strong&&br&&strong&A:&/strong& 学会scala就行,scala是一门具有学院派气息的语言,你可以把它写的像python,ruby那样,也可以写的想java那样方方正正,也可以学习python,spark支持python但是可能有些功能用不了,用了一天的时间把Scala的官方教程看了,基本就能上手了。&/p&&br&&p&&strong&Q:建议不做RAID的原因是什么?&/strong&&br&&strong&A:&/strong& 比如例子提到的默认HDFS的所有数据都会存三份,可以保证数据位于不同的服务器上,不同的磁盘上,所以无需RAID。&/p&&br&&p&&strong&Q:很多没什么意义的生活词,或者不成词的词,这些词是怎样得到的?也是分析出来的? &/strong&&br&&strong&A:&/strong& 因为用的都是统计的一些方式,所以肯定会有很多无意义的词汇,假设我们现在得到的词汇几何是A,接着去爬了一些新闻和生活的类的博客,然后用程序去跑一遍得到一批词汇B,然后A-B 就能得到一拼更纯正的计算机词汇。&/p&&br&&p&&strong&Q:内存要调到多大才能不会爆掉?是不是有什么比例?&/strong&&br&&strong&A:&/strong& 你不管调到多大,如果用的不好 也都有可能,groupByKey这个会有很大的内存问题,他形成的结构式 key-& value1,value2,value3…...valuen,这种是非常消耗存储空间的额,大家使用spark的时候,序列化最好使用kyro,性能确实好太多,一个worker 会同时配置可以使用的内存和cpu,这个时候一定要搭配好。比如你允许work使用5个cpu,那内存最好能配到10G,如果内存过小,你的cpu会大量浪费在GC上,一般是单个worker 12G内存 ,可使用4核。&/p&&br&&p&&strong&Q:直接把一个句子的里的词的向量按位做加法,这是如何加?能举个例子不?&/strong&&br&&strong&A:&/strong&比如 考虑一个三维向量: A[1,3,5] B[1,3,7],现在有个句子 是AB两个词组成,则对应的向量为A+B=[2,6,12]&/p&&br&&p&&strong&Q:还有中文分词是用的什么方法?可否分享代码不啊?&/strong&&br&&strong&A:&/strong&这里是无监督分词,所以不用中文分词,按维度叠加,才能保证都是相同长度的向量,而且中文分词这块,一个同事的 ansj分词,还是做的不错的。&/p&&br&&p&&strong&Q:一些分词方法具有新词发现的功能,比如crf,楼主是比较过效果么?而且我记得matrix67这个算法复杂度还是很高的?&/strong&&br&&strong&A:&/strong&matrix67 这个算法复杂度还是非常高的,你实际操作就会发现计算量,内存使用量都很大,crf等据我所知,还都是需要依赖词表的,matrix67的这个方式,完全不需要任何先验的东西。&/p&&br&&p&&strong&Q:为什么一个词要用50维度表示? 这能举个例子不? 这里不太明白。 &/strong&&br&&strong&A:&/strong&理论上维度越长越好,当时是随意试了一个值。发现效果其实已经可以了,这是一个可以调整的值,比如你可以分别生成50,150,300维度的,然后试试那个效果好。&/p&
作者:祝威廉 @ 乐视云数据,已得到作者的授权。 1.如何基于Spark做机器学习(Spark-Shell其实也算的上即席查询了) 2.基于Spark做新词发现(依托Spark的强大计算能力) 3.基于Spark做智能问答(Spark上的算法支持) 如何基于spark做机器学习 Spark发展到1.…
下面是自己的理解,希望能通俗的表达出来:&br&要了解Hadoop和spark,以及它们所依托的云计算,就要先了解这些分布式计算(distributed computing)软件出现的历史背景。&br&就拿一个too young too simple版的网络聊天软件来举个栗子吧:&br&比如说有一款火爆的聊天软件叫OOXX,拥有用户A和B。OOXX软件公司有一台自己的服务器。用户A向用户B发一句“约吗”,整个流程大概这样:&br&&br&1. A的电脑向OOXX服务器发送信息,当然包含了信息的内容(约吗),以及目的地(B用户的客户端)&br&&br&2. OOXX的服务器收到了“约吗”这个信息,软件公司为了便于在程序出问题的时候探查问题,以及通过收集用户的行为和信息来帮助自己提高OOXX的约炮成功率,会在服务器上面记录当天服务器收到的每一条信息,以及相关的信息(发送者A,目的地B,A的IP地址,B的IP地址,A的性别,B的性别 : ), 这些日志存在服务器上面。这样一来,每天服务器就会积累一堆当天的用户信息,猥琐的管理员可以每天用程序扫描一遍所有的日志,比如记录一下约炮成功的聊天对话的总数,统计一下当天的成功率,如果成功率很高,就可以作为OOXX公司的宣传口号了有没有!&br&&br&3. OOXX的服务器收到信息,记录下来之后,发现信息是要发给B,于是把信息发到B那里去。&br&&br&4. B收到“约吗”的信息,回复“不约,叔叔我们不约”给A,然后这条信息又重复1,2这两步,发送给A,同样会被服务器记录下来。&br&&br&5. A收到信息,发现钓鱼失败,马上拉黑B,转向下个目标。&br&&br&在互联网刚起步的时候,OOXX的服务器可能每天只用存一存文本聊天信息就好了,后来随着互联网技术的发展,支持发图片了,支持发视频了,想约的用户也越来越多了。在这样的环境下,A会先问问B:“看过优衣库吗”,然后把视频发过去,或者发点图片先挑逗挑逗(此处应有小黄图),这样一来服务器就hold不住了,用户数量暴涨,一两台计算机也是hold不住那么多用户的请求和日志存储了啊,总得想点办法,顶住这一波用户增长,然后做点PPT去忽悠投资人的钱。&br&&br&像OOXX这样的公司,可能买不起昂贵的企业级服务器(比如IBM之类,会提供整套的data center解决方案,对小公司来说可能贵得一逼),琢磨琢磨就躲买点便宜的服务器(故障率比较高,硬盘容易坏),10台不行我买20台。硬件的故障率高怎么办?买不起好的硬件,我想点办法把软件做好一点,硬盘容易坏就把服务器记录的日志同时写到两三个硬盘里(反正便宜),一个坏了还有另外两个能凑合。&b&&u&这样的用来管理由廉价服务器组成的存储系统故障率高的服务器集群的软件系统,就是HADOOP最开始的动机:GOOGLE的分布式文件系统(GFS)。&/u&&/b&&br&&br&现在服务器这么多,日志分散在每个服务器上面,如果我好奇A今天又约了几个妹子,我得把几十台服务器的日志全部扫一遍才能知道,反正我只关心A到底约了几个不同的妹子,我用相同的程序扫描每台机器的日志,在里面找与A相关的聊天记录,把A发送的信息的收件人全部提出来,最后拿到一个地方汇总过滤一下不就好了嘛。每台服务器上面的日志文件太大了(大家小黄图发来发去)一次处理不完怎么办?反正我只关心A的相关记录,把大文件切割成小文件就好了嘛。这样的日志处理是&u&把程序分布在每台电脑上运行,每台电脑上的处理程序都做相同的工作——找与A相关的聊天信息,然后把在所有服务器日志里面找到的信息集中发到一个服务器上,过滤汇总一下&/u&,就能知道A到底约了几炮啦。用来管理和执行这些分布式程序的软件系统,需要合理调度其控制的所有计算资源(比如其中一台电脑扫描完没事干了,不能让它闲下来,可以把别的电脑还没处理完的小文件发给它,让闲置的电脑来处理),最后得出结果。&b&&u&这样的分布式资源调度+分布式运算 的软件,就是HADOOP的另一个重要板块map-reduce,用来处理海量的文件,一开始也是GOOGLE搞出来的。&/u&&/b&&br&&br&&br&好了,这就是HADOOP一开始最主要的两个模块了,在此基础上衍生出了一些别的HADOOP模块(比如PIG),也是基于这两个基本的模块的。&b&&u&所以HADOOP这样的分布式软件系统,就是为了更好的管理和处理当前互联网产生的海量的数据文件而出现的。SPARK也是基于HADOOP,可以理解为性能更优异的HADOOP。&/u&&/b&&br&&br&&br&有了HADOOP,软件层面的问题解决了,像AMAZON这样的大公司,自然会建造大量的服务器集群,以便处理每天的海量信息。后来这些大公司发现,&b&&u&集群建得太多啦,每天成百上千台计算机闲置在那,烧电不说,还得雇人去维护,太尼玛烧钱啦!于是有人琢磨着,闲着也是闲着,不如把这些闲置的计算资源租给需要的人,然后按使用时长收费&/u&&/b&&u&&b&,这就是云计算啦&/b&&/u&,妥妥哒!&br&&br&于是乎,AMAZON搞出了他们的云计算服务,把自己闲置的计算资源出租给其他人来使用。有的客户什么都不懂,你把计算资源直接给他,他毛也不会用,于是有的云计算提供商就直接把一些软件运行在自己的集群上,这些客户直接上网使用这些软件就好啦,这就是SaaS(Software as a Service)。Salesforce的企业级软件就是这样一种服务。&br&&br&有的用户不想用云计算服务商提供的软件,想自己打造自己的云服务软件,于是云计算服务商用一些技术直接整个服务器暴露给用户,用户可以远程自定义这个服务器(调整各种机器配置文件,运行各种程序,完全就和自己的电脑一样),这就是IaaS(Infrastructure as a Service)了,给用户提供了更多的把玩空间。AMAZON的EC2就是这样一个服务&br&&br&还有些用户,又想运行自己的程序,又觉得配置服务器太麻烦了,于是云计算服务商就只提供一个平台供用户去上传和部署自己的软件,外加一些适当的可配置内容,但是整个底层的服务器配置还是由云计算服务商来做,这样用户省心。这就是PaaS(Platform as a Service),GOOGLE最开始的云服务(google app engine)就是这样一种模式。&br&&br&大概就这样。
下面是自己的理解,希望能通俗的表达出来: 要了解Hadoop和spark,以及它们所依托的云计算,就要先了解这些分布式计算(distributed computing)软件出现的历史背景。 就拿一个too young too simple版的网络聊天软件来举个栗子吧: 比如说有一款火爆的聊天…
这个问题被很多人问过,很早就想写一下。尤其是如何在 IntelliJ IDEA 中单步调试 Spark。&br&&br&若无特殊说明,本篇均以撰稿时最新的 Spark 2.0 SNAPSHOT 和 IntelliJ IDEA 2016 为基础,并以 SBT 为主要 build 工具。&br&&br&&b&IDE 选择&br&&/b&&br&Spark 的主力 IDE 无疑是 IntelliJ IDEA。在 Databricks 我也见过直接用 Vim、Sublime 的同事,然而但凡用 IDE 的,清一色是 IDEA,从没见过谁用 Eclipse 和/或 NetBeans。所以,作为主力 contributor 的日常 IDE,IDEA 一定是最驯顺的。(就个人体验而言,IDEA 也是我用过的最好的 Java/Scala IDE。)&br&&br&有一点需要提前说明的是,不要指望让 IDEA 全权搞定工程导入、build、test、debug 的全部环节。出于历史原因,Spark 采用了 Maven 和 SBT 两套 build 系统,二者互相交织,再加上引入了 assembly jar,使得整个 build 系统变得对 IDE 不那么友好。截至撰稿为止,我尚未见过任何一套可以在单个 IDE 内搞定全套流程的方法。不过不用紧张,debugger 还是可以用的。&br&&br&&b&Build Spark&br&&/b&&br&在将 Spark 工程导入 IDEA 之前,最好先 build 一遍 Spark,至少完成编译步骤。这是因为编译过程中还会自动生成一些源码。尤其是 Spark 2.0 中 SQL parser 改用 ANTLR 实现。如果不经编译直接将工程导入 IDEA,parser 相关的 class 会出现引用缺失。&br&&br&Build Spark 的详细步骤参见&a class=& wrap external& href=&///?target=http%3A//spark.apache.org/docs/latest/building-spark.html& target=&_blank& rel=&nofollow noreferrer&&官网文档&i class=&icon-external&&&/i&&/a&。这里只提一些额外的注意事项。&br&&br&首先,请努力建设有中国特色的社会主义个人网络访问渠道。(听说朝廷要大力发展大数据来着?呵呵。)&br&&br&其次,和一般理解不同,build Spark 其实不需要单独安装 Scala 和 SBT。Spark 源码中的 build/sbt 脚本会自动下载指定版本的 SBT,而 SBT 在 build Spark 的过程中又会自动下载指定版本的 Scala。所以除非你需要脱离 Spark 单独使用 Scala,否则无须另行安装。对于 Maven,build/mvn 脚本的行为也类似。&br&&br&最后就是 profile “套餐”的选择。这部分内容官网文档中已经有所涉及。详细的 profile 定义请参见 Spark 根目录下的 pom.xml。此外,目前 Spark 同时支持 Scala 2.10 和 2.11,其中 Spark 2.0 默认启用 2.11。查看 pom.xml 的时候会看到 scala-2.10 和 scala-2.11 这两个 profile。但用 SBT build 时,启用这两个 profile 需要用 -D 而不是 -P,如:&br&&div class=&highlight&&&pre&&code class=&language-text&&build/sbt -Dscala-2.10 -Phive clean assembly/assembly
&/code&&/pre&&/div&简单说,这是因为 Spark 的 SBT build 对 Scala 版本的设置做了特殊处理,标准的 Maven -P 参数是无效的。&br&&br&&u&注意:正在开发中的 Spark 2.0 已经取消了 assembly jar,把上述的 assembly/assembly 替换为 package 即可。&/u&&br&&br&&b&工程导入&br&&/b&&br&新近版本的 IDEA 对 SBT 的支持已经改进了很多,早就不再需要 sbt-idea 插件。此外,由于 Spark 同时使用 Maven 和 SBT 两套 build 系统,用 Maven 和 SBT 都可以顺利导入。社区里,不同的开发者对 SBT 和 Maven 的偏好各有不同。我印象里 Cloudera 的人相对来说更喜欢 Maven,因为 Maven 对 release publishing 更友好,更方便他们将 Spark 集成进 CDH。而 Databricks 内一般用 SBT 的更多,主要是因为 SBT REPL 开发体验更流畅。&br&&br&我个人的偏好比较分裂——工程导入用 Maven,build 和 test 用 SBT。选择依据主要是最大化日常开发的迭代速度。&br&&br&IDEA 在导入 SBT 工程的时候会出现全局卡死的情况。整个导入过程是同步的,完成之前无法执行任何操作。偏偏 SBT 的依赖解析又极慢,再配合中国特色的社会主义和谐网络,每回导入打个坐,一年下来不是升仙就是成佛了吧……&br&&br&用 Maven 导入 IDEA 工程,这个问题就缓解了许多。Maven 的依赖解析更快,而且 IDEA 的 Maven 支持更成熟,整个解析过程是异步的,不影响其他操作。导入方法也极简单:File / Open,选定 Spark 根目录下的 pom.xml,确定即可。&br&&br&&img data-rawheight=&1210& data-rawwidth=&804& src=&/b3aabc773bc955313fbc90f6695ce36c_b.png& class=&origin_image zh-lightbox-thumb& width=&804& data-original=&/b3aabc773bc955313fbc90f6695ce36c_r.png&&&br&用 Maven 导入工程的另一个优点是,在 IDEA 的 Maven tool window(View & Tool Windows & Maven Projects)里可以很方便地调整 active profiles。假设当前 branch 开发的功能仅和 Hadoop 2.2 下的 Spark SQL 的 Hive 集成相关,那么就可以打开 hadoop-2.2 和 hive profile,关闭其他的 profile。这样一来,无关的 sub-project 就不会被激活,代码索引、依赖解析更快,内存占用也更低。&br&&br&&b&SBT 配置&br&&/b&&br&Spark SBT build 中包含多个 sub-project,日常开发调试时经常需要切换到不同的 sub-project。因此我会简单调整一下 SBT 的 prompt string,以便显示当前的 project 名称。这步并非必须。&br&&br&在 $HOME/.sbt/0.13/global.sbt 中添加以下内容即可:&br&&div class=&highlight&&&pre&&code class=&language-text&&import scala.Console.{BLUE, RESET, UNDERLINED}
shellPrompt := { state =&
val projectId = Project.extract(state).currentProject.id
s&$BLUE${UNDERLINED}sbt ($projectId)&$RESET &
&/code&&/pre&&/div&效果如下:&br&&div class=&highlight&&&pre&&code class=&language-text&&$ ./build/sbt -Phive -Phive-thriftserver
sbt (spark)& project hive
sbt (hive)&
&/code&&/pre&&/div&&br&&b&调试&/b&&br&&br&一个困扰着很多初学者,甚至是一些已经有相当 Spark 开发经验的工程师的问题,就是如何在 IDEA 中调试 Spark(注意这里指的是 Spark 本身,而不是基于 Spark 开发的应用)。可能是由于 SBT / Maven 混用以及使用 assembly jar 的缘故,在 IDEA 里直接 build 和调试 Spark 并不方便,往往会碰到一些奇怪的错误,以至于 IDEA 完全退化成一个代码阅读工具和编辑器。这个问题实际上可以通过远程调试很好地解决。&br&&br&以下以监听模式(listen mode)为例演示如何在 IDEA 内“远程”调试本地 SBT 内启动的 Spark test case。&br&&br&&u&在 IDEA 中建立 Remote Debugging Configuration&br&&/u&&br&选取菜单项 Run & Edit Configurations... 点击左上角加号,选取 Remote 建立一套远程调试配置,并命名为“Remote Debugging (listen)”:&br&&img data-rawheight=&1400& data-rawwidth=&2144& src=&/c82bf467b42325cced42fe_b.png& class=&origin_image zh-lightbox-thumb& width=&2144& data-original=&/c82bf467b42325cced42fe_r.png&&默认的配置刚好合用:&br&&ul&&li&Transport:Socket,目标程序与 debugger 间通过 socket 通讯&/li&&li&Debugger mode:Listen,debugger 担任服务器预先启动并在指定端口监听,等待目标程序主动连入&/li&&li&Host / Port:Debugger 监听的地址和端口,默认为 localhost:5005&br&&/li&&/ul&&br&点击 Debug 建立配置并启动 remote debugger 开始监听。今后需要再次启动 remote debugger 时,按 F9 选择建立好的“Remote Debugging (listen)”配置即可。&br&&br&&u&在 SBT 中启用远程调试&br&&/u&&br&假设我们要调试一个跟 Spark SQL Hive 集成有关的 bug。首先,在 Spark 源码树 sql/hive 这个 sub-project 中挑个合适的 test suite(比如 HiveQuerySuite),添加一个用于复现该 bug 的 test case foo。然后进入 SBT:&br&&div class=&highlight&&&pre&&code class=&language-text&&$ ./build/sbt -Phive -Phive-thriftserver
sbt (spark)&
&/code&&/pre&&/div&切换至 hive sub-project:&br&&div class=&highlight&&&pre&&code class=&language-text&&sbt (spark)& project hive
sbt (hive)&
&/code&&/pre&&/div&设置监听模式远程调试选项:&br&&div class=&highlight&&&pre&&code class=&language-text&&sbt (hive)& set javaOptions in Test += &-agentlib:jdwp=transport=dt_socket,server=n,suspend=n,address=localhost:5005&
&/code&&/pre&&/div&(依具体情况,server、suspend、address 三个参数可以按需调整。各参数含义、取值参见 &a href=&///?target=https%3A///javase/7/docs/technotes/guides/jpda/conninv.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Oracle 官方文档&i class=&icon-external&&&/i&&/a&。)&br&&br&&u&注意:一般情况下,运行 test case 并不需要特地切换当前 sub-project。但 SBT 中的 settings key 是跟着当前 sub-project 走的。调试 hive sub-project 下的 test case 必须在 hive sub-project 下设置 javaOptions。&/u&&br&&br&最后启动我们的 test case:&br&&div class=&highlight&&&pre&&code class=&language-text&&sbt (hive)& testOnly *.HiveQuerySuite -- -t foo
&/code&&/pre&&/div&(末尾的 -t foo 是传递给 ScalaTest runner 的命令行参数,表示只运行 test suite 中的 foo 这个 test case。其他参数及用法参见 &a href=&///?target=http%3A//www.scalatest.org/user_guide/using_the_runner& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ScalaTest 文档&i class=&icon-external&&&/i&&/a&。)&br&&br&在 remote debugger 已经成功启动并处于监听模式的前提下,此时 SBT 应该能够自动连入 remote debugger,事先在 IDEA 里设置了断点的话,也会生效。&br&&br&&u&在 SBT 中关闭远程调试&br&&/u&&br&一旦在 SBT REPL 中设置了上述的 javaOptions,整个 SBT session 中执行任何 test 都会尝试连接 remote debugger。调试结束后,要关闭远程调试,可以执行以下命令清除先前的设置:&br&&div class=&highlight&&&pre&&code class=&language-text&&sbt (hive)& session clear
&/code&&/pre&&/div&&br&&b&其他&br&&/b&&br&&u&sparkShell task&br&&/u&&br&Spark SBT build 中定义了一个 SBT task sparkShell,可以直接在 SBT 内启动一个 Spark shell。做简单测试时很方便。
这个问题被很多人问过,很早就想写一下。尤其是如何在 IntelliJ IDEA 中单步调试 Spark。 若无特殊说明,本篇均以撰稿时最新的 Spark 2.0 SNAPSHOT 和 IntelliJ IDEA 2016 为基础,并以 SBT 为主要 build 工具。 IDE 选择
Spark 的主力 IDE 无疑是 Intelli…
&ul&&li& 我是来泼冷水的,旗帜鲜明的反对先看hadoop,以及google三篇论文的答案们。这对于分布式系统的初学者来说,门槛太高,我认为读分布式系统,应该先看这本书:&a href=&///?target=https%3A///subject/3852290/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&现代操作系统(第3版) (豆瓣)&i class=&icon-external&&&/i&&/a&。&/li&&ul&&li&这一条肯定会带来很多的质疑,因为这本书,讲解的是操作系统是单机的,为什么看分布式系统要看这本书,以下来说说我推荐这本书的原因,那就是这本书不仅仅讲解了现代操作系统是如何组成的,同时也详细的讲解了这种组成的原因,以及演化。&/li&&li&现在的操作系统的所有基础概念,是由于cpu的运作原理,高速缓存,内存和硬盘这几个不同的硬件的处理速度差异所导致的,而比如进程调度,进程切换,进程锁,以及进程通信,也同样组成了分布式操作系统实现的基础,其中,进程的互斥锁,可以说就是分布式锁的简化版。&/li&&/ul&&li&其次,我是来反对凡事必提bigtable,spanner并认为分布式数据库是解决一切问题的观点的,要理解分布式数据库,还是需要先了解传统的数据库,我建议从:&a href=&///?target=https%3A///subject/4838430/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库系统实现 (豆瓣)&i class=&icon-external&&&/i&&/a& 这本书开始入手,其中最重要的一点就是理解本地事务的概念&/li&&ul&&li&为什么传统数据库使用SQL来进行交互&/li&&li&本地事务就是二阶段进行的,先写入本地日志,并再改变数据库的表内容,为何如此设计,是为了保证事务的什么特性&/li&&li&传统数据库的扩展方式,传统数据库的横向扩展难点到底在哪里&/li&&li&nosql的出现究竟是为了解决什么问题,抛弃了哪些传统数据库的特性,为何抛弃了一部分传统数据库的特性,就可以获得更好的扩展性&/li&&li&同样身为nosql,mongodb和hbase有什么本质区别&/li&&li&OLAP和OLTP这两个不同的方向,是不是一种妥协的方案&/li&&li&在这个基础上,再开始看newSql的一类产品,想想newSql究竟是缺了传统数据库什么内容,为了达成什么目标(是的,我一直认为完美的无限扩展的数据库产品不存在)&/li&&/ul&&li&最后来做一下总结,了解分布式系统,无论是从实践中了解,还是从论文了解,如果需要理解本质,而不是理解实现的细节,还是建议从最最基础的内容来推演,但是建议不必一开始就需要完善的了解全部的细节,而是能够举一反三,其中这个一肯定就是现代操作系统基础了~&/li&&/ul&
我是来泼冷水的,旗帜鲜明的反对先看hadoop,以及google三篇论文的答案们。这对于分布式系统的初学者来说,门槛太高,我认为读分布式系统,应该先看这本书:。这一条肯定会带来很多的质疑,因为这本书,讲解的是操作系统是单机…
&a href=&///?target=https%3A///in/dongfei& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Fei Dong | LinkedIn&i class=&icon-external&&&/i&&/a&&br&&img src=&/099dfba3725_b.jpg& data-rawwidth=&630& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&630& data-original=&/099dfba3725_r.jpg&&&br&&b&Hadoop面试和学习小结&/b&&br&&br&&p&随着大数据的盛行,Hadoop也流行起来。面过一些公司,包括开发Hadoop :如Cloudera, Hortonworks, MapR, Teradata, Greenplum, Amazon EMR, 使用Hadoop的除了Google,数不胜数了.&/p&&p&Hadoop 2.0转型基本无可阻挡,今年下半年要正式发布了,它的出现让大家知识体系都 要更新了。Hadoop1.0搞了8年才发布,2.0不到2年就出来了。2.0的核心是YARN,它的 诞生还是有趣的&a href=&///?target=http%3A///a/928.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&故事&i class=&icon-external&&&/i&&/a&&/p&&b&&br&&br&YARN介绍&/b&&ul&&li&&a href=&///?target=http%3A///hadoop/yarn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Yarn from Hortonworks&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A///developerworks/cn/opensource/os-cn-hadoop-yarn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Yarn from IBM developerworks&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&Hadoop 生态系统&/b&&ul&&li&&a href=&///?target=http%3A///blog//hadoop-ecosystem-at-a-glance/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop Ecosystem at a Glance&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&SQL on Hadoop&/b&&ul&&li&&p&&a href=&///?target=http%3A////sql-is-whats-next-for-hadoop-heres-whos-doing-it/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SQL is what’s next for Hadoop: Here’s who’s doing it&i class=&icon-external&&&/i&&/a&&/p&&/li&&li&&p&&a href=&///?target=http%3A///blog//all-sql-on-hadoop-solutions-are-missing-the-point-of-hadoop/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&All SQL-on-Hadoop Solutions are missing the point of Hadoop&i class=&icon-external&&&/i&&/a&&/p&&/li&&/ul&&b&Hadoop Summit&/b&&ul&&li&&a href=&///?target=http%3A//hadoopsummit.org/san-jose/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop Summit, San Jose&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&书籍和Paper&/b&&br&&br&&p&“Hadoop: The Definitive Guide”: 里面内容非常好,既有高屋建瓴,又有微观把握,基本适用于1.X版本。比如mapreduce各个子阶段,Join在里面也有代码实现,第三版&/p&&ul&&li&&a href=&///?target=http%3A///book/635/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop: The Definitive Guide, 3rd Edition&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A///tomwhite/hadoop-book& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&tomwhite/hadoop-book · GitHub&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&Google的三辆马车,GFS, MapReduce, BigTable Google的新三辆马车:Caffeine、Pregel、Dremel&/p&&ul&&li&&a href=&///?target=http%3A//blog.mikiobraun.de/2013/02/big-data-beyond-map-reduce-googles-papers.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Big Data beyond MapReduce: Google’s Big Data papers&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&SIGMOD, VLDB Top DB conference&/p&&br&&b&入门:&/b&&br&&br&&ol&&li&知道MapReduce大致流程,Map, Shuffle, Reduce&br&&/li&&li&知道Combiner, partition作用,设置Compression&br&&/li&&li&搭建Hadoop集群,Master/Slave 都运行那些服务 NameNode, DataNode, JobTracker, TaskTracker&br&&/li&&li&Pig, Hive 简单语法,UDF写法&br&&/li&&/ol&&ul&&li&&a href=&///?target=http%3A///when-to-use-pig-latin-versus-hive-sql/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&When to use Pig Latin versus Hive SQL?&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A///titles/1/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Online Feedback Publishing System&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A///content/cloudera/en/resources/library/training/introduction-to-apache-hive.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Introduction to Apache Hive Online Training&i class=&icon-external&&&/i&&/a&&br&&/li&&li&&a href=&///?target=http%3A//i.stanford.edu/%7Eragho/hive-icde2010.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&i.stanford.edu/~ragho/h&/span&&span class=&invisible&&ive-icde2010.pdf&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/li&&/ul&&p&Hadoop 2.0新知识; HDFS2 HA,Snapshot, ResourceManager,ApplicationsManager, NodeManager&/p&&br&&b&进阶:&/b&&ul&&li&&p&HDFS,Replica如何定位&/p&&/li&&li&&p&&a href=&///?target=http%3A//hadoop.apache.org/docs/r0.18.0/hdfs_design.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HDFS Design&i class=&icon-external&&&/i&&/a&&/p&&/li&&li&&p&Hadoop 参数调优,性能优化,Cluster level: JVM, Map/Reduce Slots, Job level: Reducer #, Memory, use Combiner? use Compression?&/p&&/li&&li&&p&&a href=&///?target=http%3A///blog/-tips-for-improving-mapreduce-performance/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&7 Tips for Improving MapReduce Performance&i class=&icon-external&&&/i&&/a&&/p&&/li&&li&&p&&a href=&///?target=http%3A//www.slideshare.net/ydn/hadoop-summit-2010-tuning-hadoop-to-deliver-performance-to-your-application& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop Summit 2010 Tuning Hadoop To Deliver Performance To Your Application&i class=&icon-external&&&/i&&/a&&/p&&/li&&li&&a href=&///?target=http%3A//hbase.apache.org/book.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HBase 搭建,Region server, key如何选取?&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A//www.tbdata.org/archives/2109& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据倾斜怎么办?&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&算法:&/b&&ul&&li&字典同位词&/li&&li&翻译SQL语句 select count(x)&/li&&li&&a href=&///?target=http%3A///wp-content/uploads/-MapReduceAlgorithms.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MapReduce Algorithms&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A///2010/08/designing-algorithmis-for-map-reduce.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Designing algorithms for Map Reduce&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&Blog&/b&&br&&br&&p&关注&a href=&///?target=http%3A///blog/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cloudera&i class=&icon-external&&&/i&&/a&, &a href=&///?target=http%3A///blog/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hortonworks&i class=&icon-external&&&/i&&/a&, MapR&/p&&ul&&li&&p&&a href=&///?target=http%3A//dongxicheng.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&董的博客&i class=&icon-external&&&/i&&/a&&/p&&/li&&li&&p&&a href=&///?target=http%3A///blog/607175& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hadoop学习资料&i class=&icon-external&&&/i&&/a&&/p&&/li&&/ul&&b&相关系统&/b&&ul&&li&&p&数据流系统: &a href=&///?target=https%3A///nathanmarz/storm/wiki/Tutorial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Storm&i class=&icon-external&&&/i&&/a&&/p&&/li&&li&&p&内存计算系统: &a href=&///?target=http%3A//www.slideshare.net/Hadoop_Summit/spark-and-shark& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Spark and Shark&i class=&icon-external&&&/i&&/a&&/p&&/li&&li&&p&交互式实时系统:Cloudera Impala, Apache Drill (Dremel开源实现),Tez (Hortonworks)&/p&&/li&&/ul&&b&公司列表:&/b&&ul&&li&&a href=&///?target=http%3A//wiki.apache.org/hadoop/PoweredBy& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Powered by&i class=&icon-external&&&/i&&/a&&/li&&/ul&&b&其他&/b&&ul&&li&Hadoop进化目标:开发部署傻瓜化,性能更强劲,最后为程序员标配。&/li&&li&核心都是被寡头控制的,记得一边文章说一流的公司卖标准,二流的公司卖技术,三 流的公司卖产品,H和C有最多的committer,自然就影响着整个Hadoop社区。&/li&&li&技术就是日新月异,还是多看看那些公司的博客,关注感兴趣的新产品,&a href=&///?target=http%3A///hadoop/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Hortonworks Stack&i class=&icon-external&&&/i&&/a&&/li&&li&在Hadoop系统中从头裸写MapReduce不现实了,ETL基本靠Hive,Pig, 还有&a href=&///?target=http%3A//www.cascading.org/documentation/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cascading&i class=&icon-external&&&/i&&/a&,&a href=&///?target=https%3A///twitter/scalding& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Scalding&i class=&icon-external&&&/i&&/a&&/li&&li&MapReduce并不是最优的,仅适合批处理,很多问题:JVM的启动overhead很大,小 Job更明显,数据必须先存储,不适合迭代计算,延迟高。DB学术圈讨论很久tradeoff 了,&a href=&///?target=http%3A//.cn/s/blog_62ags4q.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MapReduce: 一个巨大的倒退&i class=&icon-external&&&/i&&/a&&/li&&/ul&
Hadoop面试和学习小结 随着大数据的盛行,Hadoop也流行起来。面过一些公司,包括开发Hadoop :如Cloudera, Hortonworks, MapR, Teradata, Greenplum, Amazon EMR, 使用Hadoop的除了Google,数不胜数了.Hadoop 2.0转型基本无可阻挡,今年…
恕我直言,那些把MapReduce喷的一无是处的人真正读过MR的原始论文么?google 发布 mr 从来都不是为了强调 high performance 和 expressive ,
而是scalability. 更重要的是,给我们普及了工业届对真正意义上的「大数据」的理解。屌丝们知足吧,在04年论文出来之前,搞并行计算的人压根连 「容错」的概念都没有。站在今天这个时代去批判一个历史技术,无异于耍流氓。除此之外,大部分人都是通过 Hadoop 这个系统了解 MapReduce 的,但是hadoop 在现在看来无疑是一个非常糟糕的系统,无论是系统的设计还是编程语言的选择。hadoop中充满了各种 over engineering,比如说你一个计算框架搞什么资源调度?!搞什么job tracker?!这难道不是集群管理系统应该做的么?直到现在,hadoop社区才意识到这个问题,然后再去搞了一个Yarn. 可是人家 Mesos 几年前早就搞出来了。我亲自参与开发过 c++ 版本 mapreduce 的实现,我们的系统甚至可以比 spark 更快。而google 现在内部使用的 mapreduce,也早就不知道演变成了什么样子。&br&&br&每个系统都有自己的历史地位,一篇论文,一个系统带给我们更多的是一种思路,以及更深层次的,philosophy 层面的东西。而不是一个具体的系统实现。
恕我直言,那些把MapReduce喷的一无是处的人真正读过MR的原始论文么?google 发布 mr 从来都不是为了强调 high performance 和 expressive , 而是scalability. 更重要的是,给我们普及了工业届对真正意义上的「大数据」的理解。屌丝们知足吧,在04年论文出…
&p&日更新:&/p&&p&———————————————————————————————————————&/p&&p&我感觉很多朋友,对“大数据”、“机器学习”、“深度学习”等概念挺晕的,没有感官的认识,这里,我简单说一下:&/p&&p&
“大数据”、“人工智能”、“机器学习”、“神经网络”、“深度学习”。这几个词往往掺杂在一起,让人不知所云,这里我简单说一下,不求细节上100%准确,只求能给各位一个感官上的印象,明白说起这几词时,通常都是说什么。&/p&&p&
首先,“人工智能”这个词。大家说,什么是人工智能?每个人在自己心里,都有一个特定的人工智能定义。有人认为,老版《星际迷航》里“Datas上校”这个东西叫人工智能;有人认为《机器公敌》里机器人应该叫人工智能;有人认为电影异形里的“大卫”,这么个东西叫人工智能。近一点的,有人认为谷歌开发的下围棋的系统“AlphaGo”,很吊,这玩意是人工智能;谷歌大脑能通过自己看视频,自动识别出猫,这就人工智能了;还有公司,我们通过“人工智能”干了XXXX。。。。。。因此,可以看出,这个词大的没边,因此,真追究起来,谁要说这个词,除装逼外,你就当他什么都没说就行了。&/p&&p&
当前,“大数据”这个词,也跟“人工智能”这个词一样,大的没边,虚无飘渺的没边,谁要是说这个词而不说具体的东西,你也就当他什么都没说就好了。&/p&&p&
回过头来,我们再看“人工智能”这个词。究竟什么是人工智能?计算机的神级人物图灵给出了“图灵测试”,定义了人工智能——图灵测试(The Turing test)由艾伦·麦席森·图灵发明,指测试者与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问,进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有&a href=&///?target=https%3A///item/%25E4%25BA%25BA%25E7%25B1%25BB%25E6%2599%25BA%25E8%2583%25BD& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&人类智能&i class=&icon-external&&&/i&&/a&。(摘自百度百科)&/p&&p&
上面,图灵神人说神话,凡人听不懂。针对“人工智能”,用人话讲,如果,某个东西,具有了“学习”、“分类”、“预测”能力,我们就认为这个东西是智能的。比如,我们说人。我们说诸葛亮,料事如神(预测能力强)、神机妙算(“分类”强)。。。因此,诸葛亮很智能。&/p&&p&
其实,现实中很多问题,都可以转化为分类问题和回归问题,如何即“准”又“稳”的把事物分类,是我们追求。比如,我们根据一系列指标,把一个妹子分类为“漂亮”、“不漂亮”;把某件事根据一系列指标,分为“可以干”、“不可以干”;把某个人,分为“人品好,可以交”、“人渣,不可交”;这类就是二分类问题。也有多分类问题,比如,把一篇文章,分类到“财经新闻”、“娱乐八卦”、“武侠小说”、“黄色小说”。。。。等等多个类目下的一类中。&/p&&p&
因此,为了给编个有“智能”的软件,赋予它分类能力呢。简单,用编程语言语言里的判断语句都能行:&/p&&p&If XXX :&/p&&p&OOOO &/p&&p&elif XXXXX :&/p&&p&oooooo&/p&&p&else:&/p&&p&OOOOO&/p&&p&
各位看官也许会笑,这TMD算哪门子的智能。但是,在现实中,就这样用编程语言的特性,编出来的软件,在很多不懂计算机父辈们眼中,就很智能,就能把他们镇住。。。。。&/p&&p&
当然,这么low的方案,计算机的神级人物们,是不屑的。毕竟,现实太复杂,对这个复杂的现实建模,对复杂的事物分类,岂能是几个判断语句所能够描述的。所以,大神们,搞出来很多算法策略来搞这件事。这下算法,主流的也就那么多,比如说:决策树算法、随机森林算法、逻辑回归、SVM、朴素贝叶斯、K最近邻算法、K均值算法、Adaboost 算法、神经网络算法、马尔可夫算法,还有最近火的“深度学习”算法、增强对抗网络算法。。。等等。这些算都叫“机器学习”算法。&/p&&p&
讲到这里,各位看官,应该对我们经常讲的“人工智能”、“机器学习”、“深度学习”,这些虚无缥缈的词大概是什么意思,有个感官的认识了。&/p&&p&
好了,现在我们讨论“人工智能”、“机器学习”、“深度学习”等等这些词时,具体就讨论这些算法就行了,那些虚无缥缈的概念,留给装逼的人、想要吸引投资的人去说吧。&/p&&p&
从总体理论方向来说,来说,这些算法,大体上可分为两类,“神经网络”算法和“深度学习”算法,算作一类,其它的算法作为另一类。&/p&&p&
但是,不管怎么分类,这些算法要想正常的工作,对事物的分类能够达到实用的水平,两个条件是不可或缺的,那就是“数据”、“计算力”。计算力很好理解,这些算法,都比较复杂,没有强大的CPU、内存等硬件支撑,这些算法,要么不能运行,要么猴年马月也运行不完,给不出结果。如果你训练模型,利用这些算法编好程序后,扔给计算机,它花了半年才计算完,给你打印出结果。你心中,也一定是一万个“草泥马”飘过。。。。。对于数据的要求,这是因为,这些算法的背后的数学原理,大部分都跟概率论有关。各位看官,如果兴趣,可百度“VC维”理论,针对“深度学习”的可学习性的理论解释,人类现在也没有研究透,只知道这玩意挺管用,在很多方面效果挺好,科技前沿,给出的解释是用“泛函空间概率论”来解释。但不管怎么说,就是概率论,就是瞎猜。瞎猜嘛,当然是依据越多,猜的的越准,猜的越稳。也就是数据越多,这些算法就会猜的越准,猜的越稳。好了,现在“大数据”,就可以搀和进来了。没有数据,或者数据很少、数据纬度较少,不够详细,这些算法“巧妇”,也会无米下锅,做不出可口的饭菜的。&/p&&p&
有了所谓的“大数据”和云计算,我们就可以方便的命令这些算法“巧妇”们给我们做饭了。从‘数据’这个“米”的角度说,我们可以HDFS存储更多的米,更丰富的食材;从‘大数据组件’这个锅碗瓢盆的‘工具’角度来说,我们有了spark等组件(利用深度学习算法,比较强大的组件是TensorFlow),有了更强大的计算工具,我们可以利用这些组件调用这些高大上的分类算法,再加上所谓的“大数据”、“深度学习”、“机器学习”,就可以做出更好吃的饭了。从系统架构上来说,猜嘛。猜对、猜错都是很正常的,可能这么猜不对,换个参数、换个算法 重新猜一下,就猜对了。因此,也就有了“数据挖坑一身功,全靠调参”的说法。这就要求,我们的系统,有更好灵活性,方便我们对针对这些算法“休妻再娶”。&/p&&p&。。。。。。。。。。&/p&&p&
有了上面大体的介绍,针对“大数据”、“人工智能”、“深度学习”、“机器学习”等具体行业应用,我再简单说两句。&/p&&p&
以电商行业为例,有一个概念叫“用户画像”,它是很多系统的基础,比如推荐系统、精准广告系统、大数据风控系统的等等。&/p&&p&
用户画像,是什么呢。说到底,就是对用户的分类数据。比如说,ID ,性别:女,性格描述:萌妹子,性格特点描述,资产状况描述,信用状况描述,喜欢的颜色,钟爱的品牌,大姨妈的日期,上周的购物。。。。。。。。有了这些信息,我们就可以针对这个用户,进行精准的广告营销、精准的购物推荐、个性化的服务。。。。。。&/p&&p&
那么问题来了。现实中,这位妹子注册信息时,性别栏里,可能填的是“男”,年龄栏里填了“5”或者“150”。你怎么知道这个妹子,可能喜欢相宜本草的面膜,她又没明确告诉你。。。。&/p&&p&
没办法了,只能猜。如果,我们有了关于这位妹子的各类“大数据”,再结合上面的各种算法,就可以猜了。如果这个ID的用户,上购物网站时,经常浏览的是“胸罩”、“卫生巾”等女性用品,我们的算法(机器学习、深度学习等)把他猜成“女性”,是可以理解的。当然,如果是位暖男,为他女朋友、老婆买这些东西,也是可以理解的。如果我们再增加一个纬度的“大数据”,这个ID用户,最近经常看韩剧,那么他是女性可能性,就又提高了。再增加一个纬度的“大数据”,这个ID在某个评论里说“最近刚生完宝宝,听老公说XXXX,我觉的XXXX”。。。。这里,针对这个ID的画像,把他的性别改为“女”,是可以的,是有99.99%的把握的。但也无法排除0.01%的变态。。。。。&/p&&p&
这个例子中,就把“大数据”、“机器学习”等等热门的概念都搞一块了。。。&/p&&p&
实际工作的过程中,情况和限制,也就更多更复杂了。针对各类企业、每个企业,我想都在某些时刻,有去猜(也就是去分类)某些事情的需求。此时,找猜的“米”时,一看,之前很多数据没保存,无米下锅。没有人才,没多少人会利用这些牛逼的“算法+数据”去猜。更多是没有数据意识,针对马云口中“DT时代”,没有感官认识,不明白具体是什么意思。。。。。。&/p&&p&&br&&/p&&p&
在具体落地的解决方案过程中,数据收集、存储、计算工具等等方面,现在技术发展的还是可以的。再具体“怎么猜”(是利用if elif else与语句猜,是利用线性模型猜,还是利用“深度学习”猜)的过程中,那就要具体情况具体分析了:&/p&&p&
总共才两三中情况,看一眼就知道怎么回事,提炼出规则,编程成固定规则就行了,上深度学习,纯属脑子有病;&/p&&p&
但像BAT这种大公司,有很多牛叉的研究员,整天研究如何利用尽可能对的数据(“大数据”),比较牛逼的算法策略(比如“深度学习”等),尽可能多猜的更准、更稳。哪怕猜准确率提高1%,那么可能多销售几个亿的商品。。。。。&/p&&p&
目前,语音识别、机器翻译。等等,本质上,也是“猜”嘛。英语中某个句话猜成中文的意思,有30%准确率,用上深度学习后,猜对的可能性提高到了45%。。。。。某段录音,根据记录的音波,之前猜对概率是85%,积累的数据多了,用的算法牛逼了,参数调的好点了,猜对概率95%了,这就是进步啊。等到,你说依据话,计算机猜你的意思,猜对的概率是99%了,我想那时,你百度什么东西,就不用输关键词了,对这电脑说就行了。。。。&/p&&p&
但无论怎么样,即便是BAT、谷歌等大公司,前沿研究除外,能为资本家带来直接利润的机器学习算法,目前还是比较简单的机器学习算法为主,比如一些线性模型类的算法(我记得我第一次学线性回归时,在初中数学里的内容),所以,这些算法的原理也是比较简单的。上世界90年代各方面就研究的很透了,只不过那时候,人类积累的数据少(数据就在那里,每天都在产成,只不过,那是没有性价比高的记录手段)、计算机的计算能力不足。。。。。。至于更高大上一些的算法,比如深度学习等,主要用来对系统里的某一些环节改造,增加猜对的概率。严格意义说,跟所谓的“大数据”,没多少直接关系。即便是没有“深度学习”,用其他的算法,要想达到实用效果,所需要的数据量也不一定少。&/p&&p&
回望,很多概念,“火”与不“火”的历程也是有规律可循的。07、08、09年时,与“云”有关的很火,什么“公有云”、“私有云”、“混合云”,12、13、14年时,“大数据”很火;现在,16、17年,“机器学习”、“人工智能”很火。有了“云”架构,我们有了灵活手段的去调度硬件资源,所以要利用搞点事情啊,再加上谷歌的工程师发表了著名的三篇论文,全世界的工程师开发了相关软件;因此,后来的“大数据”火了,这时的“火”,更多是建立“数据仓库”等存储等阶段,针对数据利用、处理,也是普通简单算法范围,如统计一下数据,出一些Top榜什么的。。。。后来,有了积累了多数据、更多资源了,我们有什么理由不把跟牛逼的策略、算法搬出来,对数据挖的更深、利用的更好呢。。。。从中可以看出,这些概念火起来,是计算力的进步,是人类收集、存储、加工、处理、利用信息能力的进步。。。。&/p&&p&&br&&br&————————————————————————————————————————&br&&/p&&p&首先声明,本人现在杭州一家互联网公司做大数据平台架构师和数据分析师。因此,以下的回答,可能带有自己的视野局限,敬请各位看官理性地指教,讨论。&/p&&p&根据我个人的行业经验来看。现在很多人,对大数据的理解都有些偏了。目前,对大数据的主流看法就是&深度学习&,&人工智能&等很火,很高大上的东西,都需要大量的数据,所以大数据会怎样、怎样。。。。&br&&br&
其实,大数据的背后,是人类处理信息(也就是数据,大家不要认为大数据,这个概念中的&数据&,是12345等阿拉伯数字组成的东西,凡是能存电脑里的东西,都是数据)的IT系统的一次革命性升级。这次技术的升级,是继数据库系统后,人类处理数据手段和技能的提升。下面,我以一个例子,来说明我们信息处理手段的提升。&br&&br&
张三是个创业者,每晚到夜市摆摊。由于摊子很小,每天回家后,找一只笔,一个香烟盒子纸,就能把账算了、把货盘了,这时,凭借着一只铅笔,一张破纸,就能把该处理的数据信息处理了。后来,摊子稍微大了一点,张三到门口小超市花几块钱买了个计算器,每天在计算器&为零&的帮助下,再加上一只笔、一张纸把信息处理了。再后来,张三开了个小超市,他处理信息的能力也增强了,用上了Excel、word等软件来处理信息。后来,张三开开了个大超市,其信息处理工具也鸟枪换炮了,用上了进销存管理系统、财务管理系统、人事管理系统。。。。这些系统,在数据存储方面,用数据库,如mysql。在业务处理方面,招几个程序员,用php、python或java,写具体的业务处理逻辑(也就是当年张三在纸上写写画画的处理过程)。这一阶段的IT处理段位,是目前大多数中小企业所在的段位。可以看出,这个段位的IT系统和处理能力有以下不足:&br&&br&1、只能处理结构化数据,对大量非结构化数据(文字、语音、视频等),处理能力严重不足。&br&&br&2、能处理的数据量还是太小,比如,用张破纸,你处理10条数据没问题,给你个计算器,你处理100条数据没压力。用Excel,你处理10万条无压力。给你个mysql,你在千万条数据的级别范围内增删改查无压力。但是,当你要面对的数据是100亿条级别时,你的数据库、存储、业务处理代码等,就有可能分分钟闹毛病给你看。 注意:利用各种中间件构建分布式关系型数据库集群,是能应付的。此处,各位看官领会我说的什么意思就好,先不要纠结具体技术解决方案。&br&&br&3、处理的手段单一,只能跑程序员编好的程序,比较死板。只能按着代码逻辑跑,一点都不&智能&。&br&&br&4、从技术上讲,灵活性还是不足。你的进销存、财务、人事等系统。程序员编完,能用了,也就完了。没有重要问题和需求变更,也不会去频繁升级、重构和迭代更新。从这方面讲,也会造成企业在想要XX数据时,发现没有。想要XX功能时,发现要实现的成本太大。或者,在你的威严下,你手下的程序员辞职了,你满心委屈&我不就是想要个这么小、这么简单的功能么。这小子居然花了那么长时间弄,还TMD辞职了,90后,真是一代不如一代。。。。&。所以,这些,到最后,大多都不了了之。。。&br&&br&5、从具体的实际流程上看,流程太长、太慢。比如说,您是集团公司的老总,有一天突发奇想,想到了一个项目,想&看看相关数据&。此时,你的秘书帮你去搞数据了,北京分公司的数据,很快上来了,上海分公司的数据,秘书打了好几遍电话,才要来。山东分公司的说,我们这边忙着陪客户吃饭喝酒了,具体数据没收集呢,您稍等,我帮您问问、查一下。浙江分公司的,数据报上来了,刚放你办公桌上,你刚翻了一下,他们打电话说,数据报错了、漏报了,您稍等,我们组织人力物力,重新帮你核查。。。此时,时间上,少说也一个月过去了,还不一定保证数据都正确。数据收集上来,您也不用&分析&了。市场风云变幻,黄花菜都凉了。。。&br&&br&
.......&br&&br&鉴于此,大数据处理系统来了。有了hadoop、spark、storm、hbase、 Elasticsearch、zookeeper等等大数据工具搭建起来的数据处理集群,张三终于炮换导弹了。&br&&br&1、有了hdfs,张三可以把以前觉得没太大价值的数据保存起来。未来的事,谁知道呢,数据总是要的,说不定以后用的到呢。如果阿里巴巴没有保存、整理用户的交易数据等,花呗、借呗等业务,开展起来,简直就是做梦。巧妇难为无米之炊。&br&&br&2、有了spark等编程框架,你的业务处理流程,也更加灵活和牛逼了。你可以用python、java,scala等编写一些脚本似的数据分析程序,尽情地挖掘出有价值的东西。这一个个的job,写完后,扔给调度系统,定时,每天晚上让集群帮你跑出来就好了。挺灵活的。&br&&br&3、调用一些开发库,你可以玩一些机器学习等高大上的东西。出去吹牛逼也有料了。&br&&br&4、建立统一的数据处理中心,再加上互联网的力量,终于可以在可接受的时间范围内获得你想要的数据了,而且数据还能详细,方方面面的数据都有,最后还附有机器人&小优&的&智能&建议和温馨提示。&br&&br&5、借助比如storm等实时处理框架,很多结果可以秒级回馈。性能遇到瓶颈了,大不了加机器。反正一切都是分布式的。&br&&br&.......&/p&&p&我记得13、14年时,大数据最火的时候。在一次电视节目中,李彦宏面对杨澜,大谈大数据,并举例&谷歌利用大数据预测流感。。。。&等等balabala的一大通,全是忽悠套路,没一点干货!!我想大多数人,听到这些东西,一般都不care,说不准还暗暗的骂一句&草,这些关我鸟事&。。。&br&&br&
最近,谈起大数据,很多人都往&人工智能&等高大上的东西上。我想大多数人,特别是中小企业,也不会关心。那是BAT等大公司的事,我们公司小、数据少,业务也简单。&分析&,也是电脑不如人脑。因此,大多人,也是觉得,大数据或许是未来,但是,对我来说,似乎也没多大用处。如果,此人当时心情不好,还多半认为&大数据&,纯粹是瞎忽悠。&br&&br&
回到本次话题,针对&大数据能火多久&,这个问题,这就要看大数据的本质了。在我看来,我们业内目前讨论&大数据&,应该更倾向于看它背后的技术对当前企业IT系统的革新。就如同目前大多数企业以关系型数据库为中心的IT系统一样,现在,我们处理信息的手段中,又添加了新的成员。现在,如果你向老大建议,我们不要以关系型数据库为核心的各类&进销存&、财务等系统了,全体回退到以Excel、word来处理信息,我相信,他会分分钟扇死你。我相信,20年后,你向老板建议,我们放弃各类以大数据处理集群为核心的精准营销系统、智能客服系统、用户智能分析系统等等,大家集体回退到以纯关系型数据库为核心的时代;我相信,他也一定会分分钟扇死你。&/p&&p&
当前,我们对大数据的理解,越来越清晰和接地气。阿里巴巴已经把他们的大数据系统,改名为了&maxComputer&。从名字不难看出,大数据就是大电脑,这意味着更大的信息处理能力、更高的灵活性。。。&/p&&p&
大数据能火多久,如同穿越到上世纪80年代,去问个人电脑能火多久一样。现在,我们都不会认为&个人电脑&很&火&。因为,它已经成为了人类工具箱里一件强大的工具,提高了人类的生产力。我相信,&大数据&,也会成为我们的工具箱里的这么一样工具的。&/p&&p&
目前,看知乎里的答案。很多人讨论起大数据,很多人的看法,还是照搬教科书里的内容。其实,对真正大数据圈而言,大数据已经落地了。下了凡的七仙女,虽然是神仙,但也成为了农家媳妇,没太大讨论的必要了。大数据从几年前很火,到现在,从PPT上下凡到数据中心,也就没多大的讨论必要了。用就行了,有啥好瞎bb的。。。。。。&/p&
日更新:———————————————————————————————————————我感觉很多朋友,对“大数据”、“机器学习”、“深度学习”等概念挺晕的,没有感官的认识,这里,我简单说一下: “大数据”、“人工智能”、“机器…
&p&这是一个很好玩的问题。从某种程度而言,Scala是不善于处理大数据的。作为一个函数式语言,必须在内存消耗和性能消耗两者之间徘徊,而普通的命令式语言就并不会有这种问题。举个例子,从数据结构来看,函数式语言要求不能修改原有结构(如果修改了,就不再吻合Immutable这一黄金定律),对于普通的链表(链表List在函数式语言中比数组Array更常见),每当你做一次操作,比如增加元素,删减元素等等,照理说会生成一个新的链表,而非像过程式语言,直接通过指针对链表本身进行修改。为了让操作速度达到与过程式语言类似或者相匹配,函数式语言的天才们发明了很多种不同方法,比如用结构分享(Structural Sharing)的技巧来应付链表,每次操作只记录下那一项特殊操作,而不毁坏或者替代原有链表。对更高级一些的结构,比如哈希图(HashMap),普通命令式语言用哈希列表(HashTable)这种简单的方式来执行,但悲壮的函数式语言就必须依赖于2-3拇指树(2-3 Finger Trie)一类的高端结构来达到相同的操作效率。但虽然速度达到了,占用空间就成了一个问题。当命令式语言通过不停对同一个对象进行修改的同时,函数式语言却不停的生成新内容。所以虽然函数式语言在理论上(无限空间与无限时间),数学上,都是更高档次的语言,但在残酷的现实面前,却有时赶不上命令式语言。离散数学(Discrete Mathematics)中对时间的定义,只把Polynomial(多项式时间)和Exponential(指数级时间)分开,认为多项式时间在宇宙尺度上就已经足够快了,但在争分夺秒的实际程序中,多项式还完全不够,线性(Linear)时间都嫌长。&/p&&br&&p&为了让函数式语言达到函数式语言编程者们心目中“神”一样的地位,无数的东西被发明了出来,全世界第一个编译器就是为Lisp这个函数式语言发明的,这个编译器还自带全世界第一个垃圾处理器(Garbage Collection),第一个实现递归函数(1960年麦卡锡在ACM上发表了论文:《递回函数的符号表达式以及由机器运算的方式,第一部》),发明了树结构,动态类型(Dynamic Typing)——如今JavaScript, Python, Ruby, PHP等都非常依赖的动态类型,甚至还有条件语句。准确而言,现代编程几乎都是由函数式语言奠定的基础,所有命令式语言的高级功能,比如Java的反射,泛型,Java8的Lambda方程,Ruby的宏,全部都是函数式语言的馈赠。所以你想,当在你心目中,这个世界上最牛逼的东西居然内存和效率都拼不过比它挫的语言模式时,函数式的程序员能不恼怒吗?这恼怒带来了两点:1. 死不认账。函数式程序员绝对不会承认它们的语言效率或内存占用 比命令式语言糟糕;2. 拼命改进,最终又为计算机科学做出了无数贡献。&/p&&br&&p&所以说,如果Scala在内存和效率上似乎都不占太多优势(当然,越熟悉Scala,函数式编程能力越强的人,这两点都将不是问题,通过聪明的设计算法,选用正确的数据结构,速度和高效内存利用肯定和命令式语言的程序近似),为什么人们会选择Scala作为大数据的语言?这里涉及到几个原因:&/p&&br&&p&1. Scala 具有很完整又很强大的集合处理能力,准确而言是现代语言中最有优势的一个。Scala拥有庞大而完整的集合类库,比如Set, List, Vector, Tuple, Map,而有效的泛型能让你肆意组合这些类型得到新的类型,比如像这样的类别:List[Map[String, (Int, List[String)]]],这是一个链表,每个链表元素是一个映射,映射中用字符做key,另一个Tuple元组做value(值),这个元组的第一个元素是整数,第二个元素是一个链表,这样的集合在其他语言中不是不可以做到,但很难,想想在Java中定义个三元数组有多么令人恶心,并且让人难以直观理解:ArrayList&ArrayList&ArrayList&Integer&&&,并且Java还不支持元组的表达。Scala不仅有函数式语言对集合处理的先天优势:map, fold, zip, foreach, collect, filter等等,还有OOP面向对象语言的辅助函数(比如take(5)可以取得前五个元素,takeRight(5)是最后五个),这点上完虐Lisp或者Haskell这些也许在函数式表达上胜过Scala,但在简单省事以及有工业产出(Industrialized)能力上完全比不上Scala的语言。Scala对集合预制的辅助方法(Helper functions)数量之多甚至超过了Java。同时,Scala还提供immutable(不可变)结构与mutable(可变)结构,让程序员可以在命令式与函数式中自由切换。&/p&&br&&p&2. 物以类聚,人以群分。函数式语言以吸引天才闻名,一直作为“学院派”语言延存至今,麻省理工至今还有一门课专门教Lisp,斯坦福每学期邀请业界的Haskell高手前去讲课。四十年前,最火的研究项目是人工智能,很多聪明人进入了这个领域,所以Lisp成为了人工智能的程序语言首选。如今最火的领域就是大数据,以及数据处理,很多聪明人进入这个领域,他们都在一段时间内被Scala吸引,所以自然就选择Scala作为他们的语言,这和Scala本身适不适合大数据其实并没有太大关系,就跟函数式语言本不擅长从事IO开发(一句著名的谚语说,IO就像一个恐怖的黑盒子,总有一种方法让函数式的美妙失灵),但还有人用Haskell开发服务器一样,对于这些天才而言,你给一袋面粉他们都能造个原子弹,让Scala作为大数据开发语言,完全不是问题。&/p&&br&&p&3. 文章最前面我批评了函数式语言或者Scala的速度问题。但这其实不是问题。当C语言出来的时候,编译器水平并不高,无数写汇编的程序员纷纷斥责C语言速度缓慢,说C语言程序员不是真程序员。当年Java出来时,编译后的程序运行速度也非常慢,一直到Java1.3这个问题才有所好转。实际上,汇编语言的速度 & C语言速度 & Java速度。从这条线可以很明显的看出,越高级的语言速度越慢,Scala作为明显的比Java在进化树上爬的更高的语言,似乎有效率损失或内存管理问题是完全可以被解释的。并且在目前的所有测评中,Scala的速度并不比java慢,内存占用也大致持平。&/p&&br&&p&最后绕回题主的问题上。首先,Flink不是由Scala写的,Flink是由Java写的,只是提供了Scala接口(API)而已。Apache Spark确实是由Scala写的,但Spark最先是由加州伯克利实验室公布的,所以符合我所说的第二点。Scala的威力现在才要先开始显现出来,一堆新的大学实验室开始逐步普及Scala,很多高级库已经开始用Scala写就了,比如经典概率模型建立库Fi

我要回帖

更多关于 大数据能做什么 的文章

 

随机推荐