我正在尝试使用 Hadoop 将文件上传到 S3:
hadoop fs -Dfs.s3a.connection.ssl.enabled=false -Dfs.s3a.proxy.host=127.0.0.1 -Dfs.s3a.proxy.port=8123 -put pig_1421167148680.log s3a://access:secret@bucket/temp/trash
但我无法强制 Hadoop 使用代理。
16/01/08 11:57:27 INFO http.AmazonHttpClient: Unable to execute HTTP
request: Connect to bucket.s3.amazonaws.com:80 timed out
com.cloudera.org.apache.http.conn.ConnectTimeoutException: Connect to
代理运行良好。我可以使用 AWS CLI 访问 S3 存储桶。
答案1
为此,您需要使用 distcp 而不是 hadoop fs 命令,因为 hadoop fs 在您本地 HDFS 集群上工作,而 distcp 是在集群之间复制的方式(S3 si 被视为集群)。
为了使其工作,我将所有属性放在每个节点的 hdfs-site.xml 中(因为 distcp 分布在所有节点上),而不是命令行中。
因此,在每个节点上的 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>