Electronic Joint Business

Solution for E-Business

mapreduce

Spark,一种快速数据分析替代方案

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。

尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。

Spark 集群计算架构
虽然 Spark 与 Hadoop 有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark 是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。

Spark 还引进了名为 弹性分布式数据集 (RDD) 的抽象。RDD 是分布在一组节点中的只读对象集合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制可以维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD 被表示为一个 Scala 对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另一个 RDD 的转换形式;并且最终会彻底改变现有 RDD 的持久性,比如请求缓存在内存中。

>>> 阅读全文

 

, , , , ,

Hadoop 技术手册 (二) 体验 Hadoop 平台

文章评价:
在上一篇文章中,我们概括介绍了 Hadoop 的各个组件,但是留下的困惑之一就是 “我要如何运行这些软件呢?”。本文将利用 Cloudera 网站提供一个免费的 Hadoop 发行版 CDH 来运行一些示例,使得你对 Hadoop 各个组件有深入的了解。

特别值得一提的是,Hadoop 可以通过 Sqoop 非常好地整合 Informix 和 DB2 数据库。 Sqoop 是全球领先的用于在 Hadoop 和关系数据库之间进行数据迁移的开源实现。它使用 JDBC 来读写 Informix、DB2、MySQL、Oracle 等其他数据源。此外还提供了几个优化的数据库适配器,包括 Netezza 和 DB2。

运行简单的 Hadoop, Hive, Pig, Oozie 和 Sqoop 示例
在上一篇文章中,你已经学习了 Hadoop 的介绍和定义,现在是该实践的时候了。要运行本文的例子,你只要从 Cloudera 网站下载支持 VMware、virtual box 等的镜像文件就可以开始进行 MapReduce 了!我们假定你有一台 64位电脑,并有某种流行的虚拟软件。大多数的虚拟软件中都提供了免费下载。当您试图启动 64位的镜像时,你可能会遇到有关 BIOS 设置的报错。图 1-1 显示了需要在 BIOS 修改的设置 (基于 Thinkpad 电脑)。进行更改时,请务必小心。

示例中所使用的数据实在不能称为 BigData。但是本文的目的不是让你用一台笔记本电脑来和一个庞大的文件交火,而是关注数据源、map-reduce 作业这些有趣的问题,并答疑解惑。

下载 Hadoop 虚拟镜像
我们强烈建议您使用 Cloudera 提供镜像来运行这些示例。 Hadoop 是一个解决问题的技术。 Cloudera 的虚拟镜像包让你不用处理繁杂的配置工作,只需专注于大数据本身的问题。如果你坚持要自己配置所有的组件,那 Hadoop 本身就成为一个问题,而不是解决方案了。

>>> 阅读全文

 

, , , , , , , , , , ,

Hadoop 技术手册(二) 用 Map/Reduce 进行大数据分析

当今社会是数据的时代。2001 年,Google 发布图像搜索功能时,只有 2.5 亿个图像被索引, 10 年间,这个搜索功能已经可以检索超过 100 亿个图像。现在每分钟有 35 小时时长的视频被上传到 YouTube。而 Twitter 平均每天要处理 5500 万 tweet。数据的增加,很快就超过单一计算机的处理能力。基于集群的分布式并行编程能够让软件与数据同时运行在一个网络内彼此相连的许多计算机上。这样的分布式并行环境的最大优点是可以很容易的通过增加计算机来扩充新的计算结点,并由此获得不可思议的海量计算能力, 同时又具有相当强的容错能力,某一计算节点失效也不会影响计算的正常进行以及结果的正确性。

Google 使用了运行在 GFS ( Google File System ) 分布式文件系统上的, 名为 MapReduce 的编程模型进行分布式并行编程,为全球亿万用户提供搜索服务。而 Hadoop 项目正是受到了 MapReduce 和 Google File System(GFS) 的启发,2005 年秋天, Hadoop 被作为 Lucene 的子项目 Nutch 的一部分正式引入。 在 2006 年 3 月份,Map/Reduce 和 Nutch Distributed File System (NDFS) 正式被纳入 Hadoop 的项目中。

Hadoop 实现了 Google 的 MapReduce 编程模型,提供了简单易用的编程接口,它也提供了自己的分布式文件系统 HDFS,与 Google 不同的是,Hadoop 是开源的,任何人都可以使用这个框架来进行并行编程。如果说分布式并行编程的难度足以让普通程序员望而生畏的话,开源的 Hadoop 的出现极大的降低了它的门槛,读完本文,你会发现基于 Hadoop 编程非常简单,利用该框架能够轻松编写出可以处理海量数据(TB级的数据集)的应用程序,并能稳定地,可容错地运行在由上千个节点组成的硬件集群上,然后在短时间内完成海量数据的计算。

