最近几年中,web 和企业已经见证了数据膨胀。这一现象有很多种原因,例如,便宜的 terabyte 量级的存储硬件的商品化,随着时间的推移已接近临界规模的企业数据,以及允许轻松进行信息供应和交换的标准。
从企业的角度来说,日益增长的信息已经很难存储在标准关系型数据库甚至数据仓库中。这些问题提到了一些在实践中已存在多年的难题。例如:怎样查询一个 十亿 行的表?怎样跨越数据中心所有服务器上的所有日志来运行一个查询?更为复杂的问题是,大量需要处理的数据是非结构化或者半结构化的,这就更难查询了。
当数据以这种数量存在时,一个处理局限是要花费很多的时间来移动数据,Apache Hadoop 的出现解决了这些问题,用其独一无二的方法将工作移到数据,而不是相反的移动。Hadoop 是一个集群技术,由两个独立但整合在一起的运行时组成:分布式文件系统(Hadoop Distributed File System,HDFS),提供数据冗余存储;map/reduce,允许并行运行用户提交的作业,处理存储在 HDFS 中的数据。尽管 Hadoop 并不是对每个场景都适合,但是它提供了良好的性能效益。使用 Hadoop 时,社区发现它不仅仅可用于数据处理,也打开了各种有趣的数据分析的大门。
借助 Hadoop,我们可以线性扩展运行在商品硬件上的集群来集成更大更丰富的数据集。这些数据集提供新的透视图,首先,在之前没有整合的异构数据源上运行分 析,然后在同样的数据上有规模地运行分析。这个结构有点类似于范式转换(paradigm shift),正如 Flip Kromer(InfoChimps 创办人之一)所描述的:“web 从一个对每件事都了解一点的场所发展成为对一件事了解其全部的场所”。Kromer 继续以这个场景为例,有朝一日,棒球迷想要了解在过去 100 中每场比赛的细节(球员详情、比赛得分、比赛场地)。如果要在同一时段为所有气象站联合数据集与共享位置值,就可以预测一个 38 岁的投手在 90 度的高温的情况下、在 Wrigley Field 赛场的表现如何。
需要指出的重要一点是:Big Data 空间仍然相对较新,要利用这些机会,仍然有一些技术障碍。正如上面所提到的,数据在 Hadoop 中以 “作业” 形式处理,这些作业是使用一个名为 map/reduce 的范式、通过 Java™ 编程语言编写的。尽管开展了一些工作来促进 Hadoop 允许使用其他语言,但正确地理解如何分析业务问题,并将其分解成可以作为 map/reduce 作业运行的解决方案,仍然不是一个简单的过程。
要真正利用 Hadoop 周围的机会,就需要大量的支持技术来将 Hadoop 移出开发人员的视野,使其接近更广泛的观众。
一个生态系统的出现提供了围绕 Hadoop 的工具和支持。每个组件同其他组件一起提供很多方法(如下所示)来实现大多数用户场景。
为了使用 Hadoop 来分析您的数据,您必须将数据放在 HDFS 上。为了做到这一点,您需要加载工具。Hadoop 本身也提供将文件从文件系统复制到 HDFS 的功能,反之也可以。对于更复杂的场景,您可以利用像 Sqoop(参见 参考资料 )这类工具,这是一个 SQL-to-HDFS 数据库导入工具。另一种形式的加载工具是网络爬虫,例如 Apache Nutch,它抓取特定网站并将网页存储在 HDFS 上,这样,网页内容对于任何您想要使用的分析工具都是可用的。
实时数据是另一个潜在的信息源。您可以使用 Twitter4J 这类技术来连接 Twitter Streaming API 并直接将 tweets 以 JSON 格式持久存储在 HDFS 上。
典型 Big Data 分析用例通常涉及同时查询多个数据集。数据集来自不同的源,通常是企业(内部)已有数据和从 web(外部)获得的数据的混合。一个内部信息的例子可能是数据中心的日志文件,外部信息可能是一些抓取的网站或从数据目录下载的数据集。
数据目录实现了用户搜索数据集所必须的功能。除非您已经尝试过,否则您不会意识到寻找大型数据集是多么地困难,特别是适合您正在运行的特定分 析场景的数据集。通常,用户被迫抓取 web 或者挖掘社会媒体网站来建立他们自己的大型数据集。如果您很容易就能找到并下载您所感兴趣的现存结构化数据集,将会节省许多时间。InfoChimps 这类公司提供一个目录,在其中您可以根据类型或通过检索找到特定数据集。另一个数据目录的示例是 Amazon Public Data SetsIt。
如果您要只使用 Hadoop 来分析 HDFS 上存储的数据,那么通常需要开发人员的技术来使用 Java 语言和 Hadoop map/reduce API 编写作业。对于那些直接使用 API 的人员,您可以使用 Eclipse 中的 KarmaSphere 这类工具来利用从特定于 Hadoop 的 IDE 获取的生产力。有一些替代方法支持联合使用其他语言与 Hadoop Streaming 和 Hadoop Pipes,但仍然需要开发人员的技术。这为创建复杂度较低的定义和运行 map/reduce 作业的方法提供了机会。
那些熟悉的 shell 脚本和 UNIX® Pipes 的人可以考虑查看 WuKong,它允许您使用 Ruby 和 shell 脚本构建和运行作业。Apache Pig 和 Hive 是两个数据分析师感兴趣的技术,因为它们提供一个类似于 SQL 语句的查询界面,在其中用户可以使用高级语言表述如何构建和运行一个给定作业的分析。另一个更针对业务分析师的方法是 IBM® BigSheets,它提供一个基于浏览器的类似电子表格的可视呈现,用于定义、运行和可视化分析作业。
所有这些方法都利用扩展,通常称为用户自定义函数或宏,获取用户输入的数据并将一个测量结构注入其中(语义上的或明确的),使得信息能够以一 种类似于传统分析方法的方式被处理和查询。分析工具和导出工具就像是连体婴儿,在您进行数据分析时,后者实际上本身就可以做一些对数据分析有帮助的事。
当您询问一个 Big Data 问题(您的分析)时,通常会得到一个 Big Data 答案(生成的数据集)。经常会出现这种情况:答案太大,以至于人类无法阅读和理解。如果这样的话,提供可视的结果将是一个解决方案。例如,一个标记能够过 滤一大部分结果,使人们立即可以识别出某些区域的数据值。另一个方法是将数据以特定的格式输出,例如 SON、CSV、TSV 或 ATOM,使其可以为一个应用程序所使用。有趣的可视化比较常见,但是它们通常不能插入现有的 Hadoop 相关工具。这是一个新兴空间,关于这方面,在未来的几个月我们将能看到一些创新。
Apache Hadoop 是生态系统的核心。这是所有数据驻留的地方。这个生态系统的惟一约束是 Big Data 喜欢处于静止状态这个事实。这个约束可能会给移动大量数据的计算操作带来严重的延迟,这就是为什么 map/reduce 如此高效的原因,因为它将工作移向数据。由于 Hadoop 可以横向和纵向扩展,因此它也是云中的一个可行选择,人们可以提供 Hadoop 集群、复制数据、运行作业、检索输出,以及在作业完成时解散集群。对于间歇运行的作业,这可以极大地节省购买和维护硬件的成本。
IBM 对 Apache Hadoopis 的前景感到兴奋,并洞察到它可能是极其宝贵的。IBM 已经致力于 Hadoop 研究,有两个技术预览,可以在 Apache Hadoop 之上提供社区感兴趣的附加特性。
Apache Hadoop 的 IBM 发行版 绑定了 IBM Java 技术,并针对 IBM Java 和 IBM 平台进行测试。它包含一个基于 Web 的安装向导,使安装和配置 Hadoop 集群更为容易。这个向导使安装和运行 Hadoop 需要花费的时间大大减少,能够帮助那些在 Hadoop 之上构建解决方案和工具,以及直接使用 Hadoop、map/reduce 和 HDFS API 的开发人员。
对于分析感兴趣的非程序设计人员,InfoSphere BigInsights 是一个新的 IBM 产品组合,其中包含一个称为 BigSheets 的技术预览。BigSheets 提供一个引人注目的可视化界面来聚集、分析和探索数据。BigSheets 是一个功能相当齐全的工具,它在 Apache Hadoop 之上提供了易配置的加载、分析和导出工具。
我们已经看到了目前的海量数据,以及开源社区是如何使用 Apache Hadoop 项目来处理这些问题的。我们还检查了令人兴奋的使用 Big Data 挖掘新洞察的机遇,以及这个生态系统中在 Apache Hadoop 周围迅速崛起的一些开放源码和专有工具。
想要对 Hadoop 有一个更为详细的了解,不要错过 “使用 Linux 和 Hadoop 的分布式计算”并体验 WordCount 示例(相当于 map/reduce 的 Hello World),在 Apache Hadoop 项目 Wiki 中有详细的描述。
想要循序渐进地了解数据分析,请试用 Apache Pig ,并逐一浏览项目 wiki 中的教程。