【问题标题】:How can I directly calculate the magnetlink of a file on hdfs through hdfs MapReduce?如何通过hdfs MapReduce直接计算hdfs上文件的magnetlink?
【发布时间】:2020-01-24 08:47:50
【问题描述】:

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

【问题讨论】:

  • 我之前下载文件并用libtorrent构建torrent,但我想直接在hdfs上构建torrent...我知道一些HDFS API但构建torrent对我来说仍然很难......
  • 其实我也在寻找一个与bittorrent兼容的实现,但是我们做了一些非常相似的事情:github.com/SmartDataInnovationLab/dirhash

标签: hadoop mapreduce hdfs p2p libtorrent


【解决方案1】:

在磁力链接中最难计算的部分是 info-hash。 info-hash 是 .torrent 文件的info-dictionary 的 SHA1-hash。它是一个bencoded 结构,包含文件名、文件大小、片段大小和(重要的是)所有片段的 SHA-1 哈希列表。构建信息字典的复杂部分是计算片段哈希,所以让我们专注于此。

此外,对于多文件种子,所有文件有效负载在逻辑上都被连接起来,以计算和验证片段哈希值。就您而言,听起来您最感兴趣的是单文件种子,这使事情变得更简单,所以让我们专注于此。

我对 HDFS 并不特别熟悉,但计算 SHA-1 块哈希可以并行完成。您决定块的大小,从技术上讲,它可以是任何大小,但我认为很多客户期望 2 的幂(或者至少它可以被 16 kiB 整除)。因此,必须在可被块大小整除的文件块上计算哈希值。例如如果将片段大小设置为 1 MiB,则必须对文件的第 1 兆字节、文件的第 2 兆字节等进行哈希处理。这一切都可以并行完成。

对于多文件种子,这会变得有点复杂,因为这些片段边界不再落在可被片段大小整除的文件偏移量上。如果 HDFS 不能让您任意并行访问文件,那可能是个问题。

获得片段哈希后,将它们放入信息字典并对其运行最后一次 SHA-1 传递,就获得了信息哈希。

如果您想支持bittorrent v2,文件将由 merkle 哈希树验证,使用文件中的 SHA-256 和 16 kiB 叶块。这还具有每个文件独立散列的好处,因此您可以避免片段对齐问题。

简而言之,只要您可以并行读取和散列 2 次方的块,您的缩减步骤就是构建信息字典,将片段散列放入其中,然后再次对其进行 SHA-1 散列。

【讨论】:

  • 我终于尝试将hdfs目录挂载到本地路径然后构建torrent &&上传到hdfs...谢谢您的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多