用Hadoop,还是不用Hadoop?(1)
时间内可以完成的, 所以Hadoop并不适合用于开发有实时性需求的应用。一个实际的例子是,在期货或股票市场的程序化交易系统(Program Trading)中用到的成交量加权平均价格(Volume-weighted average price,VWAP)的计算,通常是实时的。这要求交易系统在限定时间内将结果给到用户,使得他们能够进行交易。
(译者注:Hadoop的MapReduce中的shuffle过程指的是将多个map任务的结果分配给一个或多个reduc任务是的数据洗牌和分配的操作,这篇blog解释的比较详细,blog992916 。 这里的用例是在投资银行的程序交易中,如何计算股票或期货交易的基准价格。 这样的计算我觉得每次对数据的查询响应时间应该是在100ms以下的,详见view1280239.htm,view945603.htm。关于这个例子,相信投行的xdjm们应该有更多的发言权。)
对数据分析人员来说, 他们实际上非常想使用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.edusoftware。 Spark项目是BDAS中的一个项目, 它使用Scala语言开发,提供了类似于SQL的数据操作接口,完全兼容Hive。其主要的特点是利用底层的Spark将查询翻译为具体的计算任务。 Spark会通过大量使用Hadoop集群中结点上内存的方式来进行数据缓存和在内存中进行实时计算, 达到加速查询和计算的目的。详见。 Hortonworks是目前几家专注于提供基于Hadoop的大数据系统和应用的公司之一, Stinger是用来 Horontoworks提出的为了提升Hive查询性能的一系列在基于Hadoop的项目和改进的总称,其主要方法是优化Hive的文件存储格式以及针 对Hive的查询请求进行分析优化。)
我们应该认识到, Hadoop是在批处理的模式下工作的。 这意味着当有新的数据被添加进来的时候, 数据处理的计算任务需要在整个数据集合上重新运行一遍。所以,随着数据的增长,数据分析的时间也会随之增加。 在实际情况下,小块新数据的增加、单一种类的数据更改或者微量数据的更新都会实时地发生。通常, 商业程序都需要根据这些事件进行决策。 然而,不论这些数据多么迅速地被输入到Hadoop系统,在Hadoop处理这些数据的时候,仍然是通过批处理的方式。Hadoop 2.0的MapReduce框架YARN承诺将解决这个问题。 Twitter使用的Storm平台是另一个可行的、流行的备选方案。将Storm和例如Kafka这样的分布式消息系统结合在一起,可以支持流数据处理 和汇总的各种需求。痛苦的是,目前Storm并不支持负载平衡,但是Yahoo的S4版本中会提供。
1 2 下一页 查看全文
内容导航
Java面向对象编程


