私は Hadoop HDFS が初めてで、Java にはかなり慣れていないので、助けが必要です。HDFS からファイルを読み取り、このファイルの MD5 ハッシュを計算しようとしています。一般的な Hadoop 構成は次のとおりです。
private FSDataInputStream hdfsDIS;
private FileInputStream FinputStream;
private FileSystem hdfs;
private Configuration myConfig;
myConfig.addResource("/HADOOP_HOME/conf/core-site.xml");
myConfig.addResource("/HADOOP_HOME/conf/hdfs-site.xml");
hdfs = FileSystem.get(new URI("hdfs://NodeName:54310"), myConfig);
hdfsDIS = hdfs.open(hdfsFilePath);
関数hdfs.open(hdfsFilePath)
はFSDataInputStream
問題は、HDFS からしか取得できないことですが、それFSDataInputStream
を取得したいと考えFileInputStream
ています。
以下のコードはハッシュ部分を実行し、StackOverflow のどこかで見つけたものから適応されています (現在はリンクが見つからないようです)。
FileInputStream FinputStream = hdfsDIS; // <---This is where the problem is
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
FileChannel channel = FinputStream.getChannel();
ByteBuffer buff = ByteBuffer.allocate(2048);
while(channel.read(buff) != -1){
buff.flip();
md.update(buff);
buff.clear();
}
byte[] hashValue = md.digest();
return toHex(hashValue);
}
catch (NoSuchAlgorithmException e){
return null;
}
catch (IOException e){
return null;
}
が必要な理由FileInputStream
は、ハッシュを行うコードがFileChannel
ファイルからデータを読み取る効率を高めると思われる を使用するためです。
FSDataInputStream
を に変換する方法を教えてもらえますかFileInputStream