Hadoop distcp到HTTP代理后面的S3

时间:2013-11-27 12:02:24

标签: hadoop amazon-s3 hdfs

我尝试使用distcp将某些文件从HDFS复制到亚马逊s3。我的Hadoop集群通过HTTP代理连接到Internet,但我无法弄清楚如何在连接到s3时指定它。我目前正在解决这个问题:

httpclient.HttpMethodDirector: I/O exception (org.apache.commons.httpclient.ConnectTimeoutException) caught when processing request: The host did not accept the connection within timeout of 60000 ms

这表明它正在尝试直接连接到亚马逊。如何让distcp使用代理主机?

2 个答案:

答案 0 :(得分:1)

我在这里发布了另一个答案,因为它是Google在提出hdfs s3代理时出现的第一个SOW问题,根据我的说法,现有的答案并不是最好的。

为HDFS配置S3最好在每个节点上的hdfs-site.xml文件中完成。通过这种方式,它适用于distcp(从HDFS复制到S3,相反),但也适用于Impala和可能使用S3的其他Hadoop组件。

因此,请将以下属性添加到hdfs-site.xml:

<property>
      <name>fs.s3a.access.key</name>
      <value>your_access_key</value>
    </property>
    <property>
      <name>fs.s3a.secret.key</name>
      <value>your_secret_key</value>
    </property>
    <property>
      <name>fs.s3a.proxy.host</name>
      <value>your_proxy_host</value>
    </property>
    <property>
      <name>fs.s3a.proxy.port</name>
      <value>your_proxy_port</value>
    </property>

答案 1 :(得分:0)

在文件/etc/hadoop/conf/jets3t.properties中设置这些属性

httpclient.proxy-host = proxy.domain.com
httpclient.proxy-port = 12345

如果在任何地方记录,我找不到它。但是处理它的代码在RestS3Service类中。您需要将此文件分发到所有节点,以便它可以执行分布式副本。