Apache Hudi使用问题汇总(一)

摘要:
您只需使用SparkUI查看写入操作,而无需设置单独的Hudi集群。Hudi支持软删除和硬删除。inputDF.write().format.options//audiclientoptscanbepassed以及.option…2)。当直接使用HoodieWriteClient时,您只需要使用配置来构造HoodieWriteConfig对象。HBaseIndex:Apache HBase是一个关键价值存储。您可以将索引存储在HBase中。如果您已经在使用HBase,这将非常方便。

1.如何写入Hudi数据集

通常,你会从源获取部分更新/插入,然后对Hudi数据集执行写入操作。如果从其他标准来源(如Kafka或tailf DFS)中提取数据,那么DeltaStreamer将会非常有用,其提供了一种简单的自我管理解决方案,可将数据写入Hudi。你还可以自己编写代码,使用Spark数据源API从自定义源获取数据,并使用Hudi数据源写入Hudi。

2. 如何部署Hudi作业

写入Hudi的好处是它可以像在YARN/Mesos甚至是K8S群集上运行的任何其他Spark作业一样运行。只需使用Spark UI即可查看写入操作,而无需单独搭建Hudi集群。

3. 如何查询刚写入的Hudi数据集

除非启用了Hive同步,否则与其他任何源一样,通过上述方法写入Hudi的数据集可以简单地通过Spark数据源进行查询。

val hoodieROView = spark.read.format("org.apache.hudi").load(basePath + "/path/to/partitions/*")
val hoodieIncViewDF = spark.read().format("org.apache.hudi")
     .option(DataSourceReadOptions.VIEW_TYPE_OPT_KEY(), DataSourceReadOptions.VIEW_TYPE_INCREMENTAL_OPT_VAL())
     .option(DataSourceReadOptions.BEGIN_INSTANTTIME_OPT_KEY(), <beginInstantTime>)
     .load(basePath);

请注意:当前不支持从Spark数据源读取实时视图。请使用下面的Hive路径。

如果在deltastreamer工具或数据源中启用了Hive Sync,则该数据集会同步到Hive的几张表中,可以使用HiveQL,Presto或SparkSQL进行读取。点击这里查看更多。

4. Hudi如何处理输入中的重复记录

在数据集上执行upsert操作时,提供的记录包含给定键的多条记录,然后通过重复调用有效负载类的preCombine方法将所有记录合并为一个最终值。默认情况下会选择最大值的记录(由compareTo决定)。

对于insertbulk_insert操作,不执行preCombine。因此,如果你的输入包含重复项,则数据集也将包含重复项。如果您不希望重复的记录,请使用upsert或在数据源deltastreamer中指定删除重复数据的配置项。

5. 可以实现自定义合并逻辑处理输入记录和存储的记录吗

与上面类似,定义有效负载类定义的方法(combineAndGetUpdateValue(),getInsertValue()),这些方法控制如何将存储的记录与输入的更新/插入组合以生成最终值以写回到存储中。

6. 如何删除数据集中的记录

GDPR使删除成为数据管理工具箱中的必备工具。Hudi支持软删除和硬删除。有关如何实际执行它们,请参见此处

7. 如何将数据迁移到Hudi

Hudi对迁移提供了内置支持,可使用hudi-cli提供的HDFSParquetImporter工具将整个数据集一次性写入Hudi。也可以使用Spark数据源API读取和写入数据集。迁移后,可以使用此处讨论的常规方法执行写操作。 这里也详细讨论该问题,包括部分迁移的方法。

8. 如何将Hudi配置传递给Spark作业

这里涵盖了数据源和Hudi写入客户端(deltastreamer和数据源都会内部调用)的配置项。在DeltaStreamer之类的工具上调用--help都会打印所有使用选项。许多控制upsert、调整文件大小的选项是在客户端级别定义的,下面是将它们传递给可用于写数据配置项的方式。

1). 对于Spark DataSource,可以使用DataFrameWriter的options API来传递这些配置项。

