Electronic Joint Business

Solution for E-Business

hadoop

创建推荐引擎: 基于 Azure, Hadoop 和 Mahout 的机器学习

喜欢帮助别人的感觉吗?

我们将根据 Stack Exchange 用户回答问题的历史,向他提供一些“建议回答”的问题。这与亚马逊上根据购物记录来推荐商品的经验十分相似。如果你不知道 Stack Exchange 是个什么?建议你登录一下Stack OverFlow

通过本文,你可以了解如何根据对用户的历史“答案”的分析,来预测他可能可以回答的问题。也许 Stack Exchange 现在的推荐系统比我们实现的要更棒,但这不妨碍我们本着学习的目的来重复造一个轮子。1

我们将要完成以下任务:

  • 从 Stack Exchange 数据集中提取所需的信息
  • 利用得到的信息来构建推荐系统

让我们从最基础的开始。如果你对 Apache Hadoop 以及在 Azure 上部署 Hadoop 完全陌生,我建议你试读一些介绍文章。2

>>> 阅读全文

 

, , , ,

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 技术手册(二) 用 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 生态系统的这些关键组件。

>>> 阅读全文

 

, , , , , , , , ,