在 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"。

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

您對語言品質的滿意度如何?
以下何者是您會在意的事項?

感謝您的意見反應!

×