2010-11-04 128 views
0

我创建了AMI映像,并从Cloudera CDH2构建安装了Hadoop。我配置我的核心-site.xml中像这样:我无法让Hadoop开始使用Amazon EC2/S3

<property> 
    <name>fs.default.name</name> 
    <value>s3://<BUCKET NAME>/</value> 
</property> 
<property> 
    <name>fs.s3.awsAccessKeyId</name> 
    <value><ACCESS ID></value> 
</property> 
<property> 
    <name>fs.s3.awsSecretAccessKey</name> 
    <value><SECRET KEY></value> 
</property> 
<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/var/lib/hadoop-0.20/cache/${user.name}</value> 
</property> 

,但我得到了以下错误消息时我在NameNode的日志启动Hadoop守护进程:

2010-11-03 23:45:21,680 ERROR org.apache.hadoop.hdfs.server.namenode.NameNode:  java.lang.IllegalArgumentException: Invalid URI for NameNode address (check  fs.default.name): s3://<BUCKET NAME>/ is not of scheme 'hdfs'. 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:177) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:198) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:306) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1006) 
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1015) 

2010-11-03 23:45:21,691 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG: 

不过,我能在命令行中,像这样的hadoop执行命令:

hadoop fs -put sun-javadb-common-10.5.3-0.2.i386.rpm s3://<BUCKET NAME>/ 

hadoop fs -ls s3://poc-jwt-ci/ 
Found 3 items 
drwxrwxrwx -   0 1970-01-01 00:00/
-rwxrwxrwx 1  16307 1970-01-01 00:00 /sun-javadb-common-10.5.3-0.2.i386.rpm 
drwxrwxrwx -   0 1970-01-01 00:00 /var 

你会发现有在桶中//var文件夹。我跑了Hadoop的NameNode的-format当我​​第一次看到这个错误,然后重新启动所有服务,但仍然收到怪异Invalid URI for NameNode address (check fs.default.name): s3://<BUCKET NAME>/ is not of scheme 'hdfs'.

我也注意到,文件系统创建看起来像这样:

hadoop fs -ls s3://<BUCKET NAME>/var/lib/hadoop-0.20/cache/hadoop/mapred/system 
Found 1 items 
-rwxrwxrwx 1   4 1970-01-01 00:00 /var/lib/hadoop0.20/cache/hadoop/mapred/system/jobtracker.info 

任何想法发生了什么?

+0

配置中的S3设置作为文件系统的实现? – 2010-11-04 20:15:53

回答

3

首先我建议你只使用Amazon Elastic MapReduce。您的结尾需要零配置。电子病历还有一些内部优化和监控,可以为您带来好处。

二,不要使用s3:作为您的默认FS。首先,s3速度太慢,无法存储作业之间的中间数据(hadoop中的典型工作单元是十几个MR作业)。它也以“专有”格式(块等)存储数据。所以外部应用程序无法有效地触及s3中的数据。

请注意,s3:在EMR中是不一样的s3:在标准的hadoop发行版中。亚马逊人实际上是别名s3:as s3n:(s3n:只是raw/native s3 access)。

+0

EMP是否适合大数据量?我对此很陌生,并认为S3最适合存储大量数据,并设置一组AMI来处理它。 – Nathan 2010-11-05 02:37:56

+0

我经常在EMR上运行200多个节点群集。所有持久/权威的数据都保存在s3上,效率很高。所有中间数据都保存在hdfs上,直到我完成作业后销毁群集。所以是的,它的规模很好。 (EMR在EC2上运行,如果你不想要,你就不需要处理它) – cwensel 2010-11-06 01:41:25

1

您也可以使用Apache Whirr这个工作流程是这样的:

  1. 开始通过下载从http://www.apache.org/dyn/closer.cgi/whirr/

  2. 最新的版本(0.7.0在这个时候)提取存档文件并尝试运行./bin/whirr version。您需要安装Java才能使其工作。

  3. 让您的Amazon AWS证书可作为环境变量:

     
    export AWS_ACCESS_KEY_ID=... 
    export AWS_SECRET_ACCESS_KEY=...

  4. 更新Hadoop的EC2的配置通过编辑recipes/hadoop-ec2.properties以符合您的需求。检查Configuration Guide了解更多信息。

  5. 运行启动群集的Hadoop:

     
    ./bin/whirr launch-cluster --config recipes/hadoop-ec2.properties

  6. 您可以通过执行tail -f whirr.log

  7. 看到详细的日志输出现在,您可以登录到集群,做你的工作。

     
    ./bin/whirr list-cluster --config recipes/hadoop-ec2.properties 
    ssh namenode-ip 
    start jobs as needed or copy data from/to S3 using distcp 
    

更多的解释你应该阅读Quick Start Guide5 minutes guide

声明:我是提交者之一。

+0

快速入门指南和5分钟指南现在是死链接。 – misterbee 2011-11-24 00:53:32

+1

我更新了链接。从孵化器毕业后,结构发生了一些变化。 – 2012-02-07 19:58:21

1

我认为你不应该执行bin/hadoop namenode -format,因为它用于格式化hdfs。在后来的版本中,hadoop已经将这些函数移动到一个单独的脚本文件中,该文件称为“bin/hdfs”。在core-site.xml和其他配置文件中设置配置参数后,可以直接使用S3作为基础文件系统。

0

使用

fs.defaultFS = S3N:// awsAccessKeyId:awsSecretAccessKey @ BucketName在/etc/hadoop/conf/core-site.xml

那就不要开始你的数据节点或名称节点,如果您需要您的数据节点和NameNode的这是不行的服务..

我这样做,可以使用类似 须藤HDFS DFS -ls/

注意如果您有awsSecretAccessKey与“/”命令来访问我斗字符,那么你将不得不对url进行编码。

0

使用s3n而不是s3。

hadoop fs -ls s3n://<BUCKET NAME>/etc