spark 写入hive报错[笔记]:Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Tas

Spark将数据写入hive时报错:

Exception in thread "main" org.apache.spark.SparkException: Job aborted.

Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 2.0 failed 1 times, most recent failure: Lost task 0.0 in stage 2.0 (TID 2) 

代码:

    val conf = new SparkConf().setMaster("local[*]").setAppName("four")
       
    val sc = new SparkSession.Builder()
      .config("hive.exec.dynamic.partition", "true")
      .config("hive.exec.dynamic.partition.mode", "nonstrict")
      .config(conf)
      .enableHiveSupport()
      .getOrCreate()

//写入hive表操作
   df.write
     .format("hive")
     .mode(SaveMode.Append)
     .saveAsTable("user.user_info")

报错分析:

由于写入时我认为是连接hive时不稳定导致的写入报错

问题解决

dfs.client.use.datanode.hostname=true

    val conf = new SparkConf().setMaster("local[*]").setAppName("four")
               .set("dfs.client.use.datanode.hostname", "true")
    val sc = new SparkSession.Builder()
      .config("hive.exec.dynamic.partition", "true")
      .config("hive.exec.dynamic.partition.mode", "nonstrict")
      .config(conf)
      .enableHiveSupport()
      .getOrCreate()

//写入hive表操作
   df.write
     .format("hive")
     .mode(SaveMode.Append)
     .saveAsTable("user.user_info")

HDFS客户端直接使用DataNode的主机名而不是IP地址来连接到DataNode。

默认情况下,HDFS客户端会使用DataNode的IP地址来建立连接。但是,在某些情况下,可能存在多个IP地址对应同一个主机名的情况,这时客户端可能会连接到错误的DataNode。通过设置dfs.client.use.datanode.hostnametrue,客户端会使用主机名来建立连接,从而避免这个问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辉懂编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值