阅读更多

21顶
0踩

互联网

转载新闻 Hadoop:用还是不用?

2013-10-15 11:34 by 副主编 WnouM 评论(8) 有14299人浏览
当人们提到“大数据”或是“数据分析”等相关问题的时候,会听到脱口而出的回答:Hadoop!Hadoop通常被认定是能够帮助你解决所有问题的唯一方案。

实际上Hadoop被设计和建造出来,是用来解决一系列特定问题的。对某些问题来说,Hadoop至多算是一个不好的选择。对另一些问题来说,选择Hadoop甚至会是一个错误。对于数据转换的操作,或者更广泛意义上的抽取-转换-装载的操作(译者注:Extraction Transformation Load,ETL,数据仓库中对数据从初始状态到可用状态处理过程的经典定义), 使用Hadoop系统能够得到很多好处,但是如果你的问题是下面5类之中的一个的话,Hadoop可能会是一不合适的解决方案。

1. 对于大数据的渴望

很多人相信他们拥有正真“大”的数据, 但通常情况并非如此。 当考虑数据容量和理解大多数人对“大数据”处理的想法的时候, 我们应当参考这篇研究论文, 没有人会因为买了一个集群的服务器而被辞退,它告诉了我们一些有趣的事实。 Hadoop是被设计成用来处理在TB或PB级别的数据的, 而世界上大多数的计算任务处理的是100GB以下的输入数据。(Microsoft和Yahoo在这个数据统计上的中位数是14GB,而90% Facebook的任务处理的是100GB以下的数据)。对于这样的情况来说, 纵向扩展的解决方案就会在性能上胜过横向扩展(scale-out)的解决方案。

(译者注:纵向扩展scale-up通常是指在一台机器上增加或更换内存、CPU、硬盘或网络设备等硬件来实现系统整体性能的提升, 横向扩展(scale-out)指的是通过在集群中增加机器来提升集群系统整体性能的提升。论文中比较了对Hadoop系统进行各种纵向扩展和横向扩展之后, 在性能指标上进行评测的试验。结论是在某些情况下在一台机器上的纵向扩展会比在Hadoop集群中增加机器得到更高的系统性能,而且性价比会更好。这个结论打破了大多数人对Hadoop系统的简单认识, 那就是一定要用若干廉价的机器组成集群才能到达最好的整体性能。)

所以你需要问自己:

  • 我是否有超过几个TB的数据?
  • 我是否有稳定、海量的输入数据?
  • 我有多少数据要操作和处理?
2. 你在队列中

当你在Hadoop系统中提交计算任务的时候, 最小的延迟时间是1分钟 。 这意味系统对于客户的商品购买信息要花1分钟的时间才能响应并提供相关商品推荐。这要求系统有非常忠实和耐心的客户, 盯着电脑屏幕超过60秒钟等待结果的出现。 一种好的方案是将库存中的每一件商品都做一个预先的相关商品的计算, 放在Hadoop上。 然后提供一个网站,或者是移动应用来访问预先存储的结果,达到1秒或以下的即时响应。 Hadoop是一个非常好的做预先计算的大数据引擎。 当然,随着需要返回的数据越来越复杂,完全的预先计算会变得越来越没有效率。

所以你需要问自己:

  • 用户期望的系统响应时间大概在什么范围?
  • 哪些计算任务是可以通过批处理的方式来运行的?
(译者注:原作者应该是用了B2C电子商务网站上经典的商品推荐功能作为用例,描述如何用Hadoop实现这个功能。)

3. 你的问题会在多少时间内得到响应

对于要求实时响应查询的问题来说,Hadoop并不是一个好的解决方案。Hadoop的计算任务要在map和reduce上花费时间, 并且在shuffle阶段还要花时间。 这些过程都不是可以在限定时间内可以完成的, 所以Hadoop并不适合用于开发有实时性需求的应用。一个实际的例子是,在期货或股票市场的程序化交易系统(Program Trading)中用到的成交量加权平均价格(Volume-weighted average price,VWAP)的计算,通常是实时的。这要求交易系统在限定时间内将结果给到用户,使得他们能够进行交易。

