2012-02-10 23 views
2

我要计算的输入分配和映射器的输出的哈希SHA256应该是Hadoop..how来计算输入的散列分割

(键,值),其中关键的是在开始的位置块 和值是完整块的sha256散列。

我的要求是读取完整的输入拆分为一个记录。

这里是我到目前为止所做的(我已经采取块大小为100 kb)..没有工作的价值部分的关键,价值。有权不只是输出1

public void map(LongWritable key, Text value, 
     OutputCollector <LongWritable, IntWritable> output, Reporter reporter) throws IOException { 

    LongWritable key_offset = new LongWritable(); 
    String line = value.toString(); 
    long block = 0; 
    if (count == 0) { 
     key_offset = key; 
     block = key_offset.get(); 
     block = block/100000; 
     count++; 
    } 
    output.collect(new LongWritable(block), one); 
+0

什么是你的输入? – 2012-02-10 14:33:02

+0

输入是一个文件..内容和格式无关紧要。唯一要紧的是计算完整输入拆分的散列,然后输出映射器应该为我(block_offset,block_hash) – Ragit 2012-02-10 14:39:23

+0

我正在使用它来计算文件的散列树..so映射器正在计算叶节点的散列值 – Ragit 2012-02-10 14:40:21

回答

0

可以从Hadoop的修改WholeFileInputFormat - 权威指南,这样,而不是将整个文件内容作为BytesWritable值,计算SHA256并传递作为值?你应该只需要修改WholeFileRecordReader.next()方法有一些方法代替IOUtils.readFully计算文件字节SHA256 - 也许是这样的: