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
它看起來像這個異常不是根本原因。嘗試檢查NameNode日誌,看看什麼是真正的問題 – AdamSkywalker
我已經做了一些調查,發現nameNode.getDelegationToken在構造SparkContext的過程中被調用,即使委託令牌已經出現在UserGroupInforation對象的當前記錄用戶的令牌列表中。在構建新上下文之前等待時間小於10秒時,不會發生此問題,因爲到namenode的rpc連接僅因爲ipc.client.connection.maxidletime屬性而未重置。 –
這是一個錯誤還是我不能用這種方式使用SparkContext? –