我正在 OpenShift 平台上启动 Apache spark 从节点。 OpenShift 在内部以匿名用户身份启动 docker 镜像(用户没有名称,只有 UID)。我收到以下异常
<i></i>
<i>
<pre><code>17/07/17 16:46:53 INFO SignalUtils: Registered signal handler for INT
12 17/07/17 16:46:55 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
13 Exception in thread "main" java.io.IOException: failure to login
14 at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:824)
15 at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:761)
16 at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:634)
17 at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
18 at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
19 at scala.Option.getOrElse(Option.scala:121)
20 at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2391)
21 at org.apache.spark.SecurityManager.<init>(SecurityManager.scala:221)
22 at org.apache.spark.deploy.worker.Worker$.startRpcEnvAndEndpoint(Worker.scala:714)
23 at org.apache.spark.deploy.worker.Worker$.main(Worker.scala:696)
24 at org.apache.spark.deploy.worker.Worker.main(Worker.scala)
25 Caused by: javax.security.auth.login.LoginException: java.lang.NullPointerException: invalid null input: name
26 at com.sun.security.auth.UnixPrincipal.<init>(UnixPrincipal.java:71)
27 at com.sun.security.auth.module.UnixLoginModule.login(UnixLoginModule.java:133)
28 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
29 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
30 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
31 at java.lang.reflect.Method.invoke(Method.java:497)
32 at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
33 at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
34 at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
35 at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
36 at java.security.AccessController.doPrivileged(Native Method)
37 at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
38 at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
39 at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:799)
40 at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:761)
41 at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:634)
42 at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
43 at org.apache.spark.util.Utils$$anonfun$getCurrentUserName$1.apply(Utils.scala:2391)
44 at scala.Option.getOrElse(Option.scala:121)
45 at org.apache.spark.util.Utils$.getCurrentUserName(Utils.scala:2391)
46 at org.apache.spark.SecurityManager.<init>(SecurityManager.scala:221)
47 at org.apache.spark.deploy.worker.Worker$.startRpcEnvAndEndpoint(Worker.scala:714)
48 at org.apache.spark.deploy.worker.Worker$.main(Worker.scala:696)
49 at org.apache.spark.deploy.worker.Worker.main(Worker.scala)
50
51 at javax.security.auth.login.LoginContext.invoke(LoginContext.java:856)
52 at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
53 at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
54 at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
55 at java.security.AccessController.doPrivileged(Native Method)
56 at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
57 at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
58 at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:799)
59 ... 10 more
</code></pre>
</i> <i></i>
我尝试在 spark-default.conf 上设置以下属性仍然没有用。
spark.eventLog.enabled false
spark.ui.enabled false
spark.acls.enable false
spark.admin.acls *
spark.modify.acls *
spark.modify.acls.groups *
spark.ui.view.acls.groups *
spark.ui.enabled false
你能帮我解决这个问题吗?
谢谢
纳温
最佳答案
这是一种不需要 nss_wrapper 的替代方法。
默认情况下,OpenShift 容器使用匿名用户 ID 和组 ID 0(也称为“根”组)运行。首先,设置您的图像,以便 /etc/passwd 由 group-id 0 拥有,并且具有组写入权限,例如这个 Dockerfile 片段:
RUN chgrp root /etc/passwd && chmod ug+rw /etc/passwd
那么你可以在容器启动时添加如下逻辑,例如下面的脚本可以作为一个ENTRYPOINT:
#!/bin/bash
myuid=$(id -u)
mygid=$(id -g)
uidentry=$(getent passwd $myuid)
if [ -z "$uidentry" ] ; then
# assumes /etc/passwd has root-group (gid 0) ownership
echo "$myuid:x:$myuid:$mygid:anonymous uid:/tmp:/bin/false" >> /etc/passwd
fi
exec "$@"
这个入口点脚本会自动为匿名 uid 提供一个 passwd 文件入口,这样需要它的工具就不会失败。
有一篇关于 OpenShift 中匿名 uid 和相关主题的不错的博客文章: https://blog.openshift.com/jupyter-on-openshift-part-6-running-as-an-assigned-user-id/
关于apache-spark - Apache Spark 独立用于匿名 UID(无用户名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45198252/
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我没有理解以下行为(另请参阅inthisSOthread):defdef_testputs'def_test.in'yieldifblock_given?puts'def_test.out'enddef_testdoputs'def_testok'endblock_test=procdo|&block|puts'block_test.in'block.callifblockputs'block_test.out'endblock_test.calldoputs'block_test'endproc_test=procdoputs'proc_test.in'yieldifblock_gi
当我使用has_one时,它工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
我正在使用带有Rails的Devise,我想添加一个方法“getAllComments”,所以我这样写:classUser在我的Controller中:defdashboard@user=current_user@comments=@user.getAllComments();end当我访问我的url时,我得到了undefinedmethod`getAllComments'for#我做错了什么?谢谢 最佳答案 因为getAllComments是一个类方法,而您正试图将其作为实例方法访问。您要么需要访问它:User.getAllCom
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试