Windows Azure

对 Windows Azure Hadoop

Lynn Langit

 

最近,已大量 Hadoop 议论纷纷,用它来处理极大量的数据集的兴趣似乎一天天成长。 考虑到这一点,我要向您展示如何设置 Windows Azure Hadoop 群集。 本文假定 Hadoop 技术基本熟悉。 如果你是新到 Hadoop,请参阅"Hadoop 是什么呢?"写这篇文章,对 Windows Azure Hadoop 是私人 beta 版。 若要获得邀请,请访问 hadooponazure.com。 此 beta 版是 Apache Hadoop (快照 0.20.203+) 与兼容。

Hadoop 是什么?

Hadoop 是一个开放源码库设计的并行批处理过程大规模数据集。 它基于 Hadoop 的分布式文件系统 (HDFS),并包括实用程序和库,用于存储在群集中的数据与工作。 这些批处理过程运行使用不同的技术,例如地图/减少作业数量,并可能会写在 Java 或其他更高级的语言如猪。 也有可用于查询数据存储在一个 Hadoop 群集中的语言。 通过配置单元 HQL 查询最常用的语言。有关详细信息,请访问 hadoop.apache.org。

设置完群集

一旦我们邀请您参加在测试版中,您可以设置您 Hadoop 的群集。 转至 hadooponazure.com 和日志与您授权的 Windows Live id。 下一步,填写对话框中使用下列值的门户网站:

  1. 群集 (DNS) 名称:在窗体中输入名称"< 你唯一的字符串 >.cloudapp。 净"。
  2. 群集大小:从 4 到 32,选择的节点,数及其关联的存储分配,从每个群集 16TB 到 2TB。
  3. 管理员用户名和密码:输入的用户名和密码 ; 在页面上列出的密码复杂性限制。 这设置后,您可以连接通过远程桌面或通过 Excel。
  4. 对于 SQL Azure 实例的配置信息:这是用于存储配置单元 Metastore 选项。 如果选择它,您将需要提供您的 SQL Azure 服务器实例,以及目标数据库和登录凭据的名称的 URL。 您指定的登录名必须在目标数据库上具有下列权限:ddl_ddladmin、 ddl_datawriter、 ddl_datareader。

您填写此信息后,单击请求群集。 您将看到一系列的 Web 门户网站中的状态更新为您的群集 (称为 beta 版中的同位素) 被分配,创建并启动。 为您分配的每个群集,您将看到许多工人节点和一个头节点也称为 NameNode。

后一段时间 (以我的经验 5 到 30 分钟),门户网站将更新以显示您的群集是分配并可随时使用。 可以然后只需浏览的地铁样式界面 (通过单击大按钮) 以查看您可以执行哪些类型的数据处理和管理任务 (请参阅图 1)。 除了使用门户网站将与您的群集进行交互,您可能想要打开可用的端口 (默认情况下关闭) 用于 FTP 或 ODBC 服务器访问。 我将讨论一些有点连接的替代方法。

The Windows Azure Hadoop Portal
图 1 在 Windows 天青 Hadoop 门户

在门户网站的您的群集部分中,您可以执行基本的管理任务,例如配置对您的群集访问、 导入数据和管理该群集通过交互式的控制台。 在交互式控制台支持 JavaScript 或配置单元。 作为图 1 所示,您还可以访问您的任务部分。 在这里您可以运行一个 MapReduce 作业 (通过.jar 文件) 和查看任何正在运行以及它的 MapReduce 作业的状态最近完成。

门户按钮显示最近完成的三种 MapReduce 工作有关的信息:C# 流示例、 字数统计的示例和 10 GB Terasort 示例。 每个按钮显示在地图的状态和每个作业的减少部分。 有几个其他选项用于查看的地位正在运行 (或完成) MapReduce 作业直接从门户网站和通过其他方式连接到您的群集,如远程桌面协议 (RDP)。

连接到您的数据

您可以使你 Hadoop 的多种方法,包括直接上传到您的群集和访问存储在其他位置的数据的 Windows Azure 群集上可用的数据。

尽管 FTP 允许上传从理论上讲任何大小的数据文件,最佳做法是在一个较低的千兆字节大小范围的文件上传。 如果您想要对数据存储在 Hadoop 之外运行批处理作业,您需要首先执行几个配置步骤。 要设置外部连接,主要门户网站上的管理群集按钮上单击,然后配置您想要使用,如 Windows Azure Blob 存储位置,Windows Azure 数据市场,在查询结果或亚马逊 Web 服务 (AWS) S3 存储位置的存储位置:

  1. 若要配置连接到 AWS S3 斗,请输入您的安全密钥 (公共的和私人的),以便您可以访问存储在 S3 Hadoop 群集中的数据。
  2. 若要使用 Windows Azure 数据集市中的数据,填写用户名 (WLID) (适用于您想要查询并导入的数据源) 的密钥的值,源 (摘录) 查询和 (目标) 配置单元表的名称。 一定要从查询生成的数据集市中的工具之前您输入查询到文本框中对您的群集中删除的参数的默认查询限制 (100 行)。
  3. 若要访问 Windows Azure Blob 存储中的数据,您需要输入的 Blob 存储位置和您的密钥 (私钥) 值存储帐户名称 (URL)。

运行 MapReduce 作业

后设置与验证您 Hadoop 的群集,使您的数据可用,您可能需要开始啃此数据通过运行一个或多个 MapReduce 作业。 问题是,如何最好地开始吗? 如果你是新 Hadoop 的有一些示例,您可以运行来感受这什么是可能。 您可以查看和运行任何这些通过单击 Web 门户网站上的样品按钮。

如果您正在用 Hadoop 技术经验丰富,并且想要运行您自己 MapReduce 作业,有几种方法。 您选择的方法将取决于您熟悉 Hadoop 工具 (如 Hadoop 命令提示符) 和您的首选的语言。 您可以使用 Java、 猪、 JavaScript 或 C# Windows Azure Hadoop 写一个可执行文件的 MapReduce 作业。

我将使用字数统计示例演示了如何从门户网站使用.jar 文件运行 MapReduce 作业。 如您所料,此作业计数为一些输入的单词 — — 在本例中,一个大型的文本文件 (整个出版本书的内容) — — 并将结果输出。 单击样本,然后字数统计要打开在门户网站上的作业配置页,如中所示图 2

Setting Up the WordCount Sample
图 2 设置字数统计样本

您将看到两个可配置的参数,这份工作,一个用于函数 (单词计数) 和另一个用于源数据 (文本的文件)。 (参数 1) 的源数据包含不只输入的文件,也是它的位置的路径名称。 此源数据文件的路径可以是文本,或者它可以是"本地,"这意味着该文件存储在此 Hadoop Windows Azure 群集上。 或者,可以从 AWS S3 中检索源数据 (通过 S3n: / / 或 S3: / / 协议),从 Windows Azure Blob 存储 (pls 算法通过: / / 协议) 或从 Windows Azure 数据市场 (通过首次进口所需的数据使用查询),或直接从 HDFS 中检索存储。 输入到远程位置的路径后,您可以单击验证图标 (三角形),你应该得到好消息,如果可以使用所提供的字符串连接。

您配置参数后,单击执行作业。 你会发现很多方法,监测工作是执行和作业的结果,这项工作完成后两个作业状态。 例如,门户网站的主页面上您的任务部分显示一个按钮与最新的作业的状态在执行过程中和结束后。 添加一个新按钮的每个作业的作业完成后显示作业名称、 地图和期间执行和的状态 (确定,失败等等) 的减少部分的完成百分比。

作业历史记录页,您可以从主页面的管理您的帐户部分到达,提供了有关的工作,包括文本 (脚本) 用来运行该作业和地位,日期和时间信息的更详细信息。 您可以单击每个作业,以获得有关执行作业的更详细信息的链接。

如果您决定要运行示例,请务必阅读该特定示例的详细的说明。 可以从门户网站运行一些样品 (您的任务 |创建作业) ; 其他需要 RDP 连接到您的群集。

使用 JavaScript 来运行作业

单击交互式控制台按钮以打开 JavaScript 控制台。 在这里您可以运行 MapReduce 作业通过执行.jar 文件 (Java) 通过在提示符下,运行猪的命令或编写并在 JavaScript 中直接执行 MapReduce 作业。

您可以直接上载 js 中的源数据 > 提示使用 fs.put 命令。 此命令会打开一个对话框,您可以在其中选择要上载到您的群集文件。 您可以通过为 4 GB 的 JavaScript 控制台上传的文件的大小限制 IIS。

从其他远程存储 (如 Windows Azure Blob) 或其他云供应商,您还可以使用的源数据。 在要使用的源数据从 AWS S3,您的请求中使用格式 s3n: / / < 斗名称 > / < 文件夹名称 >。

使用 JavaScript 控制台,您可以使用验证连接到你的 AWS S3 水桶 # ls 命令斗地址,如下所示:

js > # ls s3n: / HadoopAzureTest/书籍

发现 2 项

-rwxrwxrwx 1 0 2012年-03-30 00:20 / 书籍

-rwxrwxrwx 1 1395667 2012年-03-30 00:22 /Books/davinci.txt

 

当你做时,你应该你斗如本示例所示的内容 (文件夹和文件) 的列表。

如果您想要在运行您的工作之前查看源代码文件的内容,你可以从使用 #cat 命令控制台:

js > #cat s3n://HadoopAzureTest/Books/davinci.txt

 

在验证您可以连接到您的源数据之后,您会想要运行您 MapReduce 作业。 以下是这份 (使用.jar 文件) 的字数统计样本 MapReduce 工作的 JavaScript 语法:

var map = function (key, value, context) {
  var words = value.split(/[^a-zA-Z]/);
  for (var i = 0; i < words.length; i++) {
    if (words[i] !== "") {
      context.write(words[i].toLowerCase(), 1);
    }
  }
};
var reduce = function (key, values, context) {
  var sum = 0;
  while (values.hasNext()) {
    sum += parseInt(values.
next());
  }
  context.write(key, sum);
};

在映射部分中,该脚本将源文本拆分为单个单词 ; 在减少部分,相同词分组,然后计算。 最后,被产生的输出 (摘要) 文件,按计数的顶级单词 (和这些字的计数)。 若要直接从交互式的 JavaScript 控制台运行此字数统计工作,开始用猪关键字,以指示您要运行一个猪作业。 接下来,调用方法,这是您传递中的源数据的位置。 在这种情况下,我会执行远程存储的数据的操作 — — 在 AWS S3。

现在你的猪工作在调用 mapReduce 方法传入文件的 JavaScript 代码,这项工作,包括­ing 所需的参数。 为此作业参数是打破文本的方法 — — 对每个字 — — 的价值与减少聚合的数据类型。 在这种情况下,后者是计数 (sum) 数据类型的长。

您然后指定输出顺序使用 orderBy 方法,并再次传递的参数 ; 这里的每个组的单词计数将输出以降序顺序。 在接下来的步骤中,采取方法指定应返回多少个聚合的值 — — 在这个例子中 10 个最常见单词。 最后,调用方法,传递要生成的输出文件的名称。 下面是运行此作业的完整语法:

pig.from("s3n://HadoopAzureTest/Books").mapReduce("WordCount.js","word, count:long").orderBy ("计数 DESC").take(10).to("DaVinciTop10Words.txt")

 

当运行该作业时,您会看到在浏览器中的状态更新 — — 地图,然后降低工作的第一次完成百分比。 您还可以单击链接以打开另一个浏览器窗口,可以看到有关工作进展情况的更多详细日志记录。 在短短几分钟,您应该看到一条消息,指示作业已成功完成。 为了进一步验证作业输出,然后可以在 JavaScript 控制台中运行一系列命令。

第一个命令,fs.read,显示的输出文件,显示前 10 字和每年按降序顺序的总计数。 下一个命令,分析、 显示相同的信息和将填充数据变量的列表。 最后一个命令,graph.bar,结果以条形图显示。 下面是这些命令的样子:

js > 文件 = fs.read("DaVinciTop10Words.txt")

js > 数据 = 解析 (file.data,"字,计数: 长")

js > graph.bar(data)

 

使用 JavaScript 来执行 MapReduce 作业的有趣的方面是与 Java 的 JavaScript 代码的简洁性。 MapReduce 字数统计样本 Java 作业包含超过 50 行代码,但 JavaScript 示例包含仅 10 行。 这两个职位的功能是相似的。

使用 C# 与 Hadoop 流

您可以在 Windows Azure Hadoop 在运行 MapReduce 作业的另一种方式是通过 C# 流。 你会发现一个示例,演示如何执行此操作在门户网站上。 作为与前面的示例中,尝试此示例中,您需要上载所需的文件 (davinci.txt、 cat.exe 和 wc.exe) 至 (如 HDFS、 伏安或 S3 的存储位置。 您还需要获取您 Hadoop HEADNODE 的 IP 地址。 若要获取使用交互式控制台的值,请运行以下命令:

js > #cat apps/dist/conf/core-site.xml

 

填写在作业转轮页 ; 值 你最后一个命令将类似于:

Hadoop jar hadoop 的例子-0.20.203.1-SNAPSHOT.jar

-文件"hdfs:///example/apps/wc.exe,hdfs:///example/apps/cat.exe"

