数据湖技术之iceberg(七)Spark管理iceberg表

南墨2年前技术文章1138

1.SparkSQL设置catalog配置

以下操作主要是SparkSQL操作Iceberg,同样Spark中支持两种Catalog的设置:hive和hadoop,Hive Catalog就是iceberg表存储使用Hive默认的数据路径,Hadoop Catalog需要指定Iceberg格式表存储路径。

在SparkSQL代码中通过以下方式来指定使用的Catalog:

val spark: SparkSession = SparkSession.builder().master("local").appName("SparkOperateIceberg")

  //指定hive catalog, catalog名称为hive_prod

  .config("spark.sql.catalog.hive_prod", "org.apache.iceberg.spark.SparkCatalog")

  .config("spark.sql.catalog.hive_prod.type", "hive")

  .config("spark.sql.catalog.hive_prod.uri", "thrift://node1:9083")

  .config("iceberg.engine.hive.enabled", "true")

 

  //指定hadoop catalog,catalog名称为hadoop_prod

  .config("spark.sql.catalog.hadoop_prod", "org.apache.iceberg.spark.SparkCatalog")

  .config("spark.sql.catalog.hadoop_prod.type", "hadoop")

  .config("spark.sql.catalog.hadoop_prod.warehouse", "hdfs://mycluster/sparkoperateiceberg")

  .getOrCreate()

2.使用Hive Catalog管理Iceberg表

使用Hive Catalog管理Iceberg表默认数据存储在Hive对应的Warehouse目录下,在Hive中会自动创建对应的Iceberg表,SparkSQL 相当于是Hive客户端,需要额外设置“iceberg.engine.hive.enabled”属性为true,否则在Hive对应的Iceberg格式表中查询不到数据。

1、创建表

//创建表 ,hive_pord:指定catalog名称。default:指定Hive中存在的库。test:创建的iceberg表名。

spark.sql(

      """

        | create table if not exists hive_prod.default.test(id int,name string,age int) using iceberg

      """.stripMargin)

注意:

1)创建表时,表名称为:${catalog名称}.${Hive中库名}.${创建的Iceberg格式表名}

2)表创建之后,可以在Hive中查询到对应的test表,创建的是Hive外表,在对应的Hive warehouse 目录下可以看到对应的数据目录。

1.png

2、插入数据

//插入数据

spark.sql(

  """

    |insert into hive_prod.default.test values (1,"zs",18),(2,"ls",19),(3,"ww",20)

  """.stripMargin)

3、查询数据

//查询数据

spark.sql(

  """

    |select * from hive_prod.default.test

  """.stripMargin).show()

结果如下:

2.png

在Hive对应的test表中也能查询到数据:

3.png

4、删除表

//删除表,删除表对应的数据不会被删除

spark.sql(

  """

    |drop table hive_prod.default.test

  """.stripMargin)

注意:删除表后,数据会被删除,但是表目录还是存在,如果彻底删除数据,需要把对应的表目录删除。

3.用Hadoop Catalog管理Iceberg表

使用Hadoop Catalog管理表,需要指定对应Iceberg存储数据的目录。

1、创建表

//创建表 ,hadoop_prod:指定Hadoop catalog名称。default:指定库名称。test:创建的iceberg表名。

spark.sql(

  """

    | create table if not exists hadoop_prod.default.test(id int,name string,age int) using iceberg

  """.stripMargin)

注意:

1)创建表名称为:${Hadoop Catalog名称}.${随意定义的库名}.${Iceberg格式表名}

2)创建表后,会在hadoop_prod名称对应的目录下创建该表

4.png

2、插入数据

//插入数据

spark.sql(

  """

    |insert into hadoop_prod.default.test values (1,"zs",18),(2,"ls",19),(3,"ww",20)

  """.stripMargin)

3、查询数据

spark.sql(

  """

    |select * from hadoop_prod.default.test

  """.stripMargin).show()

5.png

4、创建对应的Hive表映射数据

在Hive表中执行如下建表语句:

CREATE TABLE hdfs_iceberg  (

  id int,

  name string,

  age int

)

STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'

LOCATION 'hdfs://mycluster/sparkoperateiceberg/default/test'

TBLPROPERTIES ('iceberg.catalog'='location_based_table');

在Hive中查询“hdfs_iceberg”表数据如下:

6.png

5、删除表

spark.sql(

  """

    |drop table hadoop_prod.default.test

  """.stripMargin)

注意:删除iceberg表后,数据被删除,对应的库目录存在。


相关文章

Kafka数据恢复

一、增量恢复增量恢复需要使用 MirrorMaker 来实现,下面是 MirrorMaker 的用法示例:# 创建MirrorMaker 配置文件cat > /tmp/mirror-maker....

CDP实操--配置Hive/Impala的Ranger策略验证(二)

CDP实操--配置Hive/Impala的Ranger策略验证(二)

1.1Hive/impala的Ranger策略验证确保hive-on-tez的配置页面里已经勾选了“Ranger Service”在terminal中,kerberos登录到hive,用如下命令登录b...

Linux命令traceroute—追踪网络路由利器

说明:通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能...

DBMS_SYSTEM跟踪10046

SET_SQL_TRACE_IN_SESSION只能设置level 1的10046事件--启用level 1 Trace EXEC SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_...

PG初识

PG数据库是一种典型的C/S模型应用,不同的客户端通过TCP/IP进行连接、每个连接启动一个fork进程(多进程数据库)。一、pg逻辑架构1.1 pg与MySQL异同对比逻辑架构postgresMyS...

MySQL 异常:max key length is 767 bytes

MySQL 异常:max key length is 767 bytes

前言最近迁移几张表,又遇到 767 异常,迁移前只检查了 sql_mode 忽略对比了这个参数,导致几张表创建失败,其实解决方法也很简单,开启 innodb_large_prefix 参数重新导入即可...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。