복붙노트

[HADOOP] 하둡 맵리 듀스는 NoSuchElementException

HADOOP

하둡 맵리 듀스는 NoSuchElementException

나는 두 개의 노드 내 FreeBSD의-클러스터에 맵리 듀스 - 작업을 실행하고 싶었다 그러나 나는 다음과 같은 예외를 얻을

14/08/27 14:23:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/08/27 14:23:04 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
14/08/27 14:23:04 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
14/08/27 14:23:04 WARN mapreduce.JobSubmitter: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
14/08/27 14:23:04 WARN mapreduce.JobSubmitter: No job jar file set.  User classes may not be found. See Job or Job#setJar(String).
14/08/27 14:23:04 INFO mapreduce.JobSubmitter: Cleaning up the staging area file:/tmp/hadoop-otlam/mapred/staging/otlam968414084/.staging/job_local968414084_0001
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus.loadPermissionInfo(RawLocalFileSystem.java:565)
at org.apache.hadoop.fs.RawLocalFileSystem$DeprecatedRawLocalFileStatus.getPermission(RawLocalFileSystem.java:534)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.checkPermissionOfOther(ClientDistributedCacheManager.java:276)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.isPublic(ClientDistributedCacheManager.java:240)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineCacheVisibilities(ClientDistributedCacheManager.java:162)
at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineTimestampsAndCacheVisibilities(ClientDistributedCacheManager.java:58)
at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:265)
at org.apache.hadoop.mapreduce.JobSubmitter.copyAndConfigureFiles(JobSubmitter.java:301)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:389)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1285)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1282)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1556)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1282)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1303)
...

내가 (사실) job.watForCompletion를 실행하려고 할 때 발생합니다; 새로운 맵리 듀스 - 직업에. 있고 StringTokenizer와 다음에 더 이상의 요소가 ()가 호출되지 않은 경우가 있기 때문에 예외 : NoSuchElementException이 발생한다. 나는 소스에보고했고 RawLocalFileSystem.java에서 다음 codepart을 발견 :

/// loads permissions, owner, and group from `ls -ld`
private void loadPermissionInfo() {
  IOException e = null;
  try {
    String output = FileUtil.execCommand(new File(getPath().toUri()), 
        Shell.getGetPermissionCommand());
    StringTokenizer t =
        new StringTokenizer(output, Shell.TOKEN_SEPARATOR_REGEX);
    //expected format
    //-rw-------    1 username groupname ...
    String permission = t.nextToken();

최대한 멀리 볼 수 하둡 내가 콘솔을 사용하는 경우 완벽하게 작동하는 -ld LS와 특정 파일에 일부 권한을 찾습니다. 불행하게도 내가 찾고 있었던 권한이있는 파일을 아직 발견 havn't는.

하둡 버전은 2.4.1이며, HBase를 버전 0.98.4 내가이 자바 API를 사용하고 있습니다. 테이블 작업 벌금을 만드는 같은 다른 작업. 사람이 유사한 문제가 발생하거나 무엇을 알고나요?

편집하다: 난 그냥 이것은 단지 관련 문제를 하둡 것을 발견했다. 심지어는 HDFS를 사용하지 않고 간단한 맵리 듀스-동작을 만드는 것은 나에게 같은 예외를 제공합니다.

해결법

  1. ==============================

    1.이 문제를 해결할 수 있는지 확인하십시오 수 있습니다.

    이 문제를 해결할 수 있는지 확인하십시오 수 있습니다.

    당신은 권한 문제가있는 경우, 다음이 작동합니다.

    public static void main(String[] args) {
         //set user group information       
         UserGroupInformation ugi = UserGroupInformation.createRemoteUser("hdfs");
         //set privilege exception
         ugi.doAs(new PrivilegedExceptionAction<Void>() {
         public Void run() throws Exception {
                    //create configuration object
                     Configuration config = new Configuration();
                     config.set("fs.defaultFS", "hdfs://ip:port/");
                     config.set("hadoop.job.ugi", "hdfs");
                     FileSystem dfs = FileSystem.get(config);
                     .
                     .
    
  2. from https://stackoverflow.com/questions/25364802/hadoop-mapreduce-nosuchelementexception by cc-by-sa and MIT license