-输入"/ example/data/davinci.txt"

-输出"/ example/data/StreamingOutput/wc.txt"

-映射器"cat.exe"

-减速机"wc.exe"

 

在示例中,映射器和减速机是从 stdin,逐行读取输入并发出输出到标准输出的可执行文件。 这些文件产生一份地图/减少工作,提交给执行群集。 该映射文件,cat.exe,和减速机文件,wc.exe,所示图 3

The Mapper and Reducer Files
图 3 的映射器和减速机文件

下面是这份工作是如何工作的。 第一次的映射文件启动作为映射任务初始化过程。 如果有多个地图制作者们,每年将推出作为一个独立的过程,在初始化。 在这种情况下,有只单一映射器 file—cat.exe。 Exe 上­起诉应对,该映射器任务输入转换为线条和 MapReduce 作业的 stdin 部分饲料这些行。 下一步,映射器收集行从 stdout 输出,并将每行转换成一个键/值对。 (它可以更改) 的默认行为是关键从行到选项卡上的第一个字符的前缀创建的值从在行的其余部分创建的。 如果行中有没有选项卡,整行成为键和值将为空。

映射器的任务完成后,作为一个独立的过程,在减速机任务初始化将启动减速机的每个文件。 执行,减速机输入的键/值对转换为线条,并助长这些行 stdin 进程。 下一步,减速机收集行-­从 stdout 定向的输出处理和转换键/值对,将其作为输出的减速机收集的每一行。

使用 HiveQL 来查询配置单元的表

使用交互式 Web 控制台,您可以执行您定义 Hadoop 群集中配置单元查询针对配置单元表。 若要了解有关配置单元的详细信息,请参阅 hive.apache.org。

要使用的配置单元,您首次创建 (和加载) 配置单元的表。 使用我们的字数 MapReduce 示例输出文件 (DavinciTop10­Words.txt),您可以执行以下命令来创建,然后验证您的新配置单元表:

配置单元 > 加载数据 INPATH

'' hdfs://lynnlangit.cloudapp.net:9000/user/lynnlangit/DaVinciTop10Words.txt

改写成表 wordcounttable ;

配置单元 > 显示表 ;

配置单元 > 描述 wordcounttable:

配置单元 > 选择 * 从 wordcounttable ;

 

配置单元的语法是类似于 SQL 语法,和 HiveQL 提供了类似的查询功能。 请记住所有的数据是默认情况下,在 Hadoop 区分大小写。

连接到您的群集的其他方法

使用 RDP 除了使用您通过门户网站的群集,您也可以建立远程桌面连接到群集的 NameNode 服务器。 要通过 RDP 连接,单击在门户网站上的远程桌面按钮,然后单击下载的 RDP 连接文件,出现提示时,输入您的管理员的用户名和密码。 如果出现提示,请打开您的客户端计算机上的防火墙端口。 建立连接后,您可以直接与您的群集 NameNode 使用 Windows 资源管理器外壳或其他工具,包括 Hadoop 安装,那样你会默认 Hadoop 经验工作。

我的 NameNode 服务器使用安装 Apache Hadoop 释放 0.20.203.1 快照有两个处理器和 14 GB 的 RAM,服务器上运行 Windows Server 2008 R2 企业 SP1。 请注意该群集资源包含名称节点和关联的工人的节点,所以我的样本群集的处理器总数是八。