概念
一个 MapReduce 作业(job) 通常会将输入的数据集分割成独立的数据块 (chunk),然后交由 map 任务以完全并行的方式进行处理。框架负责对 map 的输出进行排序,并作为 reduce 任务的输入。作业的输入和输出一般都保存在文件系统中。该框架还负责任务的调度与监测,并重新执行失败的任务。

通常来说,Hadoop 的计算节点和存储节点是同一节点,也就是说 MapReduce 框架和 Hadoop 分布式文件系统 (HDFS) 在相同的节点上运行。这种配置让框架可以有效地将任务调度给存有数据的节点,从而使得整个群集获得了非常高的总带宽。

>>> 阅读全文

 

, , , ,

HadoopDB 快速上手指南

HadoopDB 是由美国耶鲁大学计算机科学教授 Daniel J. Abadi 及其团队推出开源并行数据库。该数据库集合关系型数据库的数据处理能力与 Hadoop、MapReduce 等技术于一身,采用了许多不同的开源组件,包括开源数据库、PostgreSQL、Apache Hadoop 技术和 Hive 等等。

HadoopDB 的查询是利用 MapReduce 或常规的 SQL 语言完成的。MapReduce 适用于大规模数据集(大于1TB)的并行计算。另一方面,HadoopDB 的数据处理部分是利用Hadoop 完成的。Abadi表示,其中部分是利用了分布在无分享计算机群集中的许多节点上的不同 PostgreSQL 实例完成的。实质上,HadoopDB是MapReduce和并行数据库管理系统技术的混血儿。不过和 Aster Data、Greenplum或Hive等已经开发出的项目和厂商不同,HadoopDB不是简单地在语言/接口层面上的混合,它是更深的系统实现层面上的集成。

因为集两种技术的精华于一身,HadoopDB 可以取得 MapReduce 等大规模并行数据基础设施的容错性。在这些基础设施中,服务器故障对整个网络的影响非常小。HadoopDB可以执行复杂的分析,速度几乎与已有的商用并行数据库一样快。

本文的目的是为运行HadoopDB给出一些指导。整个 HadoopDB 的设计概述可以在VLDB 论文的第五节找到。在该论文中,你还可以找到我们测试 Hadoop (带 HDFS)、HadoopDB 和商用并行数据库的测试结果比较。

HadoopDB 的基本原理是利用 Hadoop 来存取部署在集群上多个单一节点上的 DBMS 服务器(比如:PostgreSQL 或 MySQL)。通过发起 SQL 查询,HadoopDB 将尽可能多的数据处理推给数据库引擎来进行(通常情况下,大部分的映射/组合 – Map/Combine 阶段的逻辑可以用 SQL 来表达)。这样就创建了一个类似于无共享并行数据库的系统。应用从数据库世界得到的技术大大提升了性能,特别是在更复杂的数据分析上。同时,HadoopDB 依赖于 MapReduce 框架的事情确保了系统在高可扩展性和容错、异构性(heterogeneity)方面的效果与 Hadoop 类似。详细内容请再次参考 VLDB 论文。

>>> 阅读全文

 

, , , , , , ,

Hadoop 技术手册(一) Hadoop 生态系统

文章评价:
现在是数据的年代。近 10 年来,随着 Web 不断发展状态,数据的大小也在飞速增长,而且丝毫没有慢下来的迹象。统计数据表明,每过去的一年中所生成的数据要大大超过历年的数据的总和。摩尔定律不单对计算机硬件生效,现在对于不断生成的数据也同样有效。面对如此海量的数据,业界用了一个简单明了的词来称呼它: Big Data。

和用行和列来存储结构化信息的方式不同, Big Data 面对的是复杂的,非结构化的存储格式,包括网站、社会性媒体、电子邮件 甚至是视频、演示文稿等等。这是个非常重要的区别,为此,要从 Big Data 中提取有价值的商业信息,都必须依靠某些技术来对这些格式进行可扩展的、精确且有效分析。

紧接着下一个问题就出现了 – 我们如何有效地处理这些 Big Data?在这一领域的开拓者之一是谷歌 Google,它设计了类似 MapReduce 和 Google文件系统等可扩展的框架。受到这些设计的启发,Apache 倡导了一个名为 Hadoop 的开源项目。Apache Hadoop 是一个开源框架,可以对大型数据集的进行跨集群的分布式处理。

Hadoop 生态系统 (Ecosystem)
Apache Hadoop 的核心由 2 个子项目组成 – Hadoop MapReduce 和 Hadoop 分布式文件系统。 Hadoop MapReduce 是编程模型,也是一个软件框架,可以编写在集群上进行并行处理大量数据的应用。 HDFS 是 Hadoop 应用所使用的主要存储系统。 HDFS 创建了数据块的多个副本,并将其分发整个集群的计算节点上以便能可靠、且快速的进行计算。其它和 Hadoop 相关的 Apache 项目还包括: Chukwa, Hive, HBase, Mahout, Sqoop 和 ZooKeeper 等等。

