一、在Spark的安裝包下的conf下創(chuàng)建一個(gè)文件 hive-site.xml克懊,不需要更新到其他的節(jié)點(diǎn)夏漱,只需要在客戶端有一份hive-site.xml就可以
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
二、開啟Hive的metaStore服務(wù)
hive --service metastore & #后臺(tái)啟動(dòng)
三歇僧、啟動(dòng)spark-shell時(shí)指定mysql連接驅(qū)動(dòng)位置
/usr/local/spark/bin/spark-shell \
--master spark://node1:7077 \
--executor-memory 512m \
--total-executor-cores 1 \
--driver-class-path /usr/local/hive/lib/mysql-connector-java-5.1.32-bin.jar
四、
import org.apache.spark.sql.hive.HiveContext
val hc = new HiveContext(sc)
hc.sql("show databases").show
五、整合可能遇到的問題
1诈悍、問題一:
Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
解決方法:
需要格式化mysql元數(shù)據(jù)庫:
schematool -dbType mysql -initSchema
2祸轮、問題二:
java.sql.SQLException: Column name pattern can not be NULL or empty
解決方法:
將 $HIVE_HOME/lib 下 的 mysql-connector-java-6.0.3.jar 替換成 mysql-connector-java-5.1.39.jar。
原因分析:mysql-connector-java 6.x 版本 和 5.1.x 版本不兼容 , nullNamePatternMatchesAll 連接屬性的默認(rèn)值在 mysql-connector-java 5.1 和 6.0 之間發(fā)生了改變. 在 5.1 版本中默認(rèn)值是 true, 而 6.0 版本中默認(rèn)值是 false侥钳。
3适袜、問題三:
2019-07-06T10:01:53,737 ERROR [370c0a81-c922-4c61-8315-264c39b372c3 main] metastore.RetryingHMSHandler: MetaException(message:Hive Schema version 3.1.0 does not match metastore's schema version 1.2.0 Metastore is not upgraded or corrupt)
at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:9063)
at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:9027)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
這是因?yàn)樵趧?chuàng)建SQLContext實(shí)例的時(shí)候,要求spark編譯的Hive版本和HiveMetaStore里面記錄的Hive版本一致
3.1舷夺、解決方法一
我們可以通過$HIVE_CONF/confi/hive-site.xml 配置hive.metastore.schema.verification參數(shù)來取消這種驗(yàn)證苦酱,這個(gè)參數(shù)的默認(rèn)值是true,我們可以取消驗(yàn)證给猾,設(shè)置為false
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
3.2疫萤、解決方法2
直接修改存儲(chǔ)hive元數(shù)據(jù)的VERSION表
SELECT * FROM VERSION;
UPDATE VERSION SET SCHEMA_VERSION='3.1.0' WHERE VER_ID = 1;
image.png