Apache Hudi集成Apache Zeppelin實戰


1. 簡介

Apache Zeppelin 是一個提供交互數據分析且基於Web的筆記本。方便你做出可數據驅動的、可交互且可協作的精美文檔,並且支持多種語言,包括 Scala(使用 Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等等。當前Hive與SparkSQL已經支持查詢Hudi的讀優化視圖和實時視圖。所以理論上Zeppelin的notebook也應當擁有這樣的查詢能力。

2.實現效果

2.1 Hive

2.1.1 讀優化視圖

2.1.2 實時視圖

2.2 Spark SQL

2.2.1 讀優化視圖

2.2.2 實時視圖

3.常見問題整理

3.1 Hudi包適配

cp hudi-hadoop-mr-bundle-0.5.2-SNAPSHOT.jar    zeppelin/lib
cp hudi-hive-bundle-0.5.2-SNAPSHOT.jar         zeppelin/lib
cp hudi-spark-bundle_2.11-0.5.2-SNAPSHOT.jar   zeppelin/lib

Zeppelin啟動時會默認加載lib下的包,對於Hudi這類外部依賴,適合直接放在zeppelin/lib下以避免 Hive或Spark SQL在集群上找不到對應Hudi依賴。

3. 2 parquet jar包適配

Hudi包的parquet版本為1.10,當前CDH集群parquet版本為1.9,所以在執行Hudi表查詢時,會報很多jar包沖突的錯。

解決方法:在zepeelin所在節點的spark/jars目錄下將parquet包升級成1.10。

副作用:zeppelin 以外的saprk job 分配到 parquet 1.10的集群節點的任務可能會失敗。

建議:zeppelin 以外的客戶端也會有jar包沖突的問題。所以建議將集群的spark jar 、parquet jar以及相關依賴的jar做全面升級,更好地適配Hudi的能力。

3.3 Spark Interpreter適配

相同sql在Zeppelin上使用Spark SQL查詢會出現比hive查詢記錄條數多的現象。

問題原因:當向Hive metastore中讀寫Parquet表時,Spark SQL默認將使用Spark SQL自帶的Parquet SerDe(SerDe:Serialize/Deserilize的簡稱,目的是用於序列化和反序列化),而不是用Hive的SerDe,因為Spark SQL自帶的SerDe擁有更好的性能。

這樣導致了Spark SQL只會查詢Hudi的流水記錄,而不是最終的合並結果。

解決方法:set spark.sql.hive.convertMetastoreParquet=false

方法一:直接在頁面編輯屬性

方法二:編輯 zeppelin/conf/interpreter.json添加

interpreter

"spark.sql.hive.convertMetastoreParquet": {
          "name": "spark.sql.hive.convertMetastoreParquet",
          "value": false,
          "type": "checkbox"
        },

4. Hudi增量視圖

對於Hudi增量視圖,目前只支持通過寫Spark 代碼的形式拉取。考慮到Zeppelin在notebook上有直接執行代碼和shell 命令的能力,后面考慮封裝這些notebook,以支持sql的方式查詢Hudi增量視圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM