storm-yarn
概要
storm是一个近似于实时的计算框架,甩开hadoop上的原生mapreduce计算框架不只一条街。如果能将storm引入到hadoop中,对存储于hdfs的数据进行分析必然极大的提高处理性能。storm-yarn就是这样一个项目,由yahoo实现,目前已经开源。
除了storm-yarn试图将storm整合进hadoop,以提升hadoop的分析处理能力的尝试之外,Hortonworks也高调宣布在2014年推出整合了storm的hadoop发行版。当然Hortonworks的整合会基于storm-yarn,毕竟它们都属于yahoo系。
整合目的和优势
storm-yarn是来提升hadoop的处理分析能力,是对hadoop的增强,而非相反。
节选自Yahoo!开源运行在Hadoop上的Storm——Storm-YARN
- 提供了巨大的弹性潜力。实时处理的负载一般不恒定,而且是不可预测的。就其本身而言,为满足需求峰值,Storm会需要更多资源。将 Storm和批处理搭配使用,Storm需要资源时可以从批处理作业那里窃取,当资源需求下降时再把资源还回去。Storm-YARN为实现这一理念奠定 了基础。
- 很多应用将Storm用于低延时处理,而将Map/Reduce用于批处理,同时,两者之间会共享数据。通过将Storm放到物理上更接近数据源和/或同一流水线中其他组件的地方,可以减少网络传输,进而减少获取数据的总开销。
yarn介绍
Hadoop的核心部分由四个主要模块组成
- hadoop common 共用组件
- HDFS 文件系统,用于数据存储
- hadoop yarn 进行资源管理
- hadoop MapReduce 计算框架
从下图中可以看出hadoop1到hadoop2的转换
Yarn的架构图如下所示。
Yarn是一个two-tier solution,将资源管理(resource managing)和job monitoring分离开,放到不同的实体上进行处理。在Master Node上,专注于Resource方面的管理(目前仅支持cpu, memory),而将job monitoring由application master来负责。
目前关于yarn的中文资料首推董西成的《Hadoop技术内幕:深入解析YARN架构设计与实现原理》。
如何运行storm-yarn
处理逻辑简介
- 由yarn来分配nimbus和supervisor的运行时所需要的资源
- 真正将nimbus和supervisor带起来的是ApplicationMaster
小结
从开始研究storm源码到渐渐开始yarn框架和代码的学习说明当时选择一个小而精的开源入手逐步扩大研究范围的策略还是对的。
Trident-ML
楔子
或许谈起storm是大数据实时计算框架已经让你不明觉厉,如果说storm还可以跟机器学习算法(ml)有机的结合在一起,是不是更加觉着高大尚呢。trident-ml就是一个这样让人无限遐想的产品。
其实要讲trident-ml无非是要回答这样几个问题,
- 什么是ml
- 什么是trident
- 为什么要将trident用于ml
trident-ml的官方站点 https://github.com/pmerienne/trident-ml
什么是ml
关于什么是ML(Machine Learning)以及machine learning的常见算法有哪些,详见*中的介绍,要是觉着这解释不过瘾,那就来点有料的来自princeton大学的讲义
什么是trident
这个问题在本博的系列文章中已经屡次提及并有详尽的解释。
为什么要将trident和ml绑定在一块
Machine Learning机器学习库运行在trident之上使得分析的结果更为实时的反映出来,加快了调整步骤。举个例子吧,比如在逛京东或是amazon,通过这个实时的机器学习过程,后台服务可以给客户找到更为精确的推荐产品。
有什么同类的产品么
在软件这个世界里,从来不存在什么唯一,即然有trident-ml,那么就能找到同类的产品。
谈到机器学习,你可能听说过在该领域最牛的处理语言R。到了这里,想必已经料到与trident-ml相竞争的是一个什么东东了,对那就是trident-r。
trident-r的官方地址 https://github.com/quintona/storm-r
与trident-ml相比,trident-r表现的不够活跃,略显沉闷。
总结
关于apache storm,本博已经花了相当的篇幅来聊它的里里外外。从明儿开始,换个话题聊聊了。或者是yarn,或者是linux kernel或者是server application,谁知道呢?
Apache Flink初接触
Apache Flink闻名已久,一直没有亲自尝试一把,这两天看了文档,发现在real-time streaming方面,Flink提供了更多高阶的实用函数。
用Apache Flink实现WordCount
- 下载Apache Flink 0.10.1
-
启动local模式
bin/start-local.sh
-
运行scala-shell
bin/start-scala-shell.sh remote localhost 6123
Flink中JobManager的默认监听端口是6123
-
wordcount
val text = env.fromElements("Whether The slings and arrows of outrageous fortune") val counts = text.flatMap{ _.toLowerCase.split("\\W+")}.map{ (_,1)}.groupBy(0).sum(1) counts.print