【问题标题】:Accessing read-only Google Storage buckets from Hadoop从 Hadoop 访问只读的 Google Storage 存储分区
【发布时间】:2014-08-14 14:50:23
【问题描述】:

我正在尝试使用 bdutil 脚本从部署在 Google Cloud 中的 Hadoop 集群访问 Google Storage 存储桶。如果存储桶访问是只读的,则会失败。

我在做什么:

  1. 使用

    部署集群
    bdutil deploy -e datastore_env.sh
    
  2. 在主人身上:

    vgorelik@vgorelik-hadoop-m:~$ hadoop fs -ls gs://pgp-harvard-data-public 2>&1 | head -10
    14/08/14 14:34:21 INFO gcs.GoogleHadoopFileSystemBase: GHFS version: 1.2.8-hadoop1
    14/08/14 14:34:25 WARN gcsio.GoogleCloudStorage: Repairing batch of 174 missing directories.
    14/08/14 14:34:26 ERROR gcsio.GoogleCloudStorage: Failed to repair some missing directories.
    java.io.IOException: Multiple IOExceptions.
    java.io.IOException: Multiple IOExceptions.
        at com.google.cloud.hadoop.gcsio.GoogleCloudStorageExceptions.createCompositeException(GoogleCloudStorageExceptions.java:61)
        at com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.createEmptyObjects(GoogleCloudStorageImpl.java:361)
        at com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.createEmptyObjects(GoogleCloudStorageImpl.java:372)
        at com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl.listObjectInfo(GoogleCloudStorageImpl.java:914)
        at com.google.cloud.hadoop.gcsio.CacheSupplementedGoogleCloudStorage.listObjectInfo(CacheSupplementedGoogleCloudStorage.java:455)
    

GCS Java source code,Google Cloud Storage Connector for Hadoop 似乎需要空的“目录”对象,如果桶是可写的,它可以自己创建;否则失败。设置fs.gs.implicit.dir.repair.enable=false 会导致“检索对象时出错”错误。

是否可以以某种方式使用只读存储桶作为 MR 作业输入?

我使用gsutil 进行文件上传。文件上传时可以强制创建这些空对象吗?

【问题讨论】:

    标签: hadoop google-cloud-storage gsutil google-cloud-platform google-hadoop


    【解决方案1】:

    是的,您可以使用只读的 Google Cloud Storage 存储桶作为 Hadoop 作业的输入。

    例如,我已经多次运行这个工作:

    ./hadoop-install/bin/hadoop \
      jar ./hadoop-install/contrib/streaming/hadoop-streaming-1.2.1.jar \
      -input gs://pgp-harvard-data-public/hu0*/*/*/*/ASM/master* \
      -mapper cgi-mapper.py -file cgi-mapper.py --numReduceTasks 0 \
      -output gs://big-data-roadshow/output
    

    这将访问您在上面的示例中提到的同一个只读存储桶。

    我们的示例之间的不同之处在于,我的示例以 glob (*) 结尾,适用于 Hadoop 的 Google Cloud Storage 连接器能够在无需使用任何“占位符”目录对象的情况下对其进行扩展。

    我建议您使用gsutil 来探索您感兴趣的只读存储桶(因为它不需要“占位符”对象),并且一旦您有了一个返回所需对象列表的 glob 表达式已处理,请在您的 hadoop 命令中使用该 glob 表达式。

    您的第二个问题(“gsutil 是否可以在文件上传时强制创建这些空对象”)的答案目前是“否”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2018-03-17
      • 2017-06-12
      • 2017-11-15
      • 2019-04-05
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多