下图列出了 Hadoop 的一些组件,接下来我们会逐一介绍 Hadoop 生态系统的这些关键组件。

>>> 阅读全文

 

, , , , , , , , ,

面向文档的数据库 CouchDB (四) 视图

视图是 CouchDB 中用来查询和呈现文档的。完成视图的定义之后,视图的运行由专门的视图服务器来完成。 CouchDB 中默认的视图定义语言是 JavaScript 。 CouchDB 中的视图运行使用的是 MapReduce 编程模型。每个视图的定义中至少需要提供 Map 方法,Reduce 方法是可选的。

视图的 MapReduce
Map 方法的参数只有一个,就是当前的文档对象。 Map 方法的实现需要根据文档对象的内容,确定是否要输出结果。如果需要输出的话,可以通过emit来完成。emit方法有两个参数,分别是key和 value,分别表示输出结果的键和值。使用什么样的键和值应该根据视图的实际需要来确定。当希望对文档的某个字段进行排序和过滤操作的时候,应该把该字段作为键(key)或是键的一部分;value的值可以提供给 Reduce 方法使用,也可能会出现在最终的结果中。可以作为键的不仅是简单数据类型,也可以是任意的 JSON 对象。比如emit([doc.title, doc.price], doc)中,使用数组作为键。

通过 Map 方法输出的结果称为中间结果。中间结果可以通过 Reduce 方法来进一步做聚集操作。聚集操作是对结果中键(key)相同的数据集合来进行的。 Reduce 方法的输入不仅是 Map 方法输出的中间结果,也可以是上一次 Reduce 方法的结果,后面这种情况称为 reReduce 。 Reduce 方法的参数有三个:key、values和rereduce,分别表示键、值和是否是 reReduce 。由于 reReduce 情况的存在,Reduce 方法一般需要处理两种情况:

  • * 传入的参数rereduce的值为false:这表明 Reduce 方法的输入是 Map 方法输出的中间结果。参数key的值是一个数组,对应于中间结果中的每条记录。该数组的每个元素都是一个包含两个元素的数组,第一个元素是在 Map 方法中通过emit输出的键(key),第二个元素是记录所在的文档 ID 。参数values的值是一个数组,对应于 Map 方法中通过emit输出的值(value)。
  • * 传入的参数rereduce的值为true:这表明 Reduce 方法的输入是上次 Reduce 方法的输出。参数key的值为null。参数values的值是一个数组,对应于上次 Reduce 方法的输出结果。

下面通过一个实例来说明视图 Map 和 Reduce 的用法。该视图要解决的问题是对图书简介中出现的字符进行计数,这也是一个经典的 MapReduce 编程模型的实例。代码清单 12中给出了该视图的定义。

清单 12. 对图书简介中的字符计数的视图定义

>>> 阅读全文

 

, , , ,

面向文档的数据库 CouchDB (一) 概述与安装

文章评价:
Apache CouchDB 是一个面向文档的数据库管理系统。它提供以 JSON 作为数据格式的 REST 接口来对其进行操作,并可以通过视图来操纵文档的组织和呈现。 CouchDB 是 Apache 基金会的顶级开源项目。本文将介绍 CouchDB 的基本概念,包括文档、视图,REST API,并通过一个实际的图书点评网站来说明如何用 CouchDB 开发 Web 应用。

CouchDB 介绍

CouchDB 是一个文档型数据库服务器。与现在流行的关系数据库服务器不同,CouchDB 是围绕一系列语义上自包含的文档而组织的。 CouchDB 中的文档是没有模式的(schema free),也就是说并不要求文档具有某种特定的结构。 CouchDB 的这种特性使得相对于传统的关系数据库而言,有自己的适用范围。一般来说,围绕文档来构建的应用都比较适合使用 CouchDB 作为其后台存储。 CouchDB 强调其中所存储的文档,在语义上是自包含的。这种面向文档的设计思路,更贴近很多应用的问题域的真实情况。对于这类应用,使用 CouchDB 的文档来进行建模,会更加自然和简单。与此同时,CouchDB 也提供基于 MapReduce 编程模型的视图来对文档进行查询,可以提供类似于关系数据库中 SQL 语句的能力。 CouchDB 对于很多应用来说,提供了关系数据库之外的更好的选择。下面介绍 CouchDB 中的一些重要概念。

基本概念

文档(document): 文档是 CouchDB 中的核心概念。一个 CouchDB 数据库实际上是一系列文档的集合,而这些文档之间并不存在层次结构。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关联对象。每个文档都有一个全局惟一的标识符(ID)以及一个修订版本号(revision number)。 ID 用来惟一标识一个文档,而修订版本号则用来实现多版本并发控制(Multiversion concurrency control,MVVC)。在 CouchDB 中,文档是以 JSON 对象的形式保存的。

>>> 阅读全文

 

, , , , , ,