在 Hadoop/革命 R 企业环境中,mapreduce 作业可能会失败,并与 kerberos 相关的 Java 异常︰
设置选项︰
15/02/03 16:59:05 警告实用工具NativeCodeLoader: (如果适用) 使用内置 java 类无法加载您的平台的本机 hadoop 库...
调试︰ allArgs = [-Dmapred.reduce.tasks=1、 /user/RevoShare/a377683/EE594B467CDE4C988C3C3F7AF563DABB/.input、 /user/RevoShare/a377683/EE594B467CDE4C988C3C3F7AF563DABB/IRO.iro、 /user/RevoShare/a377683/AirlineDemoSmall / *,dojo3m20002.rtp1.hadoop.fmr.com,8020,/usr/bin/Revoscript]
15/02/03 16:59:09 信息 hdfs。DFSClient: HDFS_DELEGATION_TOKEN 标记 242420 a377683 上创建 ha-hdfs:nameservice1
15/02/03 16:59:09 信息安全。TokenCache︰ 有 hdfs://nameservice1; 的 dt种类︰ HDFS_DELEGATION_TOKEN,服务︰ ha-hdfs:nameservice1,Ident: (HDFS_DELEGATION_TOKEN 标记 242420 a377683)
......
15/02/03 16:59:25 信息 mapreduce。作业︰ 映射 0%减少 0%
15/02/03 16:59:38 信息 mapreduce。作业︰ 任务 Id: attempt_1422647534016_1760_m_000000_0,状态︰ 失败
错误︰ java.io.IOException: R 虚拟机退出,退出代码︰ 1,输出︰
启动脚本
[1],则返回 TRUE
$fileName
[1] NA
$start
[1] 0
$length
[1] 0
15/02/03 16:59:37 警告安全。UserGroupInformation: 作为 PriviledgedActionException: a377683 (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS 启动失败 [GSSException 所致︰ 没有提供有效的凭据 (机制级别︰ 找不到任何 Kerberos tgt)]
15/02/03 16:59:37 警告 ipc。客户端︰ 连接到服务器时出现的异常︰ javax.security.sasl.SaslException: GSS 启动失败 [GSSException 所致︰ 没有提供有效的凭据 (机制级别︰ 找不到任何 Kerberos tgt)]
15/02/03 16:59:37 警告安全。UserGroupInformation: 作为 PriviledgedActionException: a377683 (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS 启动失败 [GSSException 所致︰ 没有提供有效的凭据 (机制级别︰ 找不到任何 Kerberos tgt)]
hdfsOpenFile(/user/RevoShare/a377683/EE594B467CDE4C988C3C3F7AF563DABB/.input): FileSystem#open((Lorg/apache/hadoop/fs/Path;I)Lorg/apache/hadoop/fs/FSDataInputStream;) 错误︰
java.io.IOException︰ 在本地异常时失败︰ java.io.IOException: javax.security.sasl.SaslException: GSS 启动失败 [GSSException 所致︰ 没有提供有效的凭据 (机制级别︰ 找不到任何 Kerberos tgt)];主机的详细信息︰ 本地主机是:"< 主机名 >"。目标主机:"< 主机名 >": 8020;
在 org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:764)
在 org.apache.hadoop.ipc.Client.call(Client.java:1415)
在 org.apache.hadoop.ipc.Client.call(Client.java:1364)
在 org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:206)
在 com.sun.proxy.$Proxy14.getBlockLocations (未知源)
在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getBlockLocations(ClientNamenodeProtocolTranslatorPB.java:246)
在 sun.reflect.NativeMethodAccessorImpl.invoke0 (本机方法)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:606)
在 org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)
在 org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)
在 com.sun.proxy.$Proxy15.getBlockLocations (未知源)
在 org.apache.hadoop.hdfs.DFSClient.callGetBlockLocations(DFSClient.java:1179)
在 org.apache.hadoop.hdfs.DFSClient.getLocatedBlocks(DFSClient.java:1169)
在 org.apache.hadoop.hdfs.DFSClient.getLocatedBlocks(DFSClient.java:1159)
在 org.apache.hadoop.hdfs.DFSInputStream.fetchLocatedBlocksAndGetLastBlockLength(DFSInputStream.java:270)
在 org.apache.hadoop.hdfs.DFSInputStream.openInfo(DFSInputStream.java:237)
在 org.apache.hadoop.hdfs.DFSInputStream。 < init > (DFSInputStream.java:230)
在 org.apache.hadoop.hdfs.DFSClient.open(DFSClient.java:1457)
在 org.apache.hadoop.hdfs.DistributedFileSystem$3.doCall(DistributedFileSystem.java:301)
在 org.apache.hadoop.hdfs.DistributedFileSystem$3.doCall(DistributedFileSystem.java:297)
在 org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
在 org.apache.hadoop.hdfs.DistributedFileSystem.open(DistributedFileSystem.java:297)
通过 Caused: java.io.IOException: javax.security.sasl.SaslException: GSS 启动失败 [GSSException 所致︰ 没有提供有效的凭据 (机制级别︰ 找不到任何 Kerberos tgt)]
在 org.apache.hadoop.ipc.Client$Connection$1.run(Client.java:679)
在 java.security.AccessController.doPrivileged (本机方法)
在 javax.security.auth.Subject.doAs(Subject.java:415)
在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1642)
在 org.apache.hadoop.ipc.Client$Connection.handleSaslConnectionFailure(Client.java:642)
在 org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:725)
在 org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:367)
在 org.apache.hadoop.ipc.Client.getConnection(Client.java:1463)
在 org.apache.hadoop.ipc.Client.call(Client.java:1382)
首先,确认提交作业有当前有效的 kerberos 票证,但可以看到这种失败甚至与确认有效票证的用户。
如果群集名称节点高可用性配置,有必要具体在 RxHadoopMR() 和 RxHdfsFileSystem() 调用脚本以指定名称节点服务,但也适用指定活动名称节点主机名中。对于 kerberized和HA 名称节点环境,HDFS_DELEGATION_TOKEN 必须匹配的 nameservice 引用。在上面的错误,请参阅︰
信息安全。TokenCache︰ 有 hdfs://nameservice1; 的 dt种类︰ HDFS_DELEGATION_TOKEN,服务︰ ha-hdfs:nameservice1,Ident: (HDFS_DELEGATION_TOKEN 标记 242420 a377683
在这种情况下,RxHadoopMR() 和 RxHdfsFileSystem() 调用中的 nameNode/主机名参数应设置为"nameservice1"。