Hadoop计算结果并行比对

package computeResultCheck;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class ComputeResultsCompare {
	public static Integer MAX_PARTFILE_NUMBER = 5;
    public static String COMPARE_SOURCE_RESULTS_DIR =
     "D:\\计算结果\\CC-BerkStan\\hash\\" ;
 
    public static String SOURCE = "source\\";
    public static String IMPROVE = "improve\\";
    
	public static void main(String[] args) {
		long startTime = System.currentTimeMillis() ;
		ComputeResultsCompare pfs = new ComputeResultsCompare();
		Thread[] paralFind = new Thread[MAX_PARTFILE_NUMBER ] ;
		for (int p = 0; p <MAX_PARTFILE_NUMBER; p++) {
			Integer i = p + 1;
			FindSmallIdRunnable fir = pfs.new FindSmallIdRunnable(new String("part-m-0000" + i )) ;
			paralFind[p] = new Thread(fir) ;
			paralFind[p].start();
		}
		
		try {
			for(Thread t : paralFind) 
				t.join() ;
		} catch (InterruptedException e1) {
			e1.printStackTrace();
		}
		System.out.println("Congratulations ! last " +(System.currentTimeMillis() - startTime) + "ms");
	}
	
	class FindSmallIdRunnable implements Runnable {
		public String partFileName = "";
		public FindSmallIdRunnable(String partFileName) {
			this.partFileName = partFileName ;
		}

		@Override
		public void run() {
			BufferedReader sourceReader ;
			BufferedReader improveReader ;
			
			try {
				String fileName = COMPARE_SOURCE_RESULTS_DIR + SOURCE + partFileName ;
				File partFile = new File(fileName) ;
				if(partFile.exists()) {
					sourceReader = new BufferedReader(new FileReader(fileName));
					String sourceTempString = "" ;
					long sourcelineLength = 0l ; 
					String improveFileName = COMPARE_SOURCE_RESULTS_DIR + IMPROVE+ partFileName ;
        			File improvePartFile = new File(improveFileName ) ;
        			String improveTempString = "" ;
        			
					while ((sourceTempString = sourceReader.readLine()) != null)  
					{
						if (!"".equals(sourceTempString)) {
							String[] keyValuesSource = sourceTempString.split("\t");
                            Integer keySource = Integer.parseInt(keyValuesSource[0]);
                            Integer valueSource = Integer.parseInt(keyValuesSource[1]);
                            
//                			if(improvePartFile.exists()) {
//                				improveReader = new BufferedReader(new FileReader(improveFileName));
//                				improvelineLength = 0l ;
//                				while ((improveTempString = improveReader.readLine()) != null) //遍历比对太慢! 改为直接定位比对
//                				{
//                					if (!"".equals(improveTempString)) {  
//                						String[] keyValuesImprove = improveTempString.split("\t");
//                						if(keySource.equals(Integer.parseInt(keyValuesImprove[0]))) {
//                							if(!valueSource.equals(Integer.parseInt(keyValuesImprove[1]))) {
//                								 System.out.println(Thread.currentThread().getName() + ", partFile: "  + partFileName + " key: " +keySource
//                     					        		+", Source Value: "+valueSource + ", valueImrpove: " +
//                     					        		Integer.parseInt(keyValuesImprove[1]));        
//                							} else
//                								break ;
//                						} 
//                						improvelineLength = improvelineLength + improveTempString.length();
//                					} 
//                				}
//                				improveReader.close() ;
//                			}
                				  
                            if(improvePartFile.exists()) {
                                improveReader = new BufferedReader(new FileReader(improveFileName));
                				improveReader.skip(sourcelineLength);
                				if((improveTempString = improveReader.readLine()) != null ) {
                					String[] keyValuesImprove = improveTempString.split("\t");
            						if(keySource.equals(Integer.parseInt(keyValuesImprove[0])) &&
            								!valueSource.equals(Integer.parseInt(keyValuesImprove[1]))) {  //fine key level   
            					        System.out.println(Thread.currentThread().getName() + ", partFile: "  + partFileName + " key: " +keySource
            					        		+", Source Value: "+valueSource + ", valueImrpove: " +
            					        		Integer.parseInt(keyValuesImprove[1]));         							
            						}  
                				}
                            }
						}
						sourcelineLength = sourcelineLength + sourceTempString.length() + 1 ; // \n占1个字符
					}
					sourceReader.close() ;
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (NumberFormatException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}catch (Exception e1) {
				e1.printStackTrace();
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/cloudeagle_bupt/article/details/82908773