【问题标题】:Accessing google cloud storage using hadoop FileSystem api使用 hadoop FileSystem api 访问谷歌云存储
【发布时间】:2016-02-07 01:34:11
【问题描述】:

在我的机器上,我配置了 hadoop core-site.xml 以识别 gs:// 方案,并将 gcs-connector-1.2.8.jar 添加为 Hadoop 库。我可以运行hadoop fs -ls gs://mybucket/ 并获得预期的结果。但是,如果我尝试从 java 中使用:

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
FileStatus[] status = fs.listStatus(new Path("gs://mybucket/"));

我在本地 HDFS 中而不是 gs://mybucket/ 中获取根目录下的文件,但这些文件以 gs://mybucket 开头。如果我在获取fs之前用conf.set("fs.default.name", "gs://mybucket");修改conf,那么我可以在GCS上看到文件。

我的问题是:
1. 这是预期的行为吗?
2.使用这个hadoop FileSystem api相对于google云存储客户端api有什么缺点吗?

【问题讨论】:

    标签: google-cloud-dataproc google-hadoop


    【解决方案1】:

    关于你的第一个问题,“预期”是有问题的,但我想我至少可以解释一下。当使用 FileSystem.get() 时,会返回默认的 FileSystem,默认情况下是 HDFS。我的猜测是 HDFS 客户端(DistributedFileSystem)有代码自动为文件系统中的所有文件添加方案 + 权限。

    不要使用 FileSystem.get(conf),试试

    FileSystem gcsFs = new Path("gs://mybucket/").getFS(conf)
    

    关于缺点,我可能会争辩说,如果您最终需要直接访问对象存储,那么无论如何您最终都会编写代码来直接与存储 API 交互(而且有些东西翻译得不是很好Hadoop FS API,例如对象组合、复杂对象写入前提条件,而不是简单对象覆盖保护等)。

    我承认有偏见(在团队中工作),但如果您打算使用来自 Hadoop Map/Reduce、来自 Spark 等的 GCS,那么适用于 Hadoop 的 GCS 连接器应该是一个相当安全的选择。

    【讨论】:

      猜你喜欢
      • 2017-11-23
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2017-03-18
      • 2019-11-10
      • 2019-10-22
      相关资源
      最近更新 更多