You need to enable JavaScript to run this app.
导航
高阶使用
最近更新时间:2025.04.01 20:13:42首次发布时间:2025.03.29 22:17:49
我的收藏
有用
有用
无用
无用

LAS 支持通过 Spark、Flink 、 Presto 等引擎对 Hudi 表进行读写操作。
Hudi 整体支持情况如下:

查询操作

写入操作

COW

MOR

COW

MOR

Spark

支持

支持

支持

支持

Flink

支持

支持

支持

支持

Presto

支持

支持

不支持

不支持

Hudi-Spark 使用

使用 beeline 连接 kyuubi server 用于测试。

/usr/lib/emr/current/kyuubi/bin/beeline -n hive -p KtVMyIFnqavBc1HS   -u "jdbc:hive2://las-master-1:10009"

接着您即可使用标准的 SparkSQL 操作 Hudi 表。

导入外表到 Hudi 中

对于已有的外表,我们也可通过 SparkSQL 将外表数据导入到 hudi 表中,下方是一个很小的 lineitem 表,将其保存为文本文件,上传。
文本样例内容如下表所示。

1|155190|7706|1|17|21168.23|0.04|0.02|N|O|1996-03-13|1996-02-12|1996-03-22|DELIVER IN PERSON|TRUCK|egular courts above the|
1|67310|7311|2|36|45983.16|0.09|0.06|N|O|1996-04-12|1996-02-28|1996-04-20|TAKE BACK RETURN|MAIL|ly final dependencies: slyly bold |
1|63700|3701|3|8|13309.60|0.10|0.02|N|O|1996-01-29|1996-03-05|1996-01-31|TAKE BACK RETURN|REG AIR|riously. regular, express dep|
1|2132|4633|4|28|28955.64|0.09|0.06|N|O|1996-04-21|1996-03-30|1996-05-16|NONE|AIR|lites. fluffily even de|
1|24027|1534|5|24|22824.48|0.10|0.04|N|O|1996-03-30|1996-03-14|1996-04-01|NONE|FOB| pending foxes. slyly re|
1|15635|638|6|32|49620.16|0.07|0.02|N|O|1996-01-30|1996-02-07|1996-02-03|DELIVER IN PERSON|MAIL|arefully slyly ex|
2|106170|1191|1|38|44694.46|0.00|0.05|N|O|1997-01-28|1997-01-14|1997-02-02|TAKE BACK RETURN|RAIL|ven requests. deposits breach a|
3|4297|1798|1|45|54058.05|0.06|0.00|R|F|1994-02-02|1994-01-04|1994-02-23|NONE|AIR|ongside of the furiously brave acco|
3|19036|6540|2|49|46796.47|0.10|0.00|R|F|1993-11-09|1993-12-20|1993-11-24|TAKE BACK RETURN|RAIL| unusual accounts. eve|
3|128449|3474|3|27|39890.88|0.06|0.07|A|F|1994-01-16|1993-11-22|1994-01-23|DELIVER IN PERSON|SHIP|nal foxes wake. |

上传数据集

通过 scp/或者其它方式上传数据集到集群。

scp lineitem_small.tbl root@master_ip

登陆集群进行上传。

ssh master_ip
export HADOOP_USER_NAME=hive
 hadoop fs -mkdir /user/hive/lineitem
 hadoop fs -put lineitem_small.tbl /user/hive/lineitem/

建立外表

使用 Beeline 等方式连接 SparkThriftServer,后 DDL 建表用于加载源文件。

create external table lineitem (
  l_orderkey int,
  l_partkey int,
  l_suppkey int,
  l_linenumber int,
  l_quantity double,
  l_extendedprice double,
  l_discount double,
  l_tax double,
  l_returnflag string,
  l_linestatus string,
  l_shipdate string,
  l_commitdate string,
  l_receiptdate string,
  l_shipinstruct string,
  l_shipmode string,
  l_comment string) 
row format delimited 
fields terminated by '|' 
stored as textfile 
location '/user/hive/lineitem';

导入 Hudi 表

创建 Hudi 表并使用 SparkSQL 导入外部数据到 hudi_lineitem 表中

create table hudi_lineitem using hudi tblproperties (type = 'cow', primaryKey = 'l_orderkey') select * from lineitem;

查询 Hudi 表,确认数据导入Hudi成功。

SELECT
    l_returnflag,
    l_linestatus,sum(l_quantity) as sum_qty,sum(l_extendedprice) as sum_base_price,sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,avg(l_quantity) as avg_qty,avg(l_extendedprice) as avg_price,avg(l_discount) as avg_disc,count(*) as count_order
FROM
    hudi_lineitem
WHERE
    l_shipdate <= date '1998-12-01' - interval '90' dayGROUP BY
    l_returnflag,
    l_linestatus
ORDER BY
    l_returnflag,
    l_linestatus;

Image
接着您就可以使用 Hudi 的特性对其中的数据进行增删改查操作。

Hudi-Presto 使用

集成配置

Presto 已与 Hudi 集成,所以您无需进行额外的配置,即可查询 Hudi 表数据。目前 Presto 支持 Hudi 表查询,不支持 Hudi 表写入。因此 Presto 需要在 Spark 端提前导入数据用于查询测试。

连接方式

presto-cli --user hive --password 0TatnpSsVvaSPeQU

使用 PrestoSQL 查询 Hudi

可以直接使用上文 SparkSQL 导入的样例表进行查询。

use default;
show tables;
SELECT
    l_returnflag,
    l_linestatus,sum(l_quantity) as sum_qty,sum(l_extendedprice) as sum_base_price,sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,avg(l_quantity) as avg_qty,avg(l_extendedprice) as avg_price,avg(l_discount) as avg_disc,count(*) as count_order
FROM
    hudi_lineitem
WHERE
    l_shipdate <= date '1998-12-01' - interval '90' dayGROUP BY
    l_returnflag,
    l_linestatus
ORDER BY
    l_returnflag,
    l_linestatus;