因為我們是在idea當中對hive的數據通過spark sql的形式進行處理的嘛,所以需要加載hive的表以及hive的數據,但是在加載的時候報錯;報錯信息如下;
java.lang.NoClassDefFoundError: Lorg/apache/hadoop/hive/ql/plan/TableDesc
看到這里第一反應就是hive的相關包的沒有加載了,於是我將他配置在yarn-site.xml的yarn.application.classpath當中。發現同樣的問題還是會出現。在網上找的方法也是這樣的,沒辦法只能在sparkcontext初始化的時候,實現對其進行配置了
配置如下
SparkConf conf = new SparkConf().setAppName("spark-onyarn-test").setMaster("yarn-client") .set("yarn.resourcemanager.hostname", "vm250-240") .set("spark.yarn.preserve.staging.files","false") .set("spark.executor.extraClassPath"," /opt/cloudera/parcels/CDH-5.14.0-1.cdh5.14.0.p0.24/lib/hive/lib/*") //這個就是hive的lib包下的所有的包信息。加載進去就可以了。數據完美輸出。
.set("spark.yarn.jar", "hdfs://vm250-240:8020/user/root/spark-assembly-1.6.0-cdh5.14.0-hadoop2.6.0-cdh5.14.0.jar") //這里是spark的依賴的包。我們把這個包上傳到hdfs上實現數據文件的共享,不用每次都去加載上傳,表現如下