這篇文章主要介紹如何使用java代碼提交Spark的hive sql任務(wù),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)專注于大新企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,購物商城網(wǎng)站建設(shè)。大新網(wǎng)站建設(shè)公司,為大新等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
我的環(huán)境:hadoop 2.7.1、spark 1.6.0、hive 2.0、java 1.7
目標(biāo):通過java -jar xxx.jar的方式來運(yùn)行提交spark應(yīng)用,執(zhí)行查詢hive sql。
問題一:首先要提一下,按照java -jar執(zhí)行,會報(bào)java.lang.OutOfMemoryError: PermGen space錯誤,所以需要使用以下參數(shù)啟動
java -Xms1024m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m -jar spark.jar
問題二:如果不增加datanucleus的三個(gè)jar包,會報(bào)如下的錯誤http://zengzhaozheng.blog.51cto.com/8219051/1597902?utm_source=tuicool&utm_medium=referral
javax.jdo.JDOFatalUserException: Class org.datanucleus.api.jdo.JDOPersistenceManagerFactory was not found. at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1175) at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808) at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:701) at org.apache.hadoop.hive.metastore.ObjectStore.getPMF(ObjectStore.java:365) at org.apache.hadoop.hive.metastore.ObjectStore.getPersistenceManager(ObjectStore.java:394) 。。。 NestedThrowablesStackTrace: java.lang.ClassNotFoundException: org.datanucleus.api.jdo.JDOPersistenceManagerFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:274) at javax.jdo.JDOHelper$18.run(JDOHelper.java:2018) at javax.jdo.JDOHelper$18.run(JDOHelper.java:2016) at java.security.AccessController.doPrivileged(Native Method) at javax.jdo.JDOHelper.forName(JDOHelper.java:2015) at javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOHelper.java:1162) at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:808) at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:701) at org.apache.hadoop.hive.metastore.ObjectStore.getPMF(ObjectStore.java:365) at org.apache.hadoop.hive.metastore.ObjectStore.getPersistenceManager(ObjectStore.java:394) at org.apache.hadoop.hive.metastore.ObjectStore.initialize(ObjectStore.java:291) at org.apache.hadoop.hive.metastore.ObjectStore.setConf(ObjectStore.java:258) at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:73) at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133) at org.apache.hadoop.hive.metastore.RawStoreProxy.<init>(RawStoreProxy.java:57) at org.apache.hadoop.hive.metastore.RawStoreProxy.getProxy(RawStoreProxy.java:66) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.newRawStore(HiveMetaStore.java:593) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:571) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:620) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:461) 。。。
問題三:java代碼中SparkConf設(shè)置的master,即你選擇的spark模式。我這里使用yarn-client模式,如果寫yarn-cluster是會報(bào)錯的。http://stackoverflow.com/questions/31327275/pyspark-on-yarn-cluster-mode, 其網(wǎng)頁內(nèi)容的總結(jié)部分:
1.如果你想把spark代碼直接嵌入你的web app中,你需要使用yarn-client 2.如果你想讓你的spark代碼足夠松散耦合到y(tǒng)arn-cluster模式可以實(shí)際使用,你可以另起一個(gè)python的子線程來調(diào)用spark-submit來執(zhí)行yarn-cluster模式。
問題四: 需要增加三個(gè)配置文件:core-site.xml、hdfs-site.xml、hive-site.xml。不然啟動java -jar命令會直接報(bào)錯。
所以,正確的java調(diào)用spark執(zhí)行hive sql的代碼如下:
創(chuàng)建java工程,引入spark-assembly-1.6.0-hadoop2.6.0.jar包。這個(gè)包在spark的安裝目錄的lib目錄下有,178M,真的很大。
java調(diào)用代碼如下,我的代碼以后會打包為spark.jar,存放目錄為/data/houxm/spark/spark.jar:
package cn.centaur.test.spark; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.sql.hive.HiveContext; public class SimpleDemo { public static void main(String[] args) { String[] jars = new String[]{"/data/houxm/spark/spark.jar"}; SparkConf conf = new SparkConf().setAppName("simpledemo").setMaster("yarn-client").set("executor-memory", "2g").setJars(jars).set("driver-class-path", "/data/spark/lib/MySQL-connector-java-5.1.21.jar"); JavaSparkContext sc = new JavaSparkContext(conf); HiveContext hiveCtx = new HiveContext(sc); testHive(hiveCtx); sc.stop(); sc.close(); } //測試spark sql查詢hive上面的表 public static void testHive(HiveContext hiveCtx) { hiveCtx.sql("create table temp_spark_java as select mobile,num from default.mobile_id_num02 limit 10"); } }
在java項(xiàng)目的根目錄新建MANIFEST.MF文件,代碼如下:
Manifest-Version: 1.0 Class-Path: /data/spark/lib/spark-assembly-1.6.0-hadoop2.6.0.jar /data/spark/lib/mysql-connector-java-5.1.21.jar /data/spark/lib/datanucleus-api-jdo-3.2.6.jar /data/spark/lib/datanucleus-core-3.2.10.jar /data/spark/lib/datanucleus-rdbms-3.2.9.jar Main-Class: cn.centaur.test.spark.SimpleDemo
在resources目錄(我的是maven工程,普通java工程在src下加入文件即可)下加入core-site.xml、hdfs-site.xml、hive-site.xml三個(gè)配置文件。
使用eclipse,按照此manifest文件把java代碼打包。生成jar文件,上傳至服務(wù)器,即可運(yùn)行。
以上是“如何使用java代碼提交Spark的hive sql任務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
新聞名稱:如何使用java代碼提交Spark的hivesql任務(wù)
URL標(biāo)題:http://www.rwnh.cn/article48/jdgihp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、用戶體驗(yàn)、企業(yè)網(wǎng)站制作、網(wǎng)站改版、面包屑導(dǎo)航、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)