“Spring XD”xd-shell无法运行hadoop fs ls命令,该命令返回java异常

时间:2013-10-08 21:00:57

标签: hadoop spring-xd

我编译了最新的spring-xd,因为我需要CDH支持。我能够启动服务器但是当我通过xd-shell连接到服务器时,我尝试更改“配置”。这也是一个kerberized集群,我不知道xd将如何/可以处理它。

第一种情况:

  1. admin config server --uri http:// testdomain:10111
  2. hadoop config fs --namenode hdfs:// nameservice1:8020
  3. hadoop配置道具设置hadoop.security.group.mapping = org.apache.hadoop.security.ShellBasedUnixGroupsMapping
  4. hadoop config props加载hadoop.security.group.mapping
  5. hadoop fs ls
  6. 错误消息:

    xd:>hadoop fs ls
    -ls: Fatal internal error
    java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:128)
            at org.apache.hadoop.security.Groups.<init>(Groups.java:55)
            at org.apache.hadoop.security.Groups.getUserToGroupsMappingService(Groups.java:182)
            at org.apache.hadoop.security.UserGroupInformation.initUGI(UserGroupInformation.java:252)
            at org.apache.hadoop.security.UserGroupInformation.initialize(UserGroupInformation.java:223)
            at org.apache.hadoop.security.UserGroupInformation.ensureInitialized(UserGroupInformation.java:214)
            at org.apache.hadoop.security.UserGroupInformation.isSecurityEnabled(UserGroupInformation.java:277)
            at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:668)
            at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:573)
            at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2428)
            at org.apache.hadoop.fs.FileSystem$Cache$Key.<init>(FileSystem.java:2420)
            at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2288)
            at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:316)
            at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:162)
            at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:300)
            at org.apache.hadoop.fs.Path.getFileSystem(Path.java:194)
            at org.apache.hadoop.fs.shell.PathData.expandAsGlob(PathData.java:270)
            at org.apache.hadoop.fs.shell.Command.expandArgument(Command.java:224)
            at org.apache.hadoop.fs.shell.Command.expandArguments(Command.java:207)
            at org.apache.hadoop.fs.shell.Command.processRawArguments(Command.java:190)
            at org.apache.hadoop.fs.shell.Command.run(Command.java:154)
            at org.apache.hadoop.fs.FsShell.run(FsShell.java:254)
            at org.springframework.xd.shell.hadoop.FsShellCommands.run(FsShellCommands.java:412)
            at org.springframework.xd.shell.hadoop.FsShellCommands.runCommand(FsShellCommands.java:407)
            at org.springframework.xd.shell.hadoop.FsShellCommands.ls(FsShellCommands.java:110)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:616)
            at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:191)
            at org.springframework.shell.core.SimpleExecutionStrategy.invoke(SimpleExecutionStrategy.java:64)
            at org.springframework.shell.core.SimpleExecutionStrategy.execute(SimpleExecutionStrategy.java:48)
            at org.springframework.shell.core.AbstractShell.executeCommand(AbstractShell.java:127)
            at org.springframework.shell.core.JLineShell.promptLoop(JLineShell.java:483)
            at org.springframework.shell.core.JLineShell.run(JLineShell.java:157)
            at java.lang.Thread.run(Thread.java:679)
    Caused by: java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
            at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:126)
            ... 35 more
    Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.security.JniBasedUnixGroupsMapping
            at org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback.<init>(JniBasedUnixGroupsMappingWithFallback.java:38)
            ... 40 more
    

    第二种情况

    或者我删除了一些java opts

    运行上一个场景中的步骤1,2

    然后

    1. hadoop配置道具设置hadoop.security.authorization = true
    2. hadoop配置道具设置hadoop.security.authentication = kerberos
    3. 错误


      16:50:29,682 WARN Spring Shell util.NativeCodeLoader:62 - 无法为您的平台加载native-hadoop库...使用适用的builtin-java类 ls:启用了授权(hadoop.security.authorization),但身份验证(hadoop.security.authentication)配置为简单。请配置其他方法,如kerberos或digest。

      感谢您的帮助 - 迫不及待地想要让它发挥作用!

2 个答案:

答案 0 :(得分:0)

目前,XD中没有针对安全Hadoop集群运行的特定支持。

随时在https://jira.springsource.org/browse/XD打开JIRA门票 - 这是我们知道的,我们很快就要解决这个问题。

答案 1 :(得分:0)

感谢您提出这一点 - 我们尚未在shell中使用授权/身份验证进行测试一段时间 - 尽管它已作为项目的一部分进行测试https://github.com/vmware-serengeti/serengeti-ws

您是否能够使用标准的hadoop文件系统shell执行操作。 e.g。

  

hdfs dfs -ls / user / hadoop / file1