如何通过hdfs mapreduce直接计算hdfs上文件的magnetlink?

jchrr9hc  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(405)

如何通过mapreduce直接计算hdfs上文件或目录的magnetlink?

q43xntqr

q43xntqr1#

磁铁链接中最难计算的部分是信息散列。info散列是.torrent文件的info字典的sha1散列。它是一个bencoded结构,包含文件名、文件大小、工件大小和(重要的是)所有工件的sha-1哈希列表。构建一个信息字典的复杂部分是计算片段散列,所以让我们重点关注它。
此外,对于多文件Torrent,所有文件有效负载在逻辑上都是串联的,以便计算和验证片段散列。在您的例子中,听起来您对单文件torrents最感兴趣,这使事情变得更简单,所以让我们重点关注它。
我不太熟悉hdfs,但是计算sha-1散列可以并行进行。你决定一块的大小,技术上它可以是任何大小,但我认为很多客户期望2的幂(或者至少它可以被16 kib整除)。因此,哈希值必须计算在文件中可被片段大小整除的块上。e、 g.如果将工件大小设置为1 mib,则必须对文件的第1兆字节和第2兆字节进行哈希运算,依此类推。这一切都可以并行进行。
对于多文件torrents,这会变得更复杂一些,因为这些片段边界不再位于可被片段大小整除的文件偏移量处。如果hdfs不能提供对文件的任意并行访问,那可能是个问题。
一旦你有了片段散列,把它们放在信息字典里,运行最后一个sha-1传递,你就有了信息散列。
如果您想支持bittorrent v2,则使用文件中的sha-256和16 kib叶块,通过merkle哈希树验证文件。这还有一个好处,即每个文件都是独立散列的,因此可以避免工件对齐问题。
简言之,只要你能并行读取和散列两次方的块,你的reduce步骤就是简单地构建信息字典,把散列块放在那里,然后sha-1再次散列它。

相关问题