强制使用 hadoop 进行 S3 连接

强制使用 hadoop 进行 S3 连接

我正在尝试使用 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>

相关内容