数据湖之iceberg系列(三)iceberg快速入门
1 環境準備
準備大數據集群 .安裝HDFS ,HIVE,SAPRK ,FLINK
下載運行集群環境運行是需要的jar包
下載地址:http://iceberg.apache.org/releases/
2 spark將讀寫iceberg表中數據
準備spark集群, 并配置iceberg環境
在spark的配置目錄中添加hadoop和hive的配置文件 方便spark與hadoop和hive整合
在spark的jars包中添加下載好的iceberg的jar包
2.1 catalog為hadoop
2.1.1 sparksql操作
spark-sql --packages org.apache.iceberg:iceberg-spark3-runtime:0.10.0 \
--conf spark.sql.catalog.hadoop_prod=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.hadoop_prod.type=hadoop \
--conf spark.sql.catalog.hadoop_prod.warehouse=hdfs://linux01:8020/doit/iceberg/warehouse
創建表
-- 使用系統默認的數據源 會將表生成在默認的本地文件夾中
spark-sql> create ?table tb_test1(id int ,name string) using ?iceberg ;
-- 切換啟動SQL腳本是自己設置的數據源hadoop_prod
use hadoop_prod.default ;
-- 創建表
create ?table tb_test1(id int ,name string) using ?iceberg ;
查看表的位置在HDFS上
插入入數據到iceberg表中
insert into tb_test1 values(1,'馬云'),(2,'馬蓉'),(3,'馬保國') ;
select * from tb_test1 ;
1 ? ? ? 馬云
2 ? ? ? 馬蓉
3 ? ? ? 馬保國
2.1.2 sparkshell操作
-- 登錄shell客戶端
spark-shell --packages org.apache.iceberg:iceberg-spark3-runtime:0.10.0 \
--conf spark.sql.catalog.hadoop_prod=org.apache.iceberg.spark.SparkCatalog \
--conf spark.sql.catalog.hadoop_prod.type=hadoop \
--conf spark.sql.catalog.hadoop_prod.warehouse=hdfs://linux01:8020/doit/iceberg/warehouse?
直接讀取上面在sparksql中創建的表中的數據
scala> spark.read.format("iceberg").load("hdfs://linux01:8020//doit/iceberg/warehouse/default/tb_test1").show
+---+------+
| id| ?name|
+---+------+
| ?1| ?馬云|
| ?2| ?馬蓉|
| ?3|馬保國|
+---+------+
使用sparkAPI建表和插入數據在后面的API中在詳細介紹
2.1.3 IDEA spark項目操作
使用IDEA創建maven項目 , 添加依賴?
pom.xml文件
?<properties>
? ? ? ? <maven.compiler.source>1.8</maven.compiler.source>
? ? ? ? <maven.compiler.target>1.8</maven.compiler.target>
? ? ? ? <scala.version>2.12.12</scala.version>
? ? ? ? <spark.version>3.0.0</spark.version>
? ? ? ? <hadoop.version>3.1.1</hadoop.version>
? ? ? ? <encoding>UTF-8</encoding>
? ? </properties>
?
? ? <dependencies>
? ? ? ? <!-- 導入scala的依賴 -->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.scala-lang</groupId>
? ? ? ? ? ? <artifactId>scala-library</artifactId>
? ? ? ? ? ? <version>${scala.version}</version>
? ? ? ? </dependency>
?
? ? ? ? <!-- 導入spark的依賴 -->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.spark</groupId>
? ? ? ? ? ? <artifactId>spark-core_2.12</artifactId>
? ? ? ? ? ? <version>${spark.version}</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.spark</groupId>
? ? ? ? ? ? <artifactId>spark-sql_2.12</artifactId>
? ? ? ? ? ? <version>${spark.version}</version>
? ? ? ? </dependency>
?
? ? ? ? <!--JDBC驅動包-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>mysql</groupId>
? ? ? ? ? ? <artifactId>mysql-connector-java</artifactId>
? ? ? ? ? ? <version>5.1.48</version>
? ? ? ? </dependency>
?
? ? ? ? <!--hive-->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.spark</groupId>
? ? ? ? ? ? <artifactId>spark-hive_2.12</artifactId>
? ? ? ? ? ? <version>${spark.version}</version>
? ? ? ? </dependency>
?
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>com.alibaba</groupId>
? ? ? ? ? ? <artifactId>fastjson</artifactId>
? ? ? ? ? ? <version>1.2.62</version>
? ? ? ? </dependency>
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>c3p0</groupId>
? ? ? ? ? ? <artifactId>c3p0</artifactId>
? ? ? ? ? ? <version>0.9.1.2</version>
? ? ? ? </dependency>
?
?
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.iceberg</groupId>
? ? ? ? ? ? <artifactId>iceberg-core</artifactId>
? ? ? ? ? ? <version>0.10.0</version>
? ? ? ? </dependency>
?
? ? ? ? <!-- https://mvnrepository.com/artifact/org.apache.iceberg/iceberg-spark3-runtime -->
? ? ? ? <dependency>
? ? ? ? ? ? <groupId>org.apache.iceberg</groupId>
? ? ? ? ? ? <artifactId>iceberg-spark3-runtime</artifactId>
? ? ? ? ? ? <version>0.10.0</version>
? ? ? ? </dependency>
<!-- https://mvnrepository.com/artifact/org.apache.avro/avro -->
<dependency>
? ? <groupId>org.apache.avro</groupId>
? ? <artifactId>avro</artifactId>
? ? <version>1.9.0</version>
</dependency>
?
?
? ? </dependencies>
?
? ? <build>
? ? ? ? <plugins>
? ? ? ? ? ? <!-- 指定編譯java的插件 -->
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>org.apache.maven.plugins</groupId>
? ? ? ? ? ? ? ? <artifactId>maven-compiler-plugin</artifactId>
? ? ? ? ? ? ? ? <version>3.5.1</version>
? ? ? ? ? ? </plugin>
? ? ? ? ? ? <!-- 指定編譯scala的插件 -->
? ? ? ? ? ? <plugin>
? ? ? ? ? ? ? ? <groupId>net.alchim31.maven</groupId>
? ? ? ? ? ? ? ? <artifactId>scala-maven-plugin</artifactId>
? ? ? ? ? ? ? ? <version>3.2.2</version>
? ? ? ? ? ? ? ? <executions>
? ? ? ? ? ? ? ? ? ? <execution>
? ? ? ? ? ? ? ? ? ? ? ? <goals>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <goal>compile</goal>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <goal>testCompile</goal>
? ? ? ? ? ? ? ? ? ? ? ? </goals>
? ? ? ? ? ? ? ? ? ? ? ? <configuration>
? ? ? ? ? ? ? ? ? ? ? ? ? ? <args>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <arg>-dependencyfile</arg>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <arg>${project.build.directory}/.scala_dependencies</arg>
? ? ? ? ? ? ? ? ? ? ? ? ? ? </args>
? ? ? ? ? ? ? ? ? ? ? ? </configuration>
? ? ? ? ? ? ? ? ? ? </execution>
? ? ? ? ? ? ? ? </executions>
? ? ? ? ? ? </plugin>
?
? ? ? ? </plugins>
? ? </build>
? val spark: SparkSession = SparkSession
? ? ? .builder()
? ? ? .config("spark.sql.catalog.hadoop_prod.type", "hadoop") // 設置數據源類別為hadoop
? ? ? .config("spark.sql.catalog.hadoop_prod", classOf[SparkCatalog].getName)
? ? ? .config("spark.sql.catalog.hadoop_prod.warehouse", "hdfs://linux01:8020//doit/iceberg/warehouse/") // 設置數據源位置
? ? ? .appName(this.getClass.getSimpleName)
? ? ? .master("local[*]")
? ? ? .getOrCreate()
? ? // 獲取表結構信息
? ? val df = spark.table("hadoop_prod.default.tb_test1")
? ? df.printSchema()
? ? // 讀取指定表下的數據
? ? //spark.read.format("iceberg").load("/doit/iceberg/warehouse/default/tb_test1").show()
? ? ?//3372567346381641315
? ? /**
? ? ?* select snapshot_id from hadoop_prod.default.tb_test1.snapshots ;
? ? ?* select * from hadoop_prod.default.tb_test1.snapshots ;
? ? ?*/
? ? // 讀取指定快照下的數據
? ? spark.read.option("snapshot-id", 3372567346381641315l).format("iceberg").load("/doit/iceberg/warehouse/default/tb_test1").show
?
2.2 catalog為hive
spark可以使用sparkshell , sparksql 和idea中創建iceberg表 ,在hive中使用iceberg支持以后可以再hive中對數據進行分析處理 ?, 但是不能對數據進行修改和創建表等操作 , 也就是說暫且還不支持寫操作 !
2.2.1 sparksql操作
spark-sql --packages org.apache.iceberg:iceberg-spark3-runtime:0.10.0 ? ? --conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog ? ? --conf spark.sql.catalog.spark_catalog.type=hive
?-- 在hive中創建iceberg的數據庫
create database spark_catalog.hang ;
-- 切換數據源數據庫?
use spark_catalog.hang ;
-- 創建iceberg表
create table tb_hang(id int , name string) using iceberg ;
在hive的工作目錄中查看 ?出現如下目錄 :
向表中插入數據 ?-----> 在hive客戶端查詢數據
-- 開啟hive對iceberg的支持
SET iceberg.mr.catalog=hive;
set iceberg.engine.hive.enabled=true ;
-- 在hive端查看當前的數據庫?
show database ;
+----------------+
| database_name ?|
+----------------+
| db_doit19 ? ? ?|
| db_icer ? ? ? ?|
| default ? ? ? ?|
| hang ? ? ? ? ? |
+----------------+
切換 數據庫 ?
use ?hang ;
select * from tb_hang ?;
+-------------+---------------+
| tb_hang.id ?| tb_hang.name ?|
+-------------+---------------+
| 2 ? ? ? ? ? | hangge ? ? ? ?|
| 1 ? ? ? ? ? | hang ? ? ? ? ?|
+-------------+---------------+
————————————————
版權聲明:本文為CSDN博主「白眼黑刺猬」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_37933018/article/details/110452480
總結
以上是生活随笔為你收集整理的数据湖之iceberg系列(三)iceberg快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: google四件套之Dagger2
- 下一篇: 数据湖之iceberg系列(一)iceb