当前位置: 首页 > 知识库问答 >
问题:

从Hadoop访问只读Google存储桶

戚云
2023-03-14

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

我在做什么:

>

  • 使用

    bdutil deploy -e datastore_env.sh
    

    在主机上:

    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源代码,Google Cloud Storage Connector for Hadoop似乎需要空的“目录”对象,如果bucket是可写的,它可以自己创建这些对象;否则它就失败了。设置fs。gs。含蓄的迪尔。修理enable=false导致“检索对象时出错”错误。

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

    我使用gsutil上传文件。是否可以强制在文件上载时创建这些空对象?

  • 共有1个答案

    仲和韵
    2023-03-14

    是的,您可以使用只读Google云存储桶作为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
    

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

    我们的例子之间的区别是,我的例子以一个全局结尾(*),Hadoop的谷歌云存储连接器能够扩展这个全局,而不需要使用任何“占位符”目录对象。

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

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

     类似资料:
    • 我正在尝试编写一个Java程序,将Vault导出数据下载到Google云存储桶中,因为导出数据在两周后被删除。Vault数据与典型的GCS存储桶和对象标识关联,因此可能存储在GCS中。似乎有两个Java客户端库,com。谷歌。云存储和com。谷歌。应用程序编程接口。服务。存储,它似乎完成了我需要的功能,但以不同的方式工作,并使用不同的身份验证源(凭据对象)。如果我使用com。谷歌。应用程序编程接口

    • 我正在使用Spring引导连接到谷歌云存储。 我能够连接到一个文件,并从谷歌云存储桶中读取内容。 但是我不能得到谷歌云存储桶中所有文件的列表。 请帮帮我。 这很有效 这不工作。 有什么原因吗?

    • 问题内容: 我无法在Google Container Engine中使用“应用程序默认凭据”。这些文档说,它们是为App Engine和Compute Engine设计的,但是有人告诉我,它们应该透明地传递给在Container Engine上运行的容器。 这是失败的代码: 失败的错误: 期望Application Default Credentials与Container Engine一起使用是

    • 我在vue文件中的“方法”中有这个 我得到以下错误:未捕获(在promise中)TypeError:无法读取未定义的属性'$store'

    • 我正在尝试将应用程序在Azure上投入生产。此应用程序由一个webapp(运行Docker容器)组成,该应用程序应该与Azure存储帐户(blob)通信。 将Web应用的所有出站IP地址添加到我的存储帐户的防火墙设置后,我仍然没有访问Blob的权限。错误如下:“此请求无权执行此操作。” 然而,当我在本地运行我的应用程序,并将我的本地IP添加到这些相同的防火墙设置中时,它可以工作。当我没有将其添加到

    • 主要内容:本节引言:,1.Android文件的操作模式,2.文件的相关操作方法,3.文件读写的实现,4.读取SD卡上的文件,5.关于原生模拟器SD卡的问题,6.读取raw和assets文件夹下的文件,代码下载:,本节小结:本节引言: 嘿嘿,看到这个题目,相信部分读者会问,你前面的Fragment写完了吗?嗯,没写完,因为想例子,需要 一点时间,为了提高效率,所以决定像多线程一样,并发的来写教程,这样可能可以加快写教程的进度, 到现在为止,刚好写了60篇,离完成入门教程还很远呢,而前面也说过,想在