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