LAS 支持通过 Spark、Flink 、 Presto 等引擎对 Hudi 表进行读写操作。
Hudi 整体支持情况如下:
查询操作 | 写入操作 | |||
---|---|---|---|---|
COW | MOR | COW | MOR | |
Spark | 支持 | 支持 | 支持 | 支持 |
Flink | 支持 | 支持 | 支持 | 支持 |
Presto | 支持 | 支持 | 不支持 | 不支持 |
使用 beeline 连接 kyuubi server 用于测试。
/usr/lib/emr/current/kyuubi/bin/beeline -n hive -p KtVMyIFnqavBc1HS -u "jdbc:hive2://las-master-1:10009"
接着您即可使用标准的 SparkSQL 操作 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 表并使用 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;
接着您就可以使用 Hudi 的特性对其中的数据进行增删改查操作。
Presto 已与 Hudi 集成,所以您无需进行额外的配置,即可查询 Hudi 表数据。目前 Presto 支持 Hudi 表查询,不支持 Hudi 表写入。因此 Presto 需要在 Spark 端提前导入数据用于查询测试。
presto-cli --user hive --password 0TatnpSsVvaSPeQU
可以直接使用上文 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;