code snippet: 计算HDFS中文件的md5值

org.apache.hadoop.fs.FSDataInputStream os = dfs.open(outputFileName);
byte[] buffer = new byte[1024 * 1024 * 2];
MessageDigest md5 = MessageDigest.getInstance("MD5");
try {
  while (true) {
    int bytesRead = os.read(buffer);
    if (bytesRead <= -1)
      break;
    else if (bytesRead > 0) {
      md5.update(buffer, 0, bytesRead);
    }
  }
} finally {
  os.close();
}
byte[] result = md5.digest();
String hexString = DatatypeConverter.printHexBinary(result);

Hadoop其实本身给每个文件都存的有checksum,请参见MD5MD5CRC32FileChecksum这个类。但是那个跟md5sum计算出来的md5值并不一样。这是个串行化版本,求更好的实现。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