我尝试使用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
使用代理主机?
答案 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类中。您需要将此文件分发到所有节点,以便它可以执行分布式副本。