大数据分析:机器学习算法实现的演化
本文翻译自《BIG DATA ANALYTICS BEYOND HADOOP》
我将会对机器学习算法的不同的实现范式进行讲解,既有来自文献中的,也有来自开源社区里的。首先,这里列出了目前可用的三代机器学习工具。
本文翻译自《BIG DATA ANALYTICS BEYOND HADOOP》
我将会对机器学习算法的不同的实现范式进行讲解,既有来自文献中的,也有来自开源社区里的。首先,这里列出了目前可用的三代机器学习工具。
本文翻译自《BIG DATA ANALYTICS BEYOND HADOOP》译者:许巧辉
另一个来自Google的重要工具,看起来超越了Hadoop MR——Pregel框架实现了图形计算(Malewicez et al.2010)。在Pregel中的计算是由一系列迭代组成的,被称为supersteps。图上的每个顶点都与一个用户定义的计算函数相关联;Pregel确保每个superstep在图的每条边上并发调用用户定义的计算函数。顶点可通过边发送消息,并且顶点间可交换值。这也是个全局同步——所有操作必须在用户定义的函数结束后才能继续。熟悉BSP的读者可以看出为什么Pregel是BSP优秀的例子——一组实体在用户定义的函数中使用全局锁并行计算,并且能够进行消息交换。
阅读全文
原文链接 作者: PATRICK PESCHLOW ;译者:严亮
本部分,我们将关注堆(heap) 中一个主要区域,新生代(young generation)。首先我们会讨论为什么调整新生代的参数会对应用的性能如此重要,接着我们将学习新生代相关的JVM参数。
单纯从JVM的功能考虑,并不需要新生代,完全可以针对整个堆进行操作。新生代存在的唯一理由是优化垃圾回收(GC)的性能。更具体说,把堆划分为新生代和老年代有2个好处:简化了新对象的分配(只在新生代分配内存),可以更有效的清除不再需要的对象(即死对象)(新生代和老年代使用不同的GC算法)
通过广泛研究面向对象实现的应用,发现一个共同特点:很多对象的生存时间都很短。同时研究发现,新生对象很少引用生存时间长的对象。结合这2个特点,很明显 GC 会频繁访问新生对象,例如在堆中一个单独的区域,称之为新生代。在新生代中,GC可以快速标记回收”死对象”,而不需要扫描整个Heap中的存活一段时间的”老对象”。
原文链接 ,原文作者: Javin Paul , 译者:赵峰
在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的。他们会问面试者很多令人混淆的Java线程问题。面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面。用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的。下面这些是我在不同时间不同地点喜欢问的Java线程问题。我没有提供答案,但只要可能我会给你线索,有些时候这些线索足够回答问题。现在引用Java5并发包关于并发工具和并发集合的问题正在增多。那些问题中ThreadLocal、Blocking Queue、Counting Semaphore和ConcurrentHashMap比较流行。
本文翻译自《BIG DATA ANALYTICS BEYOND HADOOP》译者:许巧辉
首先,我要衷心感谢Vineet Tyagi、AVP和Impetus的创新实验室主管。Vineet对我帮助很大,并促使我写这本书。在6、7月份,每个工作日他给我3个小时的时间写作本书,这是帮助我完成本书的关键。任何学术活动都要专门花费很多时间——这时候就得加倍努力,因为我必须在工作之余写作。Vineet令写作成为我工作的一部分。
我也想对Pankaj Mittal、CTO和SVP、Impetus表示感谢,他对研发的全心支持,像我这样的研发全职工作。荣誉对他来说,就是Impetus能够有一个无支付和收入压力的研发团队。这真的释放了我并有助于我专注于研发。在IT行业工作,写书是一个艰巨的任务。感谢Pankaj实现这点及类似的活动。
阅读全文
本文翻译自《BIG DATA ANALYTICS BEYOND HADOOP》译者:吴京润
译者注:本文是本书第一章的开头,第一章其它部分由其他人翻译。
你可能是一个视频服务提供商,而你想基于网络环境动态的选择合适的内容分发网络来优化终端用户的体验。或者你是一个政府监管机构,需要为互联网页进行色情或非色情的分类以便过滤色情页面,同时还要做到高吞吐量以及实时性。或者你是一个通讯/移动服务提供商——要么你在这样的公司工作——而你担心客户流失(客户流失意味着,老用户离开而选择竞争对手,或者新用户加入竞争对手)。你一定非常想知道前一天有哪些客户在tweeter上抱怨你的服务。或者你是个零食店主,而你非常想对你的客户做购买预测,这样你就可以为你商品做更多有针对性的促销活动,并期望销售额由此带来的增长。或者你是一家医疗保险公司,当务之急是计算某位客户明年住院的概率,以便适当的修改的保费。或者你是一家金融产品公司的CTO,而公司希望拥有实时交易/预测算法,帮助确认损益表底线。或者你为一家电子制造公司工作,而你想在试运行期间预测故障、查明故障根源,以便在后来的实际运行中有效。这要归功于大数据分析创造的新世界。 阅读全文
本文翻译自《BIG DATA ANALYTICS BEYOND HADOOP》译者:吴京润 校对:方腾飞
我试图给人们学习大数据留下的一点深刻印象:尽管Apache Hadoop很有用,而且是一项非常成功的技术,但是这一观点的前提已经有些过时了。考虑一下这样一条时间线:由谷歌实现的MapReduce投入使用的时间可追溯到2002年,发表于2004年。Yahoo!于2006年发起Hadoop项目。MR是基于十年前的数据中心的经济上的考虑。从那时以来,已经有太多的东西发生了变化:多核心处理器、大内存地址空间、10G网络带宽、SSD,而至今,这已经产生足够的成本效益。这些极大改变了在构建可容错分布式商用系统规模方面的取舍。 阅读全文
声明:本文是《Netty 权威指南》的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文。
在开始本节之前,我先讲一个亲身经历的故事:曾经有两个项目组同时用到了NIO编程技术,一个项目组选择自己开发NIO服务端,直接使用JDK原生的API,结果2个多月过去了,他们的NIO服务端始终无法稳定,问题频出。由于NIO通信是它们的核心组件之一,因此,项目的进度受到了严重的影响,领导对此非常恼火。另一个项目组直接使用Netty作为NIO服务端,业务的定制开发工作量非常小,测试表明,功能和性能都完全达标,项目组几乎没有在NIO服务端上花费额外的时间和精力,项目进展也非常顺利。
这两个项目组的不同遭遇提醒我们:开发出高质量的NIO程序并不是一件简单的事情,除去NIO固有的复杂性和BUG不谈,作为一个NIO服务端需要能够处理网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写等等,如果你没有足够的NIO编程经验积累,一个NIO框架的稳定往往需要半年甚至更长的时间。更为糟糕的是一旦在生产环境中发生问题,往往会导致跨节点的服务调用中断,严重的可能会导致整个集群环境都不可用,需要重启服务器,这种非正常停机会带来巨大的损失。
从可维护性角度看,由于NIO采用了异步非阻塞编程模型,而且是一个IO线程处理多条链路,它的调试和跟踪非常麻烦,特别是生产环境中的问题,我们无法有效调试和跟踪,往往只能靠一些日志来辅助分析,定位难度很大。
声明:本文是《Netty 权威指南》的样章,感谢博文视点授权并发编程网站发布样章,禁止以任何形式转载此文。
为了防止由于对一些技术概念和术语的理解或者叫法不一致引起歧义,本小节特意对本书中的专业术语或者技术用语做下声明,如果它们与其它的一些技术书籍术语不一致,请以本小节的解释为准。
很多人喜欢将JDK1.4提供的NIO框架称为异步非阻塞IO,但是,如果严格按照Unix网络编程模型和JDK的实现进行区分,实际上它只能被称为非阻塞IO,不能叫异步非阻塞IO。在早期的JDK1.4和1.5 update10版本之前,JDK的Selector基于select/poll模型实现,它是基于IO复用技术的非阻塞IO,不是异步IO。在JDK1.5 update10和linux core2.6以上版本,sun优化了Selctor的实现,它底层使用epoll替换了select/poll,上层的API并没有变化,我们可以认为是JDK NIO的一次性能优化,但是它仍旧没有改变IO的模型。相关优化的官方说明如下:
并发是一种能并行运行多个程序或并行运行一个程序中多个部分的能力。如果程序中一个耗时的任务能以异步或并行的方式运行,那么整个程序的吞吐量和可交互性将大大改善。现代的PC都有多个CPU或一个CPU中有多个核。是否能合理运用多核的能力将成为一个大规模应用程序的关键。
英文原文链接,译文链接,原文作者:James Bloom,译者:有孚
明白Java代码是如何编译成字节码并在JVM上运行的非常重要,这有助于理解程序运行的时候究竟发生了些什么。理解这点不仅能搞清语言特性是如何实现的,并且在做方案讨论的时候能清楚相应的副作用及权衡利弊。
本文介绍了Java代码是如何编译成字节码并在JVM上执行的。想了解JVM的内部结构以及字节码运行时用到的各个内存区域,可以看下我前面的一篇关于JVM内部细节的文章。
感谢支付宝同事[易鸿伟]在本站发布此文。
上文netty-mina深入学习与对比(一)讲了对netty-mina的线程模型以及任务调度粒度的理解,这篇则主要是讲nio编程中的注意事项,netty-mina的对这些注意事项的实现方式的差异,以及业务层会如何处理这些注意事项。
java nio如果是non-blocking的话,在每次write(bytes[N])的时候,并不会将N字节全部write出去,每次write仅一部分(具体大小和tcp_write_buffer有关)。那么,mina和netty是怎么处理这种情况的呢?
本文翻译自《Getting Started With Storm》译者:吴京润 编辑:郭蕾 方腾飞
本书的译文仅限于学习和研究之用,没有原作者和译者的授权不能用于商业用途。
译者序
Storm入门终于翻译完了。首先感谢并发编程网同意本人在网站上首发本书译文,同时还要感谢并发编程网的各位大牛们的耐心帮助。这是本人翻译的第一本书,其中必有各种不足请诸位读者朋友不吝斧正。
译完此书之后,我已经忘记了是如何知道的Storm这个工具了。本人读过的所有技术书籍大部分都是在地铁上完成的,现在已经成了习惯。最近发现自己有一阵子没有看书,那个时候大数据已经相当火热,我就想找一些讲大数据分析的书来读一读,虽然一直没有机会接触大数据的工作,不过做一些技术储备也是好的。于是上谷歌和亚马逊用“大数据”、“实时分析”这类关键词搜索相关的技术文章和书籍。然后就知道了Storm,可惜一直没有找到中文的相关内容,只找到这一本《Getting Started with Storm》。可惜本人英文词汇量实在太少,书买来之后一直束之高阁,后来突发奇想我为什么不利用业余时间把这本书翻译了呢?于是由本人完成的《Getting Started with Storm》在并发编程网面世了。在本人之前已有人在CSDN上完成了本书除附录以外的全部翻译,并且有了PDF版。不过既然已经开始就不忍中途放弃了,所以一直坚持把本书译完。再次感谢并发编程网的朋友们的支持。