Hadoop 与 Ceph 文件系统的比较

已完成

我们现在概述1 HDFS 与 Ceph 之间的主要差异。

  • 体系结构差异:HDFS 遵循并置计算和存储的模型。 HDFS DataNode 通常 MapReduce 节点共存,整个模型背后的关键理念是将计算引入数据。 Ceph 设计为独立的存储服务,不过在 Ceph 中存储数据的 OSD 可能与 MapReduce 节点并存。
  • 兼容性:HDFS 客户端必须使用一个 API 进行实现。 HDFS 并未设计成为 POSIX 文件系统,并且不支持某些 POSIX 语义(例如,打开现有文件进行写入)。 存在允许装载 HDFS 的解决方法,如 FUSE 驱动程序。 但是,如果尚不支持该解决方法,则大多数应用程序必须使用 HDFS 客户端重新实现。 另一方面,Ceph 公开了多个 API (包括 POSIX 兼容 Ceph FS 驱动程序),这使得与 HDFS 相比,与现有应用程序集成要容易得多。
  • 数据布局:HDFS NameNode 将块的物理位置公开给客户端应用程序,这些应用程序可能会使用此信息来潜在地改进数据访问的位置。 Ceph 与之类似,在进行数据请求时,元数据服务器会始终向客户端公开数据对象的位置。
  • 对小文件的支持:HDFS 缺少对小文件的支持,因为它针对较大块大小(默认情况为 64MB)进行了优化。 在 Ceph 中,条带宽度通常为 KB 级,这使得它比 HDFS 更通用。
  • 并发写入:HDFS 是一次写入模式,一次只允许将单个文件写入文件。 Ceph 支持多个并发编写器,因此在这两个文件系统中更加灵活。
  • 一致性模型:HDFS 通过限制对单个客户端的写入并且不允许进行任何文件更新来保证一致性,而 Ceph 可以保证顺序一致性,除非在涉及一些 OSD 的网络分区的极少数情况下。
  • 缓存:HDFS 通过流式传输模型支持在客户端预读缓存。 仅当 MDS 向客户端提供了租约时(当客户端可以对文件进行独占访问时),Ceph 中的客户端才能拥有读取缓存和写入缓冲区。 当多个客户端在 Ceph 中访问同一个文件时,这些租约会撤销,强制 I/O 进行同步,以便管理一致性。
  • 容错:HDFS 是为实现容错而构建的,内置了对块级复制的支持,并且可感知机架,但是 Namenode 是 HDFS 中的单一故障点。 另一方面,Ceph 非常可靠,因为它使用复杂的对等协议来确保具有强大的容错能力。 Ceph 中的故障恢复速度也非常快,因为存在可进行重播以便使节点了解最新状态的写入日志。

参考

  1. Maltzahn, C., Molina-Estolano, E., Khurana, A., Nelson, A. J., Brandt, S. A., & Weil, S.(2010). Ceph as a scalable alternative to the Hadoop Distributed File System The USENIX Magazine vol.35