2012-10-23 92 views
0

我写这个Java程序的Hadoop将执行files.The文件的并行指数在日食编译错误:无法映射的字符编码UTF8

package org.myorg; 

import java.io.*; 
import java.util.*; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapred.*; 
import org.apache.hadoop.util.*; 

public class ParallelIndexation { 


public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 
    private final static IntWritable zero = new IntWritable(0); 
    private Text word = new Text(); 
    public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { 
     String line = value.toString(); 
     int CountComputers; 
     //DataInputStream ConfigFile = new DataInputStream(new FileInputStream("countcomputers.txt")); 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // путь к файлу 
     DataInputStream in = new DataInputStream(fstream); 
     BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
     String result = br.readLine(); // читаем как строку 
     CountComputers = Integer.parseInt(result); // переводим строку в число 
     //CountComputers=ConfigFile.readInt(); 
     in.close(); 
     fstream.close(); 
     ArrayList<String> paths = new ArrayList<String>(); 
     StringTokenizer tokenizer = new StringTokenizer(line, "\n"); 
     while (tokenizer.hasMoreTokens()) 
     { 
      paths.add(tokenizer.nextToken()); 
     } 
     String[] ConcatPaths= new String[CountComputers]; 
     int NumberOfElementConcatPaths=0; 
     if (paths.size()%CountComputers==0) 
     { 
      for (int i=0; i<CountComputers; i++) 
      { 
       ConcatPaths[i]=paths.get(NumberOfElementConcatPaths); 
       NumberOfElementConcatPaths+=paths.size()/CountComputers; 
       for (int j=1; j<paths.size()/CountComputers; j++) 
       { 
        ConcatPaths[i]+="\n"+paths.get(i*paths.size()/CountComputers+j); 
       } 
      } 
     } 
     else 
     { 
      NumberOfElementConcatPaths=0; 
      for (int i=0; i<paths.size()%CountComputers; i++) 
      { 
       ConcatPaths[i]=paths.get(NumberOfElementConcatPaths); 
       NumberOfElementConcatPaths+=paths.size()/CountComputers+1;    
       for (int j=1; j<paths.size()/CountComputers+1; j++) 
       { 
        ConcatPaths[i]+="\n"+paths.get(i*(paths.size()/CountComputers+1)+j); 
       }   
      } 
      for (int k=paths.size()%CountComputers; k<CountComputers; k++) 
      { 
       ConcatPaths[k]=paths.get(NumberOfElementConcatPaths); 
       NumberOfElementConcatPaths+=paths.size()/CountComputers;     
       for (int j=1; j<paths.size()/CountComputers; j++) 
       { 
        ConcatPaths[k]+="\n"+paths.get((k-paths.size()%CountComputers)*paths.size()/CountComputers+paths.size()%CountComputers*(paths.size()/CountComputers+1)+j); 
       }     
      } 
     } 
     //CountComputers=ConfigFile.readInt(); 
     for (int i=0; i<ConcatPaths.length; i++) 
     { 
      word.set(ConcatPaths[i]); 
      output.collect(word, zero); 
     } 
    } 
} 



public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { 
    public native long Traveser(String Path); 
    public native void Configure(String Path); 
    public void reduce(Text key, IntWritable value, OutputCollector<Text, LongWritable> output, Reporter reporter) throws IOException { 
     long count; 
     String line = key.toString(); 
     ArrayList<String> ProcessedPaths = new ArrayList<String>(); 
     StringTokenizer tokenizer = new StringTokenizer(line, "\n"); 
     while (tokenizer.hasMoreTokens()) 
     { 
      ProcessedPaths.add(tokenizer.nextToken()); 
     }  
     Configure("/etc/nsindexer.conf"); 
     for (int i=0; i<ProcessedPaths.size(); i++) 
     { 
      count=Traveser(ProcessedPaths.get(i)); 
     } 
     output.collect(key, new LongWritable(count)); 
     } 
    static 
    { 
     System.loadLibrary("nativelib"); 
    } 
} 

public static void main(String[] args) throws Exception { 
     JobConf conf = new JobConf(ParallelIndexation.class); 
     conf.setJobName("parallelindexation"); 
     conf.setOutputKeyClass(Text.class); 
     conf.setOutputValueClass(LongWritable.class); 
     conf.setMapperClass(Map.class); 
     conf.setCombinerClass(Reduce.class); 
     conf.setReducerClass(Reduce.class); 
     conf.setInputFormat(TextInputFormat.class); 
     conf.setOutputFormat(TextOutputFormat.class); 
     FileInputFormat.setInputPaths(conf, new Path(args[0])); 
     FileOutputFormat.setOutputPath(conf, new Path(args[1])); 
     JobClient.runJob(conf); 
    } 
} 

创建为编辑在Nexenta的Illumos的结果操作系统(Solaris)的队的手段

javac -classpath hadoop-examples-1.0.1.jar -d folder/classes folder/src/ParallelIndexation.java, 

接收以下错误

folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                        ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                        ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                        ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                         ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                         ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                          ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                          ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                          ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                          ^
folder/src/ParallelIndexation.java:23: error: unmappable character for encoding UTF8 
     FileInputStream fstream = new FileInputStream("/usr/countcomputers.txt"); // ���� � ����� 
                           ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
             ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
             ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
              ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
              ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
              ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
              ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
               ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
               ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
               ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
                ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
                ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
                ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
                 ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
                 ^
folder/src/ParallelIndexation.java:26: error: unmappable character for encoding UTF8 
     String result = br.readLine(); // ������ ��� ������ 
                 ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                 ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                 ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                 ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                 ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                  ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                  ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                  ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                   ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                   ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                   ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                   ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                    ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                    ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                    ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                     ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                     ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                     ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                      ^
folder/src/ParallelIndexation.java:27: error: unmappable character for encoding UTF8 
     CountComputers = Integer.parseInt(result); // ��������� ������ � ����� 
                      ^
46 errors 

如何在eclipse中更改UTF8的编码?

+0

检查文件的编码我猜你的赞扬是麻烦之源 – kirschmichel

回答

0

在Eclipse中,您可以设置文本文件编码在三个地方:

  • 在工作区级别:首选项/常规/工作区/文本文件编码
  • 在项目层面上:地产(项目)/资源/文本文件编码
  • 在文件级别:地产(对文件)/资源/文本文件编码

我建议在工作区和项目水平,如果将其设置只有在文件级别需要时。

设置文件编码并不真正转换文件本身。您可能需要使用单独的工具(例如iconv)。

+1

有很少一个很好的理由来设置这个在文件级:一期工程内的所有文件应使用相同的编码, 越多越好。 –

+0

是的,你说得对。我已经更新了我的建议。 – Codo

+0

如果你有几个要转换的文件,Notepad ++(http://notepad-plus-plus.org/)可以为你做,如果它是一个整个项目,我同意'iconv'路线。 –

0

Java 6为可映射字符提供“警告”。

Java 7为可映射字符提供“错误”,并失败。

file -bi [filename] 
相关问题