安装过程包括标准 Hadoop 管理工具,如 Hadoop 命令外壳程序或命令行界面 (CLI) Hadoop MapReduce 作业跟踪器 (位于 http://[namenode]:50030) 和 Hadoop NameNode HDFS (在 http://[namenode]:50070) 上找到。 使用 Hadoop 命令外壳程序可以运行 MapReduce 作业或其他管理任务 (如管理您 DFS 群集状态) 通过您的 RDP 会话。

此时,您可以通过使用 Windows 客户端机器的 RDP 连接。 目前,RDP 连接使用 cookie 来启用端口转发。 远程桌面连接的 Mac 客户端没有使用该 cookie,所以它无法连接到虚拟机的能力。

使用 Sqoop 连接器 Microsoft 在 2011 年底运到 SQL Server Hadoop 几个连接器,(供 SQL Server 2008 R2 或更高版本或 SQL 服务器并行数据仓库)。 基于 Sqoop 的 SQL 服务器连接器被旨在让您导入或导出 Hadoop 在 Linux 上的和 SQL 服务器之间的数据。 您可以下载从连接器 bit.ly/JgFmm3。 此连接器需要作为 Sqoop 的同一节点上安装 SQL Server 的 JDBC 驱动程序。 下载驱动程序在 bit.ly/LAIU4F

你会发现一个示例,演示如何使用 Sqoop 来导入或导出 SQL Azure 和门户网站的样本部分中 HDFS 之间的数据。

使用 FTP 使用 FTP,你必须先打开一个端口,您可以通过单击在门户网站上的配置端口按钮,然后拖动滑块以打开 FTP (端口 2226年) 的默认端口。 沟通与 FTP 服务器,您需要为您的帐户的密码的 MD5 哈希值。 通过 RDP 连接,打开 users.conf 文件,复制将用来通过 FTP 传输文件,然后使用此值来连接的帐户的密码的 MD5 哈希值。 注意密码的 MD5 哈希值可能不完全受信任的 Hadoop 服务器上使用自签名的证书。

在本条中的门户网站,也可以打开一个用于 ODBC 连接 (如 Excel) 端口。 ODBC 服务器连接的默认端口号为 10000。 对于更复杂的端口配置,不过,使用 RDP 连接到您的群集。

使用 ODBC 驱动程序 Hadoop (到 Excel 中,PowerPivot 的连接),您可以从门户网站的下载页面下载 Hadoop 的 ODBC 驱动程序。 此驱动程序,其中包括添加在 excel,可以从 Hadoop 连接到 Excel 或 PowerPivot。 图 4 显示添加在安装后添加到 Excel 的 Hive 窗格按钮。 该按钮将公开配置单元查询窗格,您可以在其中建立到本地宿主的 Hadoop 服务器或远程实例的连接。 这样做之后, 您可以写配置单元查询 (通过 HiveQL) 针对该群集并执行然后使用的结果被返回到 Excel。


图 4 在 Excel 中的配置单元查询窗格

您也可以连接到用于 Excel 使用 PowerPivot Hadoop 数据。 要从 Hadoop 连接到 PowerPivot,首先创建用于 OLE DB 使用的配置单元提供的 ODBC 连接。 在配置单元查询窗格上下, 一步连接到 Hadoop 群集时使用您以前,配置的连接然后选择配置单元表 (或写 HiveQL 查询),将所选的数据返回到 PowerPivot。

一定要下载您的计算机硬件和 Excel 的 ODBC 驱动程序的正确版本。 该驱动程序在 32 位和 64 位版本中可用。

简单、 灵活 — — 但与一些未知因素

对 Windows Azure beta Hadoop 显示了几个有趣的优势,包括:

  • 安装程序很容易使用直观的地铁样式的 Web 门户。
  • 您可以得到灵活的语言选择运行 MapReduce 作业和数据查询。 您可以运行 MapReduce 作业使用 Java、 C#、 猪或 JavaScript,并可以使用配置单元 (HiveQL) 执行的查询。
  • 如果你熟悉 Hadoop 技术,您可以使用您现有的技能。 这种实现是符合 Apache Hadoop 快照 0.203 +。
  • 有多种连接选项,其中 ODBC 驱动程序 (SQL 服务器/Excel)、 RDP 和其他的客户端,以及连接到其他云数据存储包括从 Microsoft (Windows Azure Blob,Windows Azure 数据市场) 和其他 (亚马逊 Web 服务 S3 桶)。

然而,有许多未知因素在版本上将公开发布的 Windows Azure Hadoop 的:

  • 当前版本是私人 beta 只 ; 有一个路线图及计划的版本功能小信息。
  • 价格尚未公布。
  • 在测试版中,期间有可以上载的文件的大小限制和 Microsoft 包括一份免责声明,"测试版是用于测试的功能,不用于测试生产级数据加载"。所以尚不清楚的发布版本的性能将会是什么样子了。

视频演示 (截屏视频) 对 Windows Azure Hadoop 的 beta 版功能,请参见 BigData 播放列表在 YouTube 上 bit.ly/LyX7Sj

Lynn Langit (LynnLangit.com) 运行自己的技术培训和咨询公司。她设计和生成的数据的解决方案,包括 RDBMS 和 NoSQL 系统。她作为微软的开发者福音工作了四年之后最近回私人执业。她是三个书籍 SQL 服务器的商业情报,最近"智能商业智能解决方案与 SQL Server 2008"(微软出版社,2009 年) 的作者。她也是非营利的 TKP 的创始人 (TeachingKidsProgramming.org)。

由于下面的技术专家,检讨这篇文章:Denny Lee