使用Saprk SQL 操作Hive的數據
前提准備:
1、啟動Hdfs,hive的數據存儲在hdfs中;
2、啟動hive -service metastore,元數據存儲在遠端,可以遠程訪問;
3、在spark的conf目錄下增加hive-site.xml配置文件,文件內容:
<configuration> <property> <name>hive.metastore.uris</name> <value>thrift://node1:9083</value> </property> </configuration>
編寫Scala測試程序:
object Hive { def main(args: Array[String]) { val conf = new SparkConf() .setAppName("HiveDataSource") .setMaster("spark://node1:7077") val sc = new SparkContext(conf); val hiveContext = new HiveContext(sc); hiveContext.sql("SHOW tables").show() sc.stop() } }
將程序打包到spark主機,通過spark-submit命令執行:
./bin/spark-submit --class com.spark.test.Hive --master spark://node1:7077 ./jar/Test.jar
關於spark-submit命令的說明,參考官網:
http://spark.apache.org/docs/1.6.0/submitting-applications.html
注意點:
1、--deploy-mode cluster 在集群模式中要注意將jar文件放到hdfs中或都存在的文件位置中。
集群模式是將程序發布到works節點運行driver程序。本地模式只運行在程序提交的節點上client,結果也只輸出在終端。
--------------------------------------------------------------------------------------------------------------
重新配置CDH版本的應用,spark調用hive, 出現了找不到jar包,及配置文件的情況。
錯誤信息:
WARN [Driver] metastore.HiveMetaStore: Retrying creating default database after error: Class org.datanucleus.api.jdo.JDOPersistenceManagerFactory was not found.
javax.jdo.JDOFatalUserException: Class org.datanucleus.api.jdo.JDOPersistenceManagerFactory was not found.
ERROR [Driver] yarn.ApplicationMaster: User class threw exception: java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
這里通過增加調用參數來實現:
/home/hadoop/app/spark-1.6.0-cdh5.10.0/bin/spark-submit \
--class HiveSql \
--master yarn-cluster \
--executor-memory 512m \
--num-executors 2 \
--files /home/hadoop/app/spark-1.6.0-cdh5.10.0/conf/hive-site.xml \
--jars /home/hadoop/lib/datanucleus-rdbms-3.2.9.jar,/home/hadoop/lib/datanucleus-core-3.2.10.jar,/home/hadoop/lib/datanucleus-api-jdo-3.2.6.jar \
spark-vmware-sql.jar
引入下面三個jar包,在spark和hive的lib目錄下可以找到。
datanucleus-core-3.2.10.jar
datanucleus-api-jdo-3.2.6.jar
datanucleus-api-jdo-3.2.6.jar