【问题标题】:Replacing HDFS Hadoop替换 HDFS Hadoop
【发布时间】:2013-01-26 21:57:26
【问题描述】:

将 hadoop 中的 HDFS 替换为其他 NoSQL 数据库需要付出什么努力。这涉及到多少工作?有没有人有任何好的维基或描述它的链接?是否像为该数据库实现 FileSystem 接口一样简单?

我发现了几篇关于其他人如何修改 hadoop 以生成自定义分发的文章,但还没有找到替换 HDFS 的指南。

谢谢, 帕特

【问题讨论】:

  • 为什么要首先替换 HDFS?
  • 如果我已经将数据存储到其他 NoSQL 数据库中,那么在该数据库和 HDFS 之间来回复制它是没有意义的。相反,如果它可以直接处理该数据库,它将节省一些时间。
  • 您想要将数据从数据库复制到 HDFS 的唯一原因是运行 MR 作业,对吗?如果没有分布式文件系统 (HDFS),MR 任务就无法并行执行,这是首先使用 Hadoop 的主要好处之一。
  • 还有其他可用的分布式数据存储,如 cassandra、dynamodb 等。如果我想从中运行 MR 作业怎么办?

标签: hadoop hdfs


【解决方案1】:

实现自己的 DFS 接口并使其与 hadoop 一起工作相对简单。您所需要的只是文件和目录的文件系统概念与您的存储之间的某种逻辑映射。
在 NoSQL 的情况下(如果我假设 KeyValue),您应该决定如何表示目录。您可以做一些特殊的节点,也可以将路径放入键中。
另一个决策点 - 决定您是否关心数据局部性
关于文档,我认为 s3n DFS 实现的来源是最好的起点。
我认为最接近的例子是由 DataStax http://www.datastax.com/ 完成的 Hadoop over Cassandra
另一个例子(我们最近做过的事情)是 hadoop 与 OpenStack Swift 的集成。 http://bigdatacraft.com/archives/349

【讨论】:

  • 谢谢,这正是我想要的。
【解决方案2】:

实际上不久前我就这样做了,因为 HDFS 上存在磁盘空间限制,这限制了我们的备份和存储策略,所以我们讨论了使用 S3N 作为 HDFS 的替代品,看起来这是一个非常标准的操作。

你需要在 hadoop-site.xml 或 hdfs-site.xml 中添加以下属性:

<property>
  <name>fs.default.name</name>
  <value>s3://BUCKET</value>
</property>

<property>
  <name>fs.s3.awsAccessKeyId</name>
  <value>ID</value>
</property>

<property>
  <name>fs.s3.awsSecretAccessKey</name>
  <value>SECRET</value>
</property>

您可以找到更多关于设置here 的详细信息。 需要注意的一件有趣的事情是,由于在这种情况下数据存储在 Amazon S3 上,因此需要获取它,因为它不再是本地的,但对性能的影响似乎并不像我最初担心的那样显着。

我没有尝试过但您绝对应该寻找 HDFS 的替代品的东西是 QFSfron Quantcast,我听说过一些好消息,而且基准测试似乎使它比 HDFS 更快。

【讨论】:

  • 感谢您的链接。我实际上是想了解 Hadoop 和 S3 之间的桥接的实现,即 s3:// 命名空间的处理程序。 XML 配置必须触发使用某种接口实现,以便 S3 从 HDFS 和 S3 切换,对吧?
  • s3 在处理 HDFS 用例时速度很慢。 JuiceFS 不是更好的选择吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 2019-12-26
相关资源
最近更新 更多