Hadoop教程

云端的Hadoop

尽管许多组织自建集群来运行Hadoop,但是仍有许多组织选择在租赁硬件所搭建 的云端运行Hadoop,或提供Hadoop服务。例如,Cloudera提供在公共(或私有)云 端运行Hadoop的工具; Amazon提供Hadoop云服务,名为Elastic MapReduce。本节讨论如何在Amazon EC2上运行Hadoop,这是一个优秀的构建低成本、试验 性的Hadoop系统的方法。

Amazon的EC2(Elastic Compute cloud)是计算服务,允许客户租借计算机(或称为 实例)来运行特定应用。客户可以按需启动和终止实例,并按照所租借实例的数量 和工作时长支付租金。

Apache Whirr项目所提供的脚本能方便地在EC2 和其他云提供商上运行Hadoop。这些脚本支持多项操作,包括启动集群、终止集 群、添加实例等。

在EC2上运行Hadoop对于某些工作流特别恰当。例如,用户将数据存储在Amazon S3上, 再在EC2上搭建集群来运行MapReduce作业,这些作业从S3上读取数据,并 在集群停机前写回到33中。如果集群的工作时间较长,还可将S3中的数据复制到 EC2的HDFS之中,通过数据本地化提高执行效率。相比之下,由于S3系统并不和EC2节点兼容,不可以直接使用S3系统。

安装

在用户可以在EC2上运行Hadoop之前,还需要仔细研究Amazon的新手向导(在 EC2网站http://aws.amazon.com/ec2/上)以便建立新帐号,安装EC2命令行工 具,并且启动一个实例。

接下来,安装Whirr,配置脚本来设置Amazon Web服务凭证、安全密钥细节以及 实例的类型和大小。相关的详细说明放Whirr的README文件中。

现在可以准备启动集群了。假设在test-hadoop-cluster集群中有一个主节点(运行 namenode和Jobtracker和五个工作节点(各运行datanode和tasktracker)。启动该集 群需键入以下指令:

% hadoop-ec2 launch-cluster test-hadoop-cluster 5

如果该集群尚无EC2安全组,则该指令会创建EC2安全组,允许主节点和工作节 点相互访问,允许从其他地方以SSH方式访问集群。在安全组建成之后,主节点 实例即被启动;接下来,五个工作实例也会被启动。这些工作节点被延后启动的原 因是使得主节点的主机名称能够被传到工作实例之中,使得datanode和tasktracker 一旦启动即可连接到主节点。

为了使用集群,从客户端发起的网络传输需要经过主节点,这个过程使用了 SSH 管道。可以用以下指令进行设置:

% eval 'hadoop-ec2 proxy test-hadoop-cluster'Proxy pid 27134

运行MapReduce作业

MapReduce作业可以从集群内部的机器上启动运行,也可以从集群外部的机器上 启动运行。下面,我们演示如何从刚刚构建集群的机器上运行一个作业,前提是在 本地机器上已经安装了和集群相同版本的Hadoop系统。

启动集群时,会在~/.hadoop-cloud/test-hadoop-cluster 目录中创建 hadoop-site.xml 文件。可以如下设置1HADOOP_CONF_DIR设环境变量,从而连接到集群中去:

% export HADOOP_CONF_DIR=~/.hadoop-cloud/test-hadoop-cluster

此时,集群的文件系统还是空的,因此还需要在运行作业之前增加测试数据。

% hadoop distcp sBn://hadoopbook/ncdc/all input/ncdc/all

数据准备完毕之后,可以用常用方式运行作业:

% hadoop jar job.jar MaxTemperatureWithCombiner input/ncdc/all output

或,还可以指定输入数据来自于S3,也具有相同效果。如果输入数据将被多个作 业使用时,最先将数据复制到HDFS,以节约带宽:

% hadoop jar job.jar MaxTemperatureWithCombiner s3n://hadoopbook/ncdc/all output

用户可以使用jobtracker的Web界面来监控作业运行的 进度。为了访问在工作节点上的网页,需要在浏览器中建立一个代理自动配置 (PAC)文件。参见Whirr文档以了解操作细节。

终止集群

运行terminate-cluster以终止运行指定的集群:

% hadoop-ec2 terminate-cluster test-hadoop-cluster

用户会被要求确认是否要终止运行集群中的所有实例。 最后,停止运行代理进程(当启动代理时,HADOOP_CLOUD_PROXY_PID环境变量已 被设置):

% kill $HADOOP_CLOUD_PROXY_PID

关注微信获取最新动态