这个异常是在Spark大数据集群升级后原本正常运行的程序报出的,报错位置为将中间结果批量存入hbase的过程中。经反复查找依赖关系发现是 hbase-spark jar包内部调用了SparkHadoopUtil.scala 内部的 getCurrentUserName() 方法。但是此方法在 Spark-core2.3.0.jar 中被移除了,且 hbase-spark 并未发布对应的更新。这个问题虽然可以通过降级spark版本解决(经测试只更换 spark-core jar 包并不能解决此问题)但还有个相对更加简便的方法可以解决此问题。
1.克隆spark 在github上的官方仓库
git clone https://github.com/apache/spark.git
2.切换分支到 branch-2.3
git checkout branch-2.3
3.在spark/core/src/main/scala/org/apache/spark/deploy/SparkHadoopUtil.scala 文件下添加
def getCurrentUserCredentials(): Credentials = { null }
4. 请注意这个方法需添加至该代码上方其他位置可能会引起程序报错
addCurrentUserCredentials()
5. 使用一下命令便可进行打包
build/mvn -DskipTests clean package
6. 接下来将产生的jar 包放入${SPARK_HOME}/jars 或者你定义的依赖目录并提交你的应用程序这个错误便不再产生。