无论使用RDD/WriteClient API还是数据源,请参考以下云存储平台配置对云存储的访问。
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>