在 Hadoop/革命 R 企業環境中,mapreduce 工作可能會因與 kerberos 相關的 JAVA 例外狀況︰

設定選項︰
15/02/03 16:59:05 警告公用NativeCodeLoader︰ 無法載入您的平台的原生 hadoop 程式庫...使用內建 java 類別適用
偵錯︰ 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 上建立哈-hdfs:nameservice1
15/02/03 16:59:09 資訊安全性。TokenCache︰ 有 hdfs://nameservice1; 的資料層類型︰ HDFS_DELEGATION_TOKEN,服務︰ 哈-hdfs:nameservice1,Ident: (HDFS_DELEGATION_TOKEN 語彙基元 242420 a377683)

......

15/02/03 16:59:25 資訊 mapreduce。工作︰ 地圖 0%減少 0%
15/02/03 16:59:38 資訊 mapreduce。工作︰ 工作識別碼︰ attempt_1422647534016_1760_m_000000_0,狀態︰ 失敗
錯誤︰ java.io.IOException: R VM 結束以結束代碼︰ 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 所造成︰ 沒有提供有效的認證 (機制層級︰ 找不到任何的 Kerbero tgt、)]
15/02/03 16:59:37 警告 ipc。用戶端︰ 當連接至伺服器時所發生例外狀況︰ javax.security.sasl.SaslException: GSS 初始化失敗 [由 GSSException 所造成︰ 沒有有效的認證,提供 (機制層級︰ 找不到任何的 Kerbero tgt、)]
15/02/03 16:59:37 警告安全性。UserGroupInformation: 為 PriviledgedActionException: a377683 (auth:KERBEROS) cause:java.io.IOException: javax.security.sasl.SaslException: GSS 初始化失敗 [由 GSSException 所造成︰ 沒有提供有效的認證 (機制層級︰ 找不到任何的 Kerbero 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 所造成︰ 沒有提供有效的認證 (機制層級︰ 找不到任何的 Kerbero 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 所造成︰ 沒有提供有效的認證 (機制層級︰ 找不到任何的 Kerbero 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; 的資料層類型︰ HDFS_DELEGATION_TOKEN,服務︰ 哈-hdfs:nameservice1,Ident: (HDFS_DELEGATION_TOKEN 語彙基元 242420 a377683

在此情況下,nameNode/主機名稱中的引數的 RxHadoopMR() 和 RxHdfsFileSystem() 的呼叫,應該會設定為"nameservice1"。

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×