Hudi配置连接云平台存储系统

无论使用RDD/WriteClient API还是数据源,请参考以下云存储平台配置对云存储的访问。

S3文件系统

在此页面中,我们将说明如何将Hudi Spark作业存储到AWS S3中。

Hudi-S3兼容性需要两种配置:

  • 为Hudi添加AWS凭证
  • 将所需的Jar添加到对应的类路径下
AWS凭证

将Hudi与S3一起使用的最简单方法是配置您的凭据SparkSession或SparkContext使用S3凭据。Hudi会自动接听并与S3通话。

或将必需的配置添加到您的core-site.xml中,Hudi可从中获取它们。将fs.defaultFSS3存储桶名称替换为,Hudi应该能够从存储桶中进行读取/写入。

  <property>
      <name>fs.defaultFS</name>
      <value>s3://ysharma</value>
  </property>

  <property>
      <name>fs.s3.impl</name>
      <value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
  </property>

  <property>
      <name>fs.s3.awsAccessKeyId</name>
      <value>AWS_KEY</value>
  </property>

  <property>
       <name>fs.s3.awsSecretAccessKey</name>
       <value>AWS_SECRET</value>
  </property>

  <property>
       <name>fs.s3n.awsAccessKeyId</name>
       <value>AWS_KEY</value>
  </property>

  <property>
       <name>fs.s3n.awsSecretAccessKey</name>
       <value>AWS_SECRET</value>
  </property>

诸如hudi-cli或deltastreamer工具之类的实用程序可以通过以开头的环境变量来获取s3凭据HOODIE_ENV_。例如,下面是一个bash片段,用于设置此类变量,然后使其能够处理s3中存储的数据集。

export HOODIE_ENV_fs_DOT_s3a_DOT_access_DOT_key=$accessKey
export HOODIE_ENV_fs_DOT_s3a_DOT_secret_DOT_key=$secretKey
export HOODIE_ENV_fs_DOT_s3_DOT_awsAccessKeyId=$accessKey
export HOODIE_ENV_fs_DOT_s3_DOT_awsSecretAccessKey=$secretKey
export HOODIE_ENV_fs_DOT_s3n_DOT_awsAccessKeyId=$accessKey
export HOODIE_ENV_fs_DOT_s3n_DOT_awsSecretAccessKey=$secretKey
export HOODIE_ENV_fs_DOT_s3n_DOT_impl=org.apache.hadoop.fs.s3a.S3AFileSystem
AWS库

AWS hadoop库添加到我们的类路径

  • com.amazonaws:aws-java-sdk:1.10.34
  • org.apache.hadoop:hadoop-aws:2.7.3

如果使用AWS Glue 数据 ,则需配置。

  • com.amazonaws.glue:aws-glue-datacatalog-hive2-client:1.11.0
  • com.amazonaws:aws-java-sdk-glue:1.11.475

Google Cloud Storage

GCS和Hudi协同工作所需的配置。对于GCS上的Hudi存储,区域存储桶提供了具有高度一致性的DFS API。

GCS配置

Hudi GCS兼容性需要两种配置:

  • 为Hudi添加GCS凭据
  • 将所需的jar添加到类路径下

GCS凭证

在Hudi可以从中获取所需配置的core-site.xml中添加所需配置。fs.defaultFS用您的GCS存储桶名称替换,Hudi应该能够从存储桶中进行读取/写入。

  <property>
    <name>fs.defaultFS</name>
    <value>gs://hudi-bucket</value>
  </property>

  <property>
    <name>fs.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
    <description>The FileSystem for gs: (GCS) uris.</description>
  </property>

  <property>
    <name>fs.AbstractFileSystem.gs.impl</name>
    <value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS</value>
    <description>The AbstractFileSystem for gs: (GCS) uris.</description>
  </property>

  <property>
    <name>fs.gs.project.id</name>
    <value>GCS_PROJECT_ID</value>
  </property>
  <property>
    <name>google.cloud.auth.service.account.enable</name>
    <value>true</value>
  </property>
  <property>
    <name>google.cloud.auth.service.account.email</name>
    <value>GCS_SERVICE_ACCOUNT_EMAIL</value>
  </property>
  <property>
    <name>google.cloud.auth.service.account.keyfile</name>
    <value>GCS_SERVICE_ACCOUNT_KEYFILE</value>
  </property>

GCS库

GCS hadoop库添加到我们的类路径中

  • com.google.cloud.bigdataoss:gcs-connector:1.6.0-hadoop2

 

Microsoft Azure

Azure和Hudi协同工作所需的配置。支持的存储系统。

有两个支持Hudi的存储系统。

  • Azure Blob存储
  • 第2代Azure Data Lake

已验证Spark和存储系统的组合,Azure Data Lake Storage Gen 2上的HDInsight Spark2.4,此组合开箱即用。无需额外的配置。

  • 将Hudi jar导入databricks工作区
  • 将文件系统挂载到dbutils。
    dbutils.fs.mount(
      source = "abfss://xxx@xxx.dfs.core.windows.net",
      mountPoint = "/mountpoint",
      extraConfigs = configs)
    
  • 编写Hudi数据集时,请使用abfss URL
    inputDF.write
      .format("org.apache.hudi")
      .options(opts)
      .mode(SaveMode.Append)
      .save("abfss://<<storage-account>>.dfs.core.windows.net/hudi-tables/customer")
    
  • 读取Hudi数据集时,请使用安装点
    spark.read
      .format("org.apache.hudi")
      .load("/mountpoint/hudi-tables/customer")

 

Aliyun OSS 部署

为了让Hudi使用OSS,需要增加两部分的配置:

  • 为Hidi增加Aliyun OSS的相关配置
  • 增加Jar包的MVN依赖
Aliyun OSS 相关的配置

新增下面的配置到你的Hudi能访问的core-site.xml文件。使用你的OSS bucket name替换掉fs.defaultFS,使用OSS endpoint地址替换fs.oss.endpoint,使用OSS的key和secret分别替换fs.oss.accessKeyId和fs.oss.accessKeySecret。主要Hudi就能读写相应的bucket。

    <property>
        <name>fs.defaultFS</name>
        <value>oss://bucketname/</value>
    </property>

    <property>
      <name>fs.oss.endpoint</name>
      <value>oss-endpoint-address</value>
      <description>Aliyun OSS endpoint to connect to.</description>
    </property>

    <property>
      <name>fs.oss.accessKeyId</name>
      <value>oss_key</value>
      <description>Aliyun access key ID</description>
    </property>

    <property>
      <name>fs.oss.accessKeySecret</name>
      <value>oss-secret</value>
      <description>Aliyun access key secret</description>
    </property>

    <property>
      <name>fs.oss.impl</name>
      <value>org.apache.hadoop.fs.aliyun.oss.AliyunOSSFileSystem</value>
    </property>
Aliyun OSS Libs

新增Aliyun hadoop的jar包的MVN依赖到pom.xml文件。由于hadoop-aliyun依赖hadoop 2.9.1+,因此你需要使用hadoop 2.9.1或更新的版本。

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-aliyun</artifactId>
    <version>3.2.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.8.1</version>
</dependency>
<dependency>
    <groupId>org.jdom</groupId>
    <artifactId>jdom</artifactId>
    <version>1.1</version>
</dependency>

发表评论