- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在 google dataproc 集群上运行 Spark 作业,但出现以下错误:
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: class org.apache.hadoop.security.JniBasedUnixGroupsMapping not org.apache.hadoop.security.GroupMappingServiceProvider
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2330)
at org.apache.hadoop.security.Groups.<init>(Groups.java:108)
at org.apache.hadoop.security.Groups.<init>(Groups.java:102)
at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:450)
at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:310)
at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:277)
at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:833)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:803)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:676)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2430)
at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2430)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2430)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:295)
at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
at com.my.package.spark.SparkModule.provideJavaSparkContext(SparkModule.java:59)
at com.my.package.spark.SparkModule$$ModuleAdapter$ProvideJavaSparkContextProvidesAdapter.get(SparkModule$$ModuleAdapter.java:140)
at com.my.package.spark.SparkModule$$ModuleAdapter$ProvideJavaSparkContextProvidesAdapter.get(SparkModule$$ModuleAdapter.java:101)
at dagger.internal.Linker$SingletonBinding.get(Linker.java:364)
at spark.Main$$InjectAdapter.get(Main$$InjectAdapter.java:65)
at spark.Main$$InjectAdapter.get(Main$$InjectAdapter.java:23)
at dagger.ObjectGraph$DaggerObjectGraph.get(ObjectGraph.java:272)
at spark.Main.main(Main.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:755)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.RuntimeException: class org.apache.hadoop.security.JniBasedUnixGroupsMapping not org.apache.hadoop.security.GroupMappingServiceProvider
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2324)
... 31 more
Dataproc 版本:1.1.51 和 1.2.15
作业配置:
地区:全局
集群 my-cluster
工作类型:Spark
Jar 文件:gs://bucket/jars/spark-job.jar
主类或 jar:spark.Main
参数:
属性:
spark.driver.extraClassPath:/path/to/google-api-client-1.20.0.jar
spark.driver.userClassPathFirst: true
我在命令行上以这种方式运行它没有问题:
spark-submit --conf "spark.driver.extraClassPath=/path/to/google-api-client-1.20.0.jar" --conf "spark.driver.userClassPathFirst=true" --class spark.Main /path/to/spark-job.jar
但是 UI/API 不允许您同时传递类名和 jar,所以它看起来像这样:
spark-submit --conf spark.driver.extraClassPath=/path/to/google-api-client-1.20.0.jar --conf spark.driver.userClassPathFirst=true --class spark.Main --jars /tmp/1f4d5289-37af-4311-9ccc-5eee34acaf62/spark-job.jar /usr/lib/hadoop/hadoop-common.jar
我不知道是不是提供 extraClassPath 有问题,还是 spark-job.jar 和 hadoop-common.jar 有某种冲突。
最佳答案
对于遇到此问题的任何人(即使您没有使用 Spark)
此异常在此处引发 Configuration.java#L2585
配置.java
Hadoop 告诉你,第二个类不是另一个类的子类
或子接口(interface)
。
这就是 Class.isAssignableFrom(OtherClass)
在上图中 2584
行所做的事情
The
java.lang.Class.isAssignableFrom()
determines if the class orinterface represented by this Class object is either the same as,or is a superclass or superinterface of, the class orinterface represented by the specified Class parameter.
但我们知道
org.apache.hadoop.security.GroupMappingServiceProvider
是
的 父类(super class)org.apache.hadoop.security.JniBasedUnixGroupsMapping
那么这怎么会发生呢?
这可能有多种原因
classpath
上有两个版本的 hadoop-client
库hadoop-client
jarhadoop-client-api
hadoop-client-runtime
hadoop-client-api
和 hadoop-client-runtime
使用 Hadoop Client Libs 的阴影版本关于java - 通过 Dataproc API 的 Spark 作业的 Hadoop 安全性 GroupMappingServiceProvider 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47929270/
我正在尝试在 google dataproc 集群上运行 Spark 作业,但出现以下错误: Exception in thread "main" java.lang.RuntimeException
我是一名优秀的程序员,十分优秀!