(译者注:Hadoop的MapReduce中的shuffle过程指的是将多个map任务的结果分配给一个或多个reduc任务是的数据洗牌和分配的操作,这篇blog解释的比较详细:《MapReduce:详解Shuffle过程》。 这里的用例是在投资银行的程序交易中,如何计算股票或期货交易的基准价格。 这样的计算我觉得每次对数据的查询响应时间应该是在100ms以下的,详见算法交易成交量加权平均价。关于这个例子,相信投行的同学们应该有更多的发言权。)

对数据分析人员来说,他们实际上非常想使用SQL这样的查询语言的。Hadoop系统并不能很好地支持对存储在Hadoop上的数据的随即访问 。即便你使用了HIVE来帮助将你的类似SQL的查询转换成特定MapReduce计算任务的时候, 数据的随机访问也不是Hadoop的强项。Google的Dremel系统(和它的扩展, BigQuery系统)被设计成能够在几秒中之内返回海量的数据。启示SQL还能够很好地支持数据表之间的各种join操作。 另外一些支持实时响应的技术方案包括,从Berkley 加州分校(University of California, Berkeley)的AmpLab诞生的Shark项目, 以及Horntoworks领导的Stinger项目等。

所以你需要问自己:

  • 你的用户和分析人员期望的数据访问的交互性和实时性要求是怎样的?
  • 你的用户希望要能够访问TB级别的数据吗,还是只需要访问其中的一部分数据?
(译者注:Apache Hive 是Hadoop生态系统中的一个开源项目,其主要目的是在Hadoop系统上提供接近ANSI SQL的数据操作,以方便熟悉SQL语言的数据分析人员对Hadoop上的数据进行查询。Dremel 系统是Google开发的支持大数据的实时查询系统,它利用了精心设计的列式存储结构和大规模并行查询的机制, 在测试中能够到达在3秒内在分析和查询1PB数据的性能(英文论文中文翻译 )。 BigQuery是Google基于Dremel开发出的开放给开发人员的SaaS服务,可以对大量数据进行操作  。Berkeley Data Analytics Stack, BDAS 是AmpLab提供的基于Hadoop的大数据平台, 包含多个开源项目, 详见https://amplab.cs.berkeley.edu/software/。Spark项目是BDAS中的一个项目, 它使用Scala语言开发,提供了类似于SQL的数据操作接口,完全兼容Hive。其主要的特点是利用底层的Spark将查询翻译为具体的计算任务。Spark会通过大量使用Hadoop集群中结点上内存的方式来进行数据缓存和在内存中进行实时计算, 达到加速查询和计算的目的。详见http://shark.cs.berkeley.edu/。Hortonworks是目前几家专注于提供基于Hadoop的大数据系统和应用的公司之一, Stinger是用来  Horontoworks提出的为了提升Hive查询性能的一系列在基于Hadoop的项目和改进的总称,其主要方法是优化Hive的文件存储格式以及针对Hive的查询请求进行分析优化。)

我们应该认识到,Hadoop是在批处理的模式下工作的。 这意味着当有新的数据被添加进来的时候, 数据处理的计算任务需要在整个数据集合上重新运行一遍。所以,随着数据的增长,数据分析的时间也会随之增加。 在实际情况下,小块新数据的增加、单一种类的数据更改或者微量数据的更新都会实时地发生。通常, 商业程序都需要根据这些事件进行决策。 然而,不论这些数据多么迅速地被输入到Hadoop系统,在Hadoop处理这些数据的时候,仍然是通过批处理的方式。Hadoop 2.0的MapReduce框架YARN承诺将解决这个问题。 Twitter使用的Storm平台是另一个可行的、流行的备选方案。将Storm和例如Kafka这样的分布式消息系统结合在一起,可以支持流数据处理和汇总的各种需求。痛苦的是,目前Storm并不支持负载平衡,但是Yahoo的S4版本中会提供。

所以你需要问自己:

  • 我的数据的生命周期是多长?
  • 我的业务需要多迅速地从输入数据中获得价值?
  • 对我的业务来说响应实时的数据变化和更新有多重要?
实时性的广告应用和收集传感器的监控应用都要求对流数据的实时处理。 Hadoop以及之上的工具并不是解决这类问题的唯一选择。 在最近的Indy 500车赛中,迈凯轮车队在他们的ATLAS系统中使用了SAP的HANA内存数据库产品来进行数据分析,并结合Matlab来进行各种模拟,对比赛中实时得到的赛车遥测数据进行分析和计算。很多数据分析人员认为,Hadoop的未来在于能够支持实时性和交互性的操作。

(译者注:YARN是Hadoop2.0采用的新不同于MapReduce的资源管理和任务处理的框架,它号称能够支持比MapReduce更广的编程模型, 同时实现对实时查询和计算的任务的支持,详见http://hortonworks.com/hadoop/yarn/ 。Storm是由Twitter主导的开源项目, 是一种分布式数据处理系统,其主要特点是能够很好地支持实时性要求高的流数据处理,详见http://storm-project.net  。淘宝和阿里巴巴都在使用Storm。Simple Scalable Streaming System, S4 是由Yahoo创建的另外一个实时流数据处理的分布式系统,详见http://incubator.apache.org/s4/ 。这里有一篇网页引用了很多比较Yahoo S4和Storm的文章,《Comparing Yahoo! S4 and Storm for Continuous Stream Processing》。Kafka是Apache 的一个开源项目,http://kafka.apache.org/。HANA是 SAP推出的商业产品,是可一个支持横向扩展的内存数据库解决方案,可以支持实时的大数据分析和计算。详见http://www.sap.com/HANA。Matlab是Mathworks公司开发的一个用于科学计算的开发类产品, www.mathworks.com/products/matlab. McLaren 车队是著名的英国F1车队, 它是F1方程式比赛中一支非常成功的队伍。同时他们也参加美国著名的Indy 500赛车比赛。他们使用大数据平台处理赛车数据来提高赛车成绩的故事可以看这篇文章:The Indy 500: Big Race, Bigger Data

4. 我才和我的社交网络分手

当数据能够被分解为键值对,又不用担心丢失上下文或者某些数据之间隐性关系的时候,Hadoop,特别是MapReduce框架,是最好的选择。但是图这样的数据结构中包含着各种隐性的关系, 如图的边、子树 、节点之间的父子关系、权重等,而且这些关系并非都能在图中一个结点上表示。这样的特性就要求处理图的算法要在每一次的迭代计算中加入当前图的完整或部分的信息。 这样的算法基本上用MapReduce的框架是不可能实现的,即便能够实现也会是一种很迂回的解决方案。 另外一个问题是如何制定将数据切分到不同结点上的策略。如果你要处理的数据的主要数据结构是图或者是网络, 那么你最好选择使用面向图的数据库,比如NeoJ或者Dex。或者你可以去研究一下最新的Google Pregel 或者Apache Giraph项目。

所以你需要问自己:

  • 我的数据的底层结构是否和数据本身一样重要?
  • 我希望从数据的结构中得到的启发和见解,是否和数据本身一样重要, 甚至更重要?

(译者注:NeoJ 拥有商业和GPL双许可证模式,Dex是商业产品。Apache Giraph 项目 是根据Google Pregel论文开源实现,是用来分析社交网络这样可以被抽象为图或网络数据结构的大数据处理平台。 )

5. MapReduce的模具

很多的计算任务、工作及算法从本质上来说就是不适合使用MapReduce框架的。 上一章中已经谈到了其中一类的问题。另一类的问题是,某些计算任务需要上一步计算的结果来进行当前一步的计算。一个数学上的例子就是斐波那契数列的计算。 某些机器学习的算法,如梯度和最大期望等,也不是很适合使用MapReduce的模式。很多研究人员已经对实现这些算法中需要的特定优化和策略(全局状态,计算时将数据结构传入进行引用等)给出了建议,但是如果用Hadoop来实现具体算法的话,还是会变得很复杂而且不易被理解。

所以你需要问自己:

  • 我的业务是否对特定的算法或者领域相关的流程有非常高的要求?
  • 技术团队是否有足够的能力和资源来分析算法是否可以使用MapReduce框架?
(译者注:梯度方法,gradient method,通常用于数学优化计算中。最大期望算法,maximization expectation algorithm,通常用于概率模型及相应的机器学习算法中)

除此之外,需要考虑另外一些情况,比如,数据总量并不大,或者数据集虽然很大,但主要是由上亿的小文件组成,而且不能拼接(如,许多图形文件需要以不同的形状被输入进来)。正如我们之前说到的,对于那些不适合使用MapReduce分割、合并原则的计算任务,如果用Hadoop来实现他们的话,会让Hadoop的使用变得大费周折。

现在我们已经分析了在哪些情况下Hadoop不合适,让我们看一下在哪些情况下使用Hadoop是正确的选择。

你需要问自己,你的组织是否:

  • 想要从一堆文本格式的日志文件中抽取信息?
  • 想要将大多数是非结构化或者半结构化的数据转换为有用的、结构化的格式?
  • 有没有计算任务是每天晚上在整个数据集合上运行的?(比如说信用卡公司在晚上处理所有白天的交易记录)
  • 从一次数据处理中获取的结论和下一次计划要处理的结论是一致的(不像股票市场的价格,每一天都在变化)?
如果以上答案都为“是”,那么你就应该深入研究Hadoop。

以上所谈到的几类问题代表了相当大部分能够用Hadoop来解决的商业问题(尽管很多行业报告的结论是将这些类别的Hadoop系统部署到生产环境中并不是一件容易的事情)。对于某些计算任务,Hadoop的计算模型是非常合适的。 比如说, 你需要处理海量的非结构化或半结构化的数据,然后将内容进行汇总或者将相关计算结果转换成结构化的数据, 并且将结果提供给其他组件或系统使用。如果收集的数据可以很容易地被转换位一个ID以及和它对应的内容(用Hadoop的术语来说就是键值对,key-value pair),那么你就可以使用这种简单的关联来进行不同种类的汇总计算。

总的来说, 关键是要认清你拥有的各种资源,并且理解想要解决的问题的本质。 结合本文提到的一些观点和你自己的理解和认识, 你就能够选择最适合你的工具。 在某些情况下, 最终的解决方案很有可能是Hadoop。

你在使用Hadoop方面有哪些经验和教训? 请在评论中分享吧。

原文链接: Anand Krishnaswamy   翻译: 伯乐在线 - Lex Lian
译文链接: http://blog.jobbole.com/49470/
来自: 伯乐在线
21
0
评论 共 8 条 请登录后发表评论
8 楼 ixu 2013-10-29 10:57
Hadoop 2.2出来了,不知使用标准是否会有些变化?
7 楼 stefory 2013-10-24 17:11
不明觉厉~
6 楼 fainfy 2013-10-20 00:57
怎么感觉是枪文啊。
5 楼 liuzhiqiangruc 2013-10-19 23:14
呵呵,不明觉厉啊
4 楼 我爱小白 2013-10-18 12:11
3 楼 avajeye 2013-10-18 09:52
赞,文章很有深度
2 楼 dacoolbaby 2013-10-15 17:33
Hadoop的集群上面也可以做内存计算啊~~你把hadoop的硬盘改成内存,速度能不快吗?

拿商业软件对磕开源软件实在不是明智之举。

在成本和效益的比较下,hadoop有它独有的生存空间
1 楼 bolen 2013-10-15 15:45
文章不错,学习了。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 用Hadoop,还是不用Hadoop?(1).docx

    用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用Hadoop,还是不用Hadoop?(1).docx用...

  • 用Hadoop,还是不用Hadoop?(1).pdf

    用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop,还是不用Hadoop?(1).pdf用Hadoop...

  • hadoop:用还是不用?

    当人们提到“大数据”或是“数据分析”等相关问题的时候,会听到脱口而出的回答:Hadoop!Hadoop通常被认定是能够帮助你解决所有问题的唯一方案。  实际上Hadoop被设计和建造出来,是用来解决一系列特定问题的。对...

  • 用hadoop?还是不用hadoop?

    Hadoop通常被认定是能够帮助你解决所有问题的唯一方案。 当人们提到“大数据”或是“数据分析”等相关问题的时候,会听到脱口而出的回答:Hadoop!实际上Hadoop被设计和建造出来,是用来解决一系列特 定问题的。对...

  • 大数据技术之Hadoop:使用命令操作HDFS(四)

    十一、HDFS客户端工具 11.1 下载插件 11.2 本地安装Hadoop环境 11.3 配置Big Data Tools插件 11.4 基本功能使用 在HDFS中的命令,基本上就是照搬的Linux命令。只要你熟悉Linux命令,那么HDFS命令基本上一遍过。它的...

  • 用Hadoop,还是不用Hadoop?

    Hadoop通常被认定是能够帮助你解决所有问题的唯一方案。 当人们提到“大数据”或是“数据分析”等相关问题的时候,会听到脱口而出的回答:Hadoop!实际上Hadoop被设计和建造出来,是用来解决一系列特定问题的。对...

  • Hadoop: Intellij结合Maven本地运行和调试MapReduce程序 (无需搭载Hadoop和HDFS环境)

    Hadoop: Intellij结合Maven本地运行和调试MapReduce程序 (无需搭载Hadoop和HDFS环境) 2016-05-24 12717 Hadoop maven 39Hadoop: Run and Debug Hadoop MapReduce Applications with Intellij IDEA and...

  • 为什么不用hadoop,要用Maxcompute?

    Hadoop是当下流行的大数据并行计算体系,横向扩展、生态圈成熟等一直是它的主要特点。 阿里云数加MaxCompute (原名ODPS)是一种快速、完全托管的TB/PB级数据仓库解决方案。与传统 Hadoop 相比,...

  • docker搭建hadoop 3节点集群:镜像使用现成的,不用另做

    代码】docker搭建hadoop 3节点集群:镜像使用现成的,不用另做。

  • Hadoop:完全分布式搭建

    此集群三个节点基于三台虚拟机(hadoop01、hadoop02、hadoop03)进行搭建,虚拟机安装的操作系统为Centos6.5,Hadoop版本选取为2.9.1。 实验过程 1、基础集群的搭建 下载并安装VMware WorkStation Pro,链接:...

  • hadoop和spark的安装,详细步骤

    •如果你安装 Ubuntu 的时候不是用的 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户。 在下载好的ubuntu中需要创建hadoop用户,并为其设置密码以及所需权限,为后续的实验方便: sudo useradd -m hadoop -s ...

  • Hadoop:Hadoop单机伪分布式的安装和配置

    之前是在docker中配置的hadoop单机伪分布式[Hadoop:Hadoop单机伪分布式的安装和配置 ],并且在docker只有root用户,所有没有权限问题存在。官方安装文档[Hadoop: Setting up a Single Node Cluster] ...

  • hadoop:hdfs/yarn启动停止

    配置了环境变量的话不用进入hadoop目录即可执行。 注:结果输出到hdfs的out目录。 查看yarn管理界面的任务: 执行过程: application_1540228249725_0002 任务,如下日志也会打印。 [root@...

  • Hadoop:安装(单机及集群)的配置

    Hadoop ~1:安装(包括集群)与简单的配置## 标题 一:首先在虚拟机中进行解压 二:配置Hadoop ./etc/hadoop目录下的文件 配置hadoop-env.sh 配置core-site.xml (配置完此步,需要在hadoop260目录下建hadoop2目录...

  • Hadoop第四章:Client客户端

    系列文章目录 Hadoop第一章:环境搭建 Hadoop第二章:集群搭建(上) ...现在开始我们使用java来编写一个Hadoop的Clinet,为什么要这么做呢,简单说明一下,之前我们使用Hadoop进行操作,都需要连接到某一个节点

  • hadoop 需要 java_hadoop需要java吗?

    Hadoop由以下角色使用:管理开发数据分析师数据科学家业务分析师功能顾问等...虽然Hadoop及其大部分生态系统都是用Java编写的,但它被企业中的各种人使用。因此,我们需要多个界面来定位所有受众并提高适应性。Hado...

  • Spark——需要HADOOP来运行SPARK吗?

    Spark,是分布式计算平台,是一个用scala语言编写的计算框架,基于内存的快速、通用、可扩展的大数据分析引擎。 Hadoop,是分布式管理、存储、计算的生态系统;包括HDFS(存储)、MapReduce(计算)、Yarn(资源...

  • 036GraphTheory(图论) matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 026SVM用于分类时的参数优化,粒子群优化算法,用于优化核函数的c,g两个参数(SVM PSO)Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Global site tag (gtag.js) - Google Analytics