hadoop在空闲后重新启动spark上下文时,“只能使用kerberos或web身份验证来颁发委派令牌”

lndjwyie  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(365)

我尝试将spark应用程序部署到由yarn控制的kerberized hadoop集群。spark的版本是1.5.0-cdh5.5.2。
我遇到了一个奇怪的异常,在空闲超过10秒后停止sparkcontext并初始化一个新的sparkcontext。
我试着做一些类似于这个开发人员所做的事情,并显式地指定hdfs namenode address,但是没有帮助。
更让人困惑的是,如果我根本不重置sparkcontext,或者在这个spark上下文中执行最后一个命令后不到10秒就重置它,那么一切都可以正常工作。
我怎么能修好它?
以下是遇到问题的情况:

  1. package demo;
  2. import org.apache.spark.SparkConf;
  3. import org.apache.spark.api.java.JavaSparkContext;
  4. public class App
  5. {
  6. public static void main( String[] args ) throws Exception {
  7. SparkConf sparkConf = new SparkConf();
  8. sparkConf.setAppName("demo");
  9. sparkConf.set("spark.yarn.access.namenodes", "hdfs://hdp:8020");
  10. JavaSparkContext jsc = new JavaSparkContext(sparkConf);
  11. int waiting_time = 10;
  12. System.out.println("Waiting time: " + Integer.toString(waiting_time));
  13. Thread.sleep(waiting_time * 1000);
  14. jsc.stop();
  15. jsc = new JavaSparkContext(sparkConf); // "Delegation token ..." exception here
  16. }
  17. }

异常时的堆栈跟踪raised:httpshttp://gist.github.com/anonymous/18e15010010069b119aa0934d6f42726
spark提交命令:

  1. spark-submit --principal mp@LAGOON --keytab mp.keytab --master yarn-client --class demo.App demo.jar
6rqinv9w

6rqinv9w1#

对我来说,每次重新登录都能解决问题

  1. def main(args: Array[String]): Unit = {
  2. val timer = new Timer()
  3. timer.schedule(new TimerTask {
  4. override def run(): Unit = {
  5. UserGroupInformation.reset()
  6. UserGroupInformation.loginUserFromKeytab("xxx", "/path/to/keytab")
  7. val spark = SparkSession.builder()
  8. .appName("TokenRenew")
  9. .getOrCreate()
  10. spark.read.csv("/tmp/test.txt").show
  11. spark.stop()
  12. }
  13. }, 0, 1000 * 60)
  14. }
展开查看全部
bogh5gae

bogh5gae2#

问题是由以下问题引起的:https://issues.apache.org/jira/browse/spark-15754
在spark 1.6.2中,它是固定的。

相关问题