spark3編譯hive12
⑴ Sparksql同步Hbase數據到Hive表
spark 2.3.0
hive 3.0.0
hbase 2.0.0
常規操作 hbase數據同步到hive是螞搭通過再hive端建立hbase的映射表。
但是由於集群組件問題,建立的棗物笑映射表不能進行
insert into A select * from hbase映射表
操作。報錯!
org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the location for replica 0
at org.apache.hadoop.hbase.client..getRegionLocations(.java:332)
spark讀取hbase數據形成RDD,構建schma信息,形成DF
通過sparkSQL 將df數據寫入到指定的hive表格中。
hadoop本地環境版本一定要與依賴包版本保持一直,不然報如下錯誤
java.lang.IllegalArgumentException: Unrecognized Hadoop major version number: 3.1.1
hbase 1.X與2.X有很大差距,所以再看案例參考是一定要結合自己的hbase版本。
筆者程序編譯中遇到
Cannot Resolve symbol TableInputFormat HBase找不到TableInputFormat
因為:新版本2.1.X版本的HBASE又把maprece.TableInputFormat單獨抽取出來了
需要導入依賴
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-maprece</artifactId>
<version>${hbase.version}</version>
</dependency>
一定要把hbase相關凳含的包都cp 到spark的jars文件下面。然後重啟spark服務。
不然你會遇到此類錯誤
Class org.apache.hadoop.hive.hbase.HBaseSerDe not found
或者
java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration
這些都是缺少jar包的表現。
⑵ sparkSQL用jdbc連接hive和用元數據連接hive的區別,各自優缺點
spark on hive : 是spark 通過spark-sql 使用hive 語句操作hive ,底層運行的還是 spark rdd.
*(1)就是通過sparksql,載入hive的配置文件,獲取到hive的元數據信息
* (2)spark sql獲取到hive的元數據信息之後就可以拿到hive的所有表的數據
* (3)接下來就可以通過spark sql來操作hive表中的數據
hive on spark: 是hive 等的執行引擎變成spark , 不再是maprece. 相對於上一項,這個要實現責麻煩很多, 必須重新編譯你的spark. 和導入jar包,
⑶ 源碼級解讀如何解決Spark-sql讀取hive分區表執行效率低問題
問題描述
在開發過程中使用spark去讀取hive分區表的過程中(或者使用hive on spark、nodepad開發工具),部分開發人員未注意添加分區屬性過濾導致在執行過程中載入了全量數據,引起任務執行效率低、磁碟IO大量損耗等問題。
解決辦法
1、自定義規則CheckPartitionTable類,實現Rule,通過以下方式創建SparkSession。
2、自定義規則CheckPartitionTable類,實現Rule,將規則類追加至Optimizer.batches: Seq[Batch]中,如下。
規則內容實現
1、CheckPartitionTable規則執行類,需要通過引入sparkSession從而獲取到引入conf;需要繼承Rule[LogicalPlan];
2、通過splitPredicates方法,分離分區謂詞,得到分區謂詞表達式。在sql解析過程中將謂詞解析為TreeNode,此處採用遞歸的方式獲取分區謂詞。
3、判斷是否是分區表,且是否添加分區欄位。
4、實現Rule的apply方法
大數據和雲計算的關系
大數據JUC面試題
大數據之Kafka集群部署
大數據logstsh架構
大數據技術kafka的零拷貝