2016-11-27 26 views
2

我嘗試將Spark應用程序部署到由YARN控制的kerberized hadoop羣集。 Spark的版本是1.5.0-cdh5.5.2。在空閒後重新啓動火花上下文時,「只能使用Kerberos或Web認證授予代理令牌」

我面臨奇怪的異常,停止超過10秒閒置並初始化一個新的SparkContext時。

我試過做類似於this開發者的東西,並明確指定了hdfs namenode地址,但它沒有幫助。

更令人困惑的是,如果我完全不重置SparkContext,或者在這個Spark上下文中執行最後一條命令後不到10秒內重置它,那麼一切正常。

我該如何解決?

這裏被最小化,其中問題得到滿足的情況:當引發異常

package demo; 

import org.apache.spark.SparkConf; 
import org.apache.spark.api.java.JavaSparkContext; 


public class App 
{ 
    public static void main(String[] args) throws Exception { 

     SparkConf sparkConf = new SparkConf(); 
     sparkConf.setAppName("demo"); 
     sparkConf.set("spark.yarn.access.namenodes", "hdfs://hdp:8020"); 

     JavaSparkContext jsc = new JavaSparkContext(sparkConf); 

     int waiting_time = 10; 
     System.out.println("Waiting time: " + Integer.toString(waiting_time)); 
     Thread.sleep(waiting_time * 1000); 

     jsc.stop(); 

     jsc = new JavaSparkContext(sparkConf); // "Delegation token ..." exception here 
    } 

} 

堆棧跟蹤:https://gist.github.com/anonymous/18e15010010069b119aa0934d6f42726

火花提交命令:

spark-submit --principal [email protected] --keytab mp.keytab --master yarn-client --class demo.App demo.jar 
+0

它看起來像這個異常不是根本原因。嘗試檢查NameNode日誌,看看什麼是真正的問題 – AdamSkywalker

+0

我已經做了一些調查,發現nameNode.getDelegationToken在構造SparkContext的過程中被調用,即使委託令牌已經出現在UserGroupInforation對象的當前記錄用戶的令牌列表中。在構建新上下文之前等待時間小於10秒時,不會發生此問題,因爲到namenode的rpc連接僅因爲ipc.client.connection.maxidletime屬性而未重置。 –

+0

這是一個錯誤還是我不能用這種方式使用SparkContext? –

回答