开发准备
确认您已经开通了腾讯云,并且创建了一个 EMR 集群,详情参考创建集群。
在创建 EMR 集群时在软件配置界面选择 Hive、Spark、Hudi 组件。
通过 spark 读写 Hudi
登录 master 节点并切换 hadoop 用户,使用 SparkSQL 的 HoodieSparkSessionExtension 扩展进行数据读写:
spark-sql --master yarn \\--num-executors 2 \\--executor-memory 1g \\--executor-cores 2 \\--jars /usr/local/service/hudi/hudi-bundle/hudi-spark3.3-bundle_2.12-0.13.0.jar \\--conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \\--conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension' \\--conf 'spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog'
说明:
其中 --master 表示您的 master URL,--num-executors 表示 executor 数量,--executor-memory 表示 executor 的储存容量,以上参数也可以根据您的实际情况作出修改。 --jars 使用的依赖包版本在不同 EMR 版本中可能存在差异,请在 /usr/local/service/hudi/hudi-bundle 目录下查看并使用正确的依赖包。
建表:
-- 创建COW非分区表spark-sql> create table hudi_cow_nonpcf_tbl (uuid int,name string,price double) using huditblproperties (primaryKey = 'uuid');-- 创建COW分区表spark-sql> create table hudi_cow_pt_tbl (id bigint,name string,ts bigint,dt string,hh string) using huditblproperties (type = 'cow',primaryKey = 'id',preCombineField = 'ts')partitioned by (dt, hh);-- 创建MOR分区表spark-sql> create table hudi_mor_tbl (id int,name string,price double,ts bigint,dt string) using huditblproperties (type = 'mor',primaryKey = 'id',preCombineField = 'ts')partitioned by (dt);
写入数据:
-- insert into non-partitioned tablespark-sql> insert into hudi_cow_nonpcf_tbl select 1, 'a1', 20;-- insert dynamic partitionspark-sql> insert into hudi_cow_pt_tbl partition (dt, hh) select 1 as id, 'a1' as name, 1000 as ts, '2021-12-09' as dt, '10' as hh;-- insert static partitionspark-sql> insert into hudi_cow_pt_tbl partition(dt = '2021-12-09', hh='11') select 2, 'a2', 1000;spark-sql> insert into hudi_mor_tbl partition(dt = '2021-12-09') select 1, 'a1', 20, 1000;
使用 Hive 查询 Hudi 表
登录 Master 节点并切换 hadoop 用户,执行以下命令连接 hive:
hive
添加 hudi 依赖包:
hive> add jar /usr/local/service/hudi/hudi-bundle/hudi-hadoop-mr-bundle-0.13.0.jar;
查看表:
hive> show tables;OKhudi_cow_nonpcf_tblhudi_cow_pt_tblhudi_mor_tblhudi_mor_tbl_rohudi_mor_tbl_rtTime taken: 0.023 seconds, Fetched: 5 row(s)
查询数据:
hive> select * from hudi_cow_nonpcf_tbl;OK20230905170525412 20230905170525412_0_0 1 8d32a1cc-11f9-437f-9a7b-8ba9532223d3-0_0-17-15_20230905170525412.parquet 1 a1 20.0Time taken: 1.447 seconds, Fetched: 1 row(s)hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;hive> select * from hudi_mor_tbl_ro;OK20230808174602565 20230808174602565_0_1 id:1 dt=2021-12-09 af40667d-1dca-4163-89ca-2c48250985b2-0_0-34-1617_20230808174602565.parquet 1 a1 20.0 1000 2021-12-09Time taken: 0.159 seconds, Fetched: 1 row(s)hive> set hive.vectorized.execution.enabled=false;hive> select name, count(*) from hudi_mor_tbl_rt group by name;a1 1Time taken: 17.618 seconds, Fetched: 1 row(s)