如何使用prem hadoop集群访问s3文件?

如何使用prem hadoop集群访问s3文件?,hadoop,amazon-s3,cloudera,Hadoop,Amazon S3,Cloudera,我有一个cloudera虚拟机,能够设置aws CLI和设置密钥。但是,我无法使用hadoop fs-ls s3://gft ri或任何hadoop命令读取s3文件或访问s3文件。我可以使用aws CLI查看目录/文件 命令快照: (base) [cloudera@quickstart conf]$ **aws s3 ls s3://gft-risk-aml-market-dev/** PRE test/ 2019-11-27 04:11:2

我有一个cloudera虚拟机,能够设置aws CLI和设置密钥。但是,我无法使用hadoop fs-ls s3://gft ri或任何hadoop命令读取s3文件或访问s3文件。我可以使用aws CLI查看目录/文件

命令快照:

(base) [cloudera@quickstart conf]$ **aws s3 ls s3://gft-risk-aml-market-dev/**
                           PRE test/
2019-11-27 04:11:26        458 required

(base) [cloudera@quickstart conf]$ **hdfs dfs -ls s3://gft-risk-aml-market-dev/**
19/11/27 05:30:45 WARN fs.FileSystem: S3FileSystem is deprecated and will be removed in future releases. Use NativeS3FileSystem or S3AFileSystem instead.
ls: `s3://gft-risk-aml-market-dev/': No such file or directory
我已经把core-site.xml的详细信息放在这里了

  <property>
    <name>fs.s3.impl</name>
    <value>org.apache.hadoop.fs.s3.S3FileSystem</value>
  </property>

  <property>
    <name>fs.s3.awsAccessKeyId</name>
    <value>ANHS</value>
  </property>

  <property>
    <name>fs.s3.awsSecretAccessKey</name>
    <value>EOo</value>
  </property>

   <property>
     <name>fs.s3.path.style.access</name>
     <value>true</value>
    </property>

   <property>
    <name>fs.s3.endpoint</name>
    <value>s3.us-east-1.amazonaws.com</value>
  </property>

     <property>
        <name>fs.s3.connection.ssl.enabled</name>
        <value>false</value>
    </property>

fs.s3.impl
org.apache.hadoop.fs.s3.s3文件系统
fs.s3.awsAccessKeyId
ANHS
fs.s3.awsSecretAccessKey
EOo
fs.s3.path.style.access
真的
fs.s3.0
s3.us-east-1.amazonaws.com
fs.s3.connection.ssl.enabled
假的

我会使用Linux控制台装载S3存储桶,然后以这种方式将文件从那里移动到HDFS。您可能需要首先通过sudo'ing进入root来在Cloudera quickstart上安装它,例如sudo yum install s3fs fuse

最后。Cloudera Quickstart V13及以下版本的core-site.xml工作正常

  <property>
    <name>fs.s3a.impl</name>
    <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
  </property>

  <property>
    <name>fs.s3a.awsAccessKeyId</name>
    <value>AKIAxxxx</value>
  </property>

  <property>
    <name>fs.s3a.awsSecretAccessKey</name>
    <value>Xxxxxx</value>
  </property>

   <property>
     <name>fs.s3a.path.style.access</name>
     <value>true</value>
    </property>

<property>
  <name>fs.AbstractFileSystem.s3a.impl</name>
  <value>org.apache.hadoop.fs.s3a.S3A</value>
  <description>The implementation class of the S3A AbstractFileSystem.</description>
</property>

   <property>
    <name>fs.s3a.endpoint</name>
    <value>s3.us-east-1.amazonaws.com</value>
  </property>

     <property>
        <name>fs.s3a.connection.ssl.enabled</name>
        <value>false</value>
    </property>

<property>
  <name>fs.s3a.readahead.range</name>
  <value>64K</value>
  <description>Bytes to read ahead during a seek() before closing and
  re-opening the S3 HTTP connection. This option will be overridden if
  any call to setReadahead() is made to an open stream.</description>
</property>

<property>
  <name>fs.s3a.list.version</name>
  <value>2</value>
  <description>Select which version of the S3 SDK's List Objects API to use.
  Currently support 2 (default) and 1 (older API).</description>
</property>

fs.s3a.impl
org.apache.hadoop.fs.s3a.S3AFileSystem
fs.s3a.awsAccessKeyId
AKIAxxxx
fs.s3a.awsSecretAccessKey
Xxxxxx
fs.s3a.path.style.access
真的
fs.AbstractFileSystem.s3a.impl
org.apache.hadoop.fs.s3a.s3a
S3A抽象文件系统的实现类。
fs.s3a.endpoint
s3.us-east-1.amazonaws.com
fs.s3a.connection.ssl.enabled
假的
fs.s3a.readahead.range
64K
关闭和关闭前在seek()过程中读取的字节数
重新打开S3HTTP连接。如果出现以下情况,此选项将被覆盖:
对setReadahead()的任何调用都是对开放流进行的。
fs.s3a.list.version
2.
选择要使用的S3SDK列表对象API的版本。
目前支持2(默认)和1(旧API)。

您应该将S3AFileSystem与fs.s3a.impl一起使用您是说fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem fs.s3.impl org.apache.hadoop.fs.s3.s3文件系统吗。但到目前为止,s3还没有被弃用。这不应该是原因。您应该删除所有S3文件系统用法,或者更改impl值以使用S3AFileSystem。另一个是不推荐的,根据你的输出中的消息,我这样做了。我可以看到文件夹。但无法访问。错误消息:(基本)[cloudera@quickstart形态]$hdfs dfs-mkdir-p s3a://gft risk aml market dev/new 19/11/27 19:18:07 INFO http.AmazonHttpClient:无法执行http请求:目标服务器未能响应com.cloudera.org.apache.http.NoHttpResponseException:目标服务器未能在com.cloudera.org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead响应(DefaultHttpResponseParser.java:95)Hadoop可以读写S3,并将其作为分布式文件系统从任何客户端公开,而不仅仅是单个机器上的本地挂载。挂载?我不同意这一否决票,因为他本质上只是从机器上的S3存储桶中读取,实际上并没有取代HDFS