8

Hadoop API(DFSCleint.getFileChecksum())を使用してHDFSにコピーした後、ファイルの整合性をチェックしようとしています。

上記のコードに対して次の出力が得られます。

Null
HDFS : null
Local : null

誰かがエラーや間違いを指摘できますか?これがコードです:

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileChecksum;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocalFileSystem;
import org.apache.hadoop.fs.Path;


public class fileCheckSum {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        Configuration conf = new Configuration();

         FileSystem hadoopFS = FileSystem.get(conf);
    //  Path hdfsPath = new Path("/derby.log");

        LocalFileSystem localFS = LocalFileSystem.getLocal(conf);
    //      Path localPath = new Path("file:///home/ubuntu/derby.log");


    //  System.out.println("HDFS PATH : "+hdfsPath.getName());
    //      System.out.println("Local PATH : "+localPath.getName());

        FileChecksum hdfsChecksum = hadoopFS.getFileChecksum(new Path("/derby.log"));
        FileChecksum localChecksum = localFS.getFileChecksum(new Path("file:///home/ubuntu/derby.log"));


        if(null!=hdfsChecksum || null!=localChecksum){
            System.out.println("HDFS Checksum : "+hdfsChecksum.toString()+"\t"+hdfsChecksum.getLength());
            System.out.println("Local Checksum : "+localChecksum.toString()+"\t"+localChecksum.getLength());

            if(hdfsChecksum.toString().equals(localChecksum.toString())){
                System.out.println("Equal");
            }else{
                System.out.println("UnEqual");

            }
        }else{
            System.out.println("Null");
            System.out.println("HDFS : "+hdfsChecksum);
            System.out.println("Local : "+localChecksum);

        }

    }

}
4

2 に答える 2

11

にリモートアドレスを設定しておらずconf、基本的に同じ構成を使用しているため、hadoopFSlocalFSは両方のインスタンスを指していますLocalFileSystem

getFileChecksumは実装されておらずLocalFileSystem、nullを返します。DistributedFileSystemただし、conf分散クラスターを指している場合は、サイズのチャンクのCRC32チェックサムのMD5のMD5を返すFileSystem.get(conf)インスタンスを返す必要があります。この値は、ブロックサイズとクラスター全体の構成によって異なります。そのため、これら2つのパラメーターは、アルゴリズムの名前として分散チェックサムの戻り値にもエンコードされます。MD5-of-xxxMD5-of-yyyCRC32ここで、xxxはブロックあたりのCRCチェックサムの数、yyyはパラメーターです。DistributedFileSystembytes.per.checksumbytes.per.checksumbytes.per.checksum

は、getFileChecksumファイルシステム間で比較できるようには設計されていません。分散チェックサムをローカルでシミュレートしたり、手動でマップリデュースジョブを実行してローカルハッシュに相当するものを計算したりすることは可能ですが、ファイルがHadoopに書き込まれたり、Hadoopから読み取られたりするときに発生するHadoop独自の整合性チェックに依存することをお勧めします

于 2013-01-28T14:46:49.363 に答える