美文网首页大数据程序员
SparkSql写hdfs报权限错误BUG解决

SparkSql写hdfs报权限错误BUG解决

作者: 喵感数据 | 来源:发表于2019-11-23 17:30 被阅读0次

    今天在往hive中写数据时,使用的save方法直接把数据写入到hdfs目录,结果报错。
    场景:在本地使用IDEA开发进行远程提交,把结果数据写入到HIVE。

    写入的方法:

    df.write.mode(SaveMode.Append).save("hdfs://apps/hive/warehouse/info_test.db/result")
    

    出现的错误:

    org.apache.hadoop.security.AccessControlException: Permission denied: user=Admin, access=WRITE, 
    inode="/apps/hive/warehouse/info_test.db/result":hive:hdfs:drwxrwxr-x
    

    BUG原因:

    远程提交的情况下如果没有hadoop 的系统环境变量,就会读取当前主机的用户名,
    所以Hadoop集群的节点中没有该用户名的权限,所以出现的异常。
    

    在网上查询了很多资料,大部分说需要修改集群的配置。而我们不能因为一个错误就去动集群的配置,这显然是不可取的。
    解决办法:

    def main(args: Array[String]): Unit = {
      //在这里加上HADOOP_USER_NAME用户配置,解决报错问题。
        System.getProperties.setProperty("HADOOP_USER_NAME", "hive")
    
        val conf = new SparkConf().setAppName("sparksqloutzjarea").setMaster("local[*]")
        conf.set("spark.sql.shuffle.partitions","100")//sql的shuffle分区设置,默认200
    
        //构建sparksql入口上下文环境
        val session: SparkSession = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
    
        import session.implicits._
        //连接pg库的方法
        val reader: DataFrame = session.read.format("jdbc")
          .option("url", "")
          .option("dbtable", "")
          .option("user", "postgres")
          .option("password", "postgres").load()
        reader.createTempView("taskry")
    
        //查询hive源表数据库,使用info库
        session.sql(useDataBase(HIVE_DATABASE))
        //查询实名人员轨迹表
        val smryFrame = session.sql(distinctSmryDateSql(HIVE_TABLE_SMRYGJ))
        //创建临时表
        smryFrame.createTempView("snrygj")
    
        //查询省外实名人员轨迹表
        val swryFrame = session.sql(distinctSmryDateSql(HIVE_TABLE_SMRYGJ_SW))
        //创建临时表
        swryFrame.createTempView("swrygj")
    
        session.sql(querySmrySwitchStatusSql("taskry","snrygj","swrygj","NOT","NOT","0"))
        df.write.mode(SaveMode.Append).save("hdfs://apps/hive/warehouse/info_test.db/result")
    }
    

    记录一次错误,每天提高一点点。

    相关文章

      网友评论

        本文标题:SparkSql写hdfs报权限错误BUG解决

        本文链接:https://www.haomeiwen.com/subject/ekihwctx.html