当前位置: 首页 > news >正文

hadoop生态系统

【转】

近些年来Hadoop生态系统发展迅猛,它本身包含的软件越来越多,同时带动了周边系统的繁荣发展。尤其是在分布式计算这一领域,系统繁多纷杂,时不时冒出一个系统,号称自己比MapReduce或者Hive高效几十倍,几百倍。有一些无知的人,总是跟着瞎起哄,说Impala将取代Hive,Spark将取代Hadoop MapReduce等。本文则从问题域触发,解释说明Hadoop中每个系统独特的作用/魅力以及它们的不可替代性。

Hadoop作为一个生态系统,每个系统只解决某一个特定的问题域(甚至可能很窄),这也是Hadoop的魅力所在:不搞统一型的一个全能系统,而是小而精的多个小系统。本文重点讨论分布式计算领域的几个开源系统可以解决的问题域。

(1)MapReduce:古老的分布式计算框架,它的特点是扩展性、容错性好,易于编程,适合 离线数据处理,不擅长流式处理、内存计算、交互式计算等领域。MapReduce网址是: http://hadoop.apache.org/

(2)Hive:披着SQL外衣的MapReduce。Hive是为方便用户使用MapReduce而在外面包了一层SQL,由于Hive采用了SQL,它的问题域比MapReduce更窄,因为很多问题,SQL表达不出来,比如一些数据挖掘算法,推荐算法、图像识别算法等,这些仍只能通过编写MapReduce完成。Hive网址是: http://hive.apache.org/

(3)Pig:披着脚本语言外衣的MapReduce,为了突破Hive SQL表达能力的限制,采用了一种更具有表达能力的脚本语言PIG。由于pig语言强大的表达能力,Twitter甚至基于Pig实现了一个大规模机器学习平台(参考Twitter在SIGMOD2012的文章“Large-Scale Machine Learning at Twitter”)。Pig网址是: http://pig.apache.org/

(4)Stinger Initiative(Tez optimized Hive):Hortonworks开源了一个DAG计算框架Tez,该框架可以像MapReduce一样,可以用来设计DAG应用程序,但需要注意的是,Tez只能运行在YARN上。Tez的一个重要应用是优化Hive和PIG这种典型的DAG应用场景,它通过减少数据读写IO,优化DAG流程使得Hive速度提供了很多倍。(Stinger正在开发中,Tez代码: https://svn.apache.org/repos/asf/incubator/tez/branches/)

(5)Spark:为了提高MapReduce的计算效率,伯克利开发了spark,spark可看做基于内存的MapReduce实现,此外,伯克利还在Spark基础上包了一层SQL,产生了一个新的类似Hive的系统Shark,但目前Spark和Shark尚属于实验室产品。Spark网站是: http://spark-project.org/

(6)Storm/S4:Hadoop在 实时计算/流式计算领域(MapReduce假设输入数据是静态的,处理过程中不能被修改,而流式计算则假设数据源是流动的,数据会源源不断流入系统),一直比较落后,还好,Twitter开源的Storm和yahoo!开源的S4弥补了这一缺点,Storm在淘宝,mediaV等公司得到广泛的应用。Storm网址是: http://storm-project.net/,S4网址是: http://incubator.apache.org/s4/

(7)Cloudera Impala/Apache drill:Google Dremel的开源实现,也许是因为 交互式计算需求太过强烈,发展迅猛,impala仅用了一年左右便推出1.0GA版本。这种系统适用于交互式处理场景,最后产生的数据量一定要少。Impala尽管发布了1.0版本,但在容错性、扩展性、支持自定义函数等方面,有很长的路要走。Cloudera Impala网址是:https://github.com/cloudera/impala,Apache drill网址是:http://incubator.apache.org/drill/。

Hortonworks将应用需求进行了如下划分:

映射到上面几种系统,可知:

(1)实时应用场景(0~5s):Storm、S4、Cloudera Impala,Apache Drill等;

(2)交互式场景(5s~1m):这种场景通常能要求必须支持SQL,则可行系统有:Cloudera Impala、Apache Drill、Shark等;

(3)非交互式场景(1m~1h):通常运行时间较长,处理数据量较大,对容错性和扩展性要求较高,可行系统有:MapReduce、Hive、Pig、Stinger等;

(4)批处理场景(1h+):通常运行时间很长,处理数据量很大,对容错性和扩展性要求很高,可行系统有:MapReduce、Hive、Pig、Stinger等。

相关文章:

  • influxDB 变换类函数
  • C# Android 开发中使用 Sqlite.NET ORM
  • 大数据到底怎么学:数据科学概论与大数据学习误区
  • 选项卡TAB
  • 你想快速成为大数据工程师?
  • 【USACO4.2】草地排水Drainage Ditches(最大流)
  • 如何快速学习大数据挖掘分析(个人观点)
  • 人工智能与大数据开发的12个注意事项
  • GuozhongCrawler系列教程 (2) CrawTaskBuilder具体解释
  • 如何利用数据挖掘告别单身
  • 为何大数据开发师的工资能这么高
  • BZOJ2242 SDOI2011 计算器
  • 关于反爬虫,看完这篇文章就够了
  • 使用.NET Reflector 查看Unity引擎里面的DLL文件
  • 大数据从业者应该知道的开源工具(全)
  • 2017-09-12 前端日报
  • css的样式优先级
  • Docker: 容器互访的三种方式
  • go append函数以及写入
  • JavaScript 基础知识 - 入门篇(一)
  • JS实现简单的MVC模式开发小游戏
  • js写一个简单的选项卡
  • storm drpc实例
  • 关于extract.autodesk.io的一些说明
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 解决iview多表头动态更改列元素发生的错误
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 如何优雅地使用 Sublime Text
  • 携程小程序初体验
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​学习一下,什么是预包装食品?​
  • # 飞书APP集成平台-数字化落地
  • #define、const、typedef的差别
  • (04)odoo视图操作
  • (C++20) consteval立即函数
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二)Linux——Linux常用指令
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (转)Google的Objective-C编码规范
  • (转)h264中avc和flv数据的解析
  • (转)jQuery 基础
  • (转)我也是一只IT小小鸟
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .gitignore文件---让git自动忽略指定文件
  • .NET Micro Framework初体验
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .net下简单快捷的数值高低位切换
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [Android] 修改设备访问权限
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [BZOJ3757] 苹果树
  • [C++]打开新世界的大门之C++入门