我想将MapReduce作业从java Web应用程序提交到远程Hadoop集群,但无法指定应该为哪个用户提交作业.我想配置和使用应该用于所有MapReduce作业的系统用户.
目前,我无法指定任何用户,无论hadoop作业在客户端系统当前登录用户的用户名下运行.这会导致消息出错
Permission denied: user=alice, access=WRITE, inode="staging":hduser:supergroup:rwxr-xr-x
Run Code Online (Sandbox Code Playgroud)
...其中"alice"是客户端计算机上的本地登录用户.
我试过了
UserGroupInformation
实例的各种组合(代理和普通用户)和-Duser.name=hduser
,更改USER
envar和作为硬编码System.setProperty("user.name", "hduser")
调用.......无济于事 关于1)我承认不知道应该如何使用这些类.另请注意,更改Java System属性显然不是在Web应用程序中使用的真正解决方案.
是否有任何机构知道您如何指定Hadoop用于连接远程系统的用户?
PS/Hadoop使用默认配置,这意味着在连接到群集时不使用身份验证,并且Kerberos不用于与远程计算机通信.
是否可以将Map的键值对映射到具有命名参数的Scala构造函数?
也就是说,给定
class Person(val firstname: String, val lastname: String) {
...
}
Run Code Online (Sandbox Code Playgroud)
...如何使用类似的地图创建Person的实例
val args = Map("firstname" -> "John", "lastname" -> "Doe", "ignored" -> "value")
Run Code Online (Sandbox Code Playgroud)
我最终想要实现的是将Node4J Node
对象映射到Scala值对象的好方法.
尝试使用如下代码段替换C#.NET中的XML文件的内容时:
string file = Path.GetTempFileName(); // pretend this is a real file
string tmpFile = Path.GetTempFileName();
using (var writer = XmlWriter.Create(File.Create(tmpFile)))
{
writer.WriteStartElement("root");
for (int i = 0; i < 100; i++)
{
writer.WriteElementString("test", null,
"All work and no play makes Jack a dull boy");
}
writer.WriteEndElement();
}
File.Delete(file);
File.Move(tmpFile, file);
Run Code Online (Sandbox Code Playgroud)
...我收到一个System.IO.IOException,声称该文件已被另一个进程打开.