日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据湖之iceberg系列(三)iceberg快速入门

發布時間:2024/1/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据湖之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快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。