iceberg-hive 测试案例
蓝瘦香菇,iceberg 太难操作了。真心不如Delta Lake操作的顺利
一、配置及须知
1、配置jar包:
iceberg0.11.0版本,官网下载jar包,放到hive的lib目录下。
2、参数:
SET engine.hive.enabled=true;
SET iceberg.engine.hive.enabled=true;
SET iceberg.mr.catalog=hive;
//使hive能访问spark下catalog为hive方式创建的ice表
//如果是spark-hadoop方式创建则不需要此参数,否则找不到表。
二、测试案例
1、建表
DROP table test.spark_hive;
CREATE EXTERNAL TABLE test.spark_hive(
`id` int,
`name` string)
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
LOCATION 'hdfs://HDFS81339/tmp/iceberg/test/spark_hive'
TBLPROPERTIES (
'iceberg.mr.catalog'='hadoop',
'iceberg.mr.catalog.hadoop.warehouse.location'='hdfs://HDFS81339/tmp/iceberg/test/spark_hive'
);
划重点:如果不加这个,会导致hive无法读取spark表:
TBLPROPERTIES (
'iceberg.mr.catalog'='hadoop',
'iceberg.mr.catalog.hadoop.warehouse.location'='hdfs://HDFS81339/tmp/iceberg/test/spark_hive'
);
下图建表语句虽然成功,并且location了spark创建的iceberg表目录,但是无法读取spark所建的iceberg表数据。
2、插入数据
hive> insert into table iceberg_table values(5,'e');
3、删除及更新(不可用)
hive> delete from iceberg_table where id=5;
尝试使用不支持这些操作的事务管理器进行更新或删除操作
F&Q
1、hive是否可以访问Spark的ice表?
可以,但是必须注意以下
1、Spark 必须以hadoop 写入的方式才可以互通。
2、禁止使用SET iceberg.mr.catalog=hive; 参数,否则读取不到建表。
3、如果要删除表,需要先删除hive表再删除spark表,否则hive表删除报异常。
说真的,搞hive兼容spark真心吐了,需要注意的地方太多了。其实相比Spark来说hive还好,之后的Spark测试真心给我搞吐了。
总结
未完待续。