inputDF.write().format("org.apache.hudi")
  .options(clientOpts) // any of the Hudi client opts can be passed in as well
  .option(DataSourceWriteOptions.RECORDKEY_FIELD_OPT_KEY(), "_row_key")
  ...

2). 直接使用HoodieWriteClient时,只需使用配置来构造HoodieWriteConfig对象。

3). 使用HoodieDeltaStreamer工具提取时,可以在属性文件中设置配置项,并将该文件作为命令行参数 --props传递。

9. 可以在Apache Hive Metastore中注册Hudi数据集吗

可以, 可以通过独立的Hive Sync工具或使用deltastreamer工具数据源中的选项来执行此操作。

10. Hudi索引的工作原理及其好处是什么

索引是Hudi写入的关键部分,它始终将给定的recordKey映射到Hudi内部的文件组(FileGroup)。这样可以更快地识别受给定写入操作影响的文件组。

Hudi支持以下几种索引配置

  • HoodieBloomIndex(默认):使用bloom过滤器和范围信息,并在parquet/基础文件(不久后的日志文件也支持)的页脚中放置该信息。

  • HoodieGlobalBloomIndex:默认索引仅在单个分区内强制执行键的唯一性,即要求用户知道存储给定记录键的分区。这可以帮助非常大的数据集很好地建立索引。但是,在某些情况下,可能需要在所有分区上执行重复数据删除/强制唯一性操作,这就需要全局索引。如果使用此选项,则将传入记录与整个数据集中的文件进行比较,并确保仅在一个分区中存在recordKey

  • HBaseIndex:Apache HBase是一个键值存储,可以将索引存储在HBase内,如果已经在使用HBase,这将会非常方便。

也可以自定义索引,需要实现HoodieIndex类并在配置中配置索引类名称。

Apache Hudi使用问题汇总(一)第1张

免责声明:文章转载自《Apache Hudi使用问题汇总(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Windows2012 R2搭建域服务器sparkSQL以JDBC为数据源下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

浏览器访问svn

文章转自https://www.cnblogs.com/ayanmw/archive/2011/12/19/2294054.html 你看到的这个文章来自于http://www.cnblogs.com/ayanmw 基本的安装包有: subversion /httpd/ svn的httpd的mod_dav_svn mod_authz_svn 两个模块.(...

JSVC的配置与使用详解

JSVC是apache出的所谓common daemon的一个工具套件,他利用一个daemon程序,从而使tomcat这样的程序能在开机的时候自动启动,而且能使tomcat被 chkconfig这样的工具所管理。在之前的一篇文章中对jsvc有详细的说明和介绍,这里不再赘述了。 JSVC download下来是源码版本,需要自己编译,编译很简单,如下(假设我...

创建索引之代码开发

【创建索引库】 使用indexwriter对象创建索引。 【实现步骤】 (1)创建一个java工程,并导入jar包。 (2)创建一个indexwriter对象。         1)指定索引库的存放位置Directory对象。         2)指定一个分析器,对文档内容进行分析。 (3)创建Document对象 (4)创建filed对象,将field添...

Hive/Impala批量插入数据

问题描述 现有几千条数据,需要插入到对应的Hive/Impala表中。安排给了一个同事做,但是等了好久,反馈还没有插入完成……看到他的做法是:对每条数据进行处理转换为对应的insert语句,但是,实际执行起来,速度很慢,每条数据都要耗时1s左右。比在MySQL中批量插入数据慢多了,因而抱怨Impala不太好用 问题分析 首先,必须明确的是,把每条数据处理成...

Django用Apache和mod_wsgi部署

背景 最近写了一个Django在windows上运行,但是用的vbs命令,导致在后台运行的时候,必须用户登录才可以运行,还有就是登录之后,有其他进程可能被干掉。 Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c D:\xxd\run.bat",vbhide ` bat 内容 C:\Python3...

JMeter简介及使用JMeter来访问网站

参考: http://jmeter.apache.org/ http://blog.chinaunix.net/uid-26884465-id-3416869.html http://www.ltesting.net/ceshi/open/kyxncsgj/jmeter/2013/0517/206265.html 1.简介 Apache JMeter是Ap...