gpt4 book ai didi

google-api - 将 50TB 数据从本地 Hadoop 集群迁移到 Google Cloud Storage

转载 作者:行者123 更新时间:2023-12-04 16:39:06 25 4
gpt4 key购买 nike

我正在尝试将 Hadoop 集群中的现有数据 (JSON) 迁移到 Google Cloud Storage。

我已经探索过 GSUtil,似乎将大数据集移动到 GCS 是推荐的选项。它似乎可以处理巨大的数据集。 GSUtil 似乎只能将数据从本地机器移动到 GCS 或 S3<->GCS,但不能从本地 Hadoop 集群移动数据。

  • 将数据从本地 Hadoop 集群移动到 GCS 的推荐方法是什么?
  • 如果是 GSUtil,它可以直接将数据从本地 Hadoop 集群(HDFS)移动到 GCS 还是首先需要在运行 GSUtil 的机器上复制文件然后传输到 GCS?
  • 使用 Google 客户端 (Java API) 库与 GSUtil 的优缺点是什么?

  • 非常感谢,

    最佳答案

    问题 1:将数据从本地 Hadoop 集群移动到 GCS 的推荐方法是使用 Google Cloud Storage connector for Hadoop .该站点上的说明主要用于在 Google Compute Engine VM 上运行 Hadoop,但您也可以直接下载 GCS 连接器,gcs-connector-1.2.8-hadoop1.jar如果您使用的是 Hadoop 1.x 或 Hadoop 0.20.x,或 gcs-connector-1.2.8-hadoop2.jar适用于 Hadoop 2.x 或 Hadoop 0.23.x。

    只需将 jarfile 复制到您的 hadoop/lib 目录或 $HADOOP_COMMON_LIB_JARS_DIR对于 Hadoop 2:

    cp ~/Downloads/gcs-connector-1.2.8-hadoop1.jar /your/hadoop/dir/lib/

    如果您运行的是 0.20.x,您可能还需要将以下内容添加到您的 hadoop/conf/hadoop-env.sh 文件中:
    export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/your/hadoop/dir/lib/gcs-connector-1.2.8-hadoop1.jar

    然后,您可能需要使用服务帐户“ key 文件”身份验证,因为您在本地 Hadoop 集群上。访问您的 cloud.google.com/console,查找 APIs & auth在左侧,单击 Credentials , 如果你还没有一键点击 Create new Client ID , 选择 Service account在点击 Create client id 之前,然后现在,连接器需要“.p12”类型的 key 对,所以单击 Generate new P12 key并跟踪下载的 .p12 文件。在将其放置在更容易从 Hadoop 访问的目录中之前重命名它可能会很方便,例如:
    cp ~/Downloads/*.p12 /path/to/hadoop/conf/gcskey.p12

    将以下条目添加到 Hadoop conf 目录中的 core-site.xml 文件:
    <property>
    <name>fs.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
    </property>
    <property>
    <name>fs.gs.project.id</name>
    <value>your-ascii-google-project-id</value>
    </property>
    <property>
    <name>fs.gs.system.bucket</name>
    <value>some-bucket-your-project-owns</value>
    </property>
    <property>
    <name>fs.gs.working.dir</name>
    <value>/</value>
    </property>
    <property>
    <name>fs.gs.auth.service.account.enable</name>
    <value>true</value>
    </property>
    <property>
    <name>fs.gs.auth.service.account.email</name>
    <value>your-service-account-email@developer.gserviceaccount.com</value>
    </property>
    <property>
    <name>fs.gs.auth.service.account.keyfile</name>
    <value>/path/to/hadoop/conf/gcskey.p12</value>
    </property>

    fs.gs.system.bucket 通常不会使用,除非在某些情况下用于映射临时文件,您可能只想为此目的创建一个新的一次性存储桶。使用主节点上的这些设置,您应该已经能够测试 hadoop fs -ls gs://the-bucket-you-want to-list .此时,您已经可以尝试使用简单的 hadoop fs -cp hdfs://yourhost:yourport/allyourdata gs://your-bucket 将所有数据汇集到主节点之外。 .

    如果您想使用 Hadoop 的 distcp 加速它,请将 lib/gcs-connector-1.2.8-hadoop1.jar 和 conf/core-site.xml 同步到所有 Hadoop 节点,它应该都能按预期工作。请注意,无需重新启动数据节点或名称节点。

    问题 2:虽然 Hadoop 的 GCS 连接器能够直接从 HDFS 复制而无需额外的磁盘缓冲区,但 GSUtil 不能,因为它无法解释 HDFS 协议(protocol);它只知道如何处理实际的本地文件系统文件或如您所说的 GCS/S3 文件。

    问题 3:使用 Java API 的好处是灵 active ;您可以选择如何处理错误、重试、缓冲区大小等,但这需要更多的工作和计划​​。使用 gsutil 非常适合快速用例,并且您从 Google 团队继承了许多错误处理和测试。 Hadoop 的 GCS 连接器实际上是直接构建在 Java API 之上的,并且由于它都是开源的,您可以在 GitHub 上的源代码中查看需要哪些东西才能使其顺利运行: https://github.com/GoogleCloudPlatform/bigdata-interop/blob/master/gcs/src/main/java/com/google/cloud/hadoop/gcsio/GoogleCloudStorageImpl.java

    关于google-api - 将 50TB 数据从本地 Hadoop 集群迁移到 Google Cloud Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25291397/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com