5

我正在尝试使用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用于文件上传。是否可以在文件上传时强制创建这些空对象?

4

1 回答 1

6

是的,您可以使用只读的 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 表达式,请使用该 glob 表达式在你的hadoop指挥下。

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

于 2014-08-15T19:02:43.423 回答