Hadoop:增加 block 大小时性能下降?

标签 hadoop hdfs

有没有人发现在 Hadoop 中增加 block 大小时性能会下降?我们正在建立一个集群,我们预计每天需要存储大量数据(100 GB),所以我的想法是我们可以大量增加 block 大小。但是,有人担心它是否会减慢将要运行的 MapReduce 作业的速度。我能看到它发生的唯一方式是,如果 block 的数量少于可以在集群上运行的任务的数量。

有人有关于这个主题的任何其他信息吗?

最佳答案

这里有几点需要考虑:

  • 不推荐太小的文件 - 文件系统元数据保存在名称节点内存中 - 文件数量的硬件限制。
  • HDFS 上的默认 block 大小为 64MB,但在生产服务器中最常见的情况是 128MB。
  • HDFS block 默认情况下很大,与查找时间相比, block 的传输时间更长 - 因此传输时间 由许多 block 组成的大文件在磁盘传输时运行。
  • MapReduce 任务一次在一个 block 上运行,因此如果任务太少(少于集群中的节点),您的作业可能会很慢。
  • 将 block 大小设置为接近 HDFS 上文件的近似大小并不是一个好主意,因为它会增加错误数据的可能性。假设您有 1 个 1GB 的文件,您的 block 大小也是 1GB。还假设您的云上的复制因子为 3(默认值或至少最常见)。这意味着您将在 3 台机器上将整个文件作为一个 block 。这与在 3 台机器上只复制一些文件 block 不同。
  • 如果(输入处理文件的) block 数少于您可以在您的环境中并发运行的任务数——这很好——这意味着您正在以最大并行度处理所有输入数据,并且仍然有空闲资源。

关于Hadoop:增加 block 大小时性能下降?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249430/

相关文章:

hadoop - 使用 Kafka 加载 HDFS 有哪些选项?

hadoop - Sqoop 导入将 TINYINT 转换为 BOOLEAN

linux - 如何在 HDFS 中存储 shell 脚本的日志文件

hadoop - Hadoop中HDFS的Pig输入路径

hadoop - Hadoop分区。您如何有效地设计Hive/Impala表?

hadoop - 容器运行超出物理内存。 Hadoop 流 python MR

hadoop - HDFS放置:即使文件或目录在那里,也没有这样的文件或目录

csv - 使用字符串数组在 Hive 表上加载 CSV 文件

sql - 如何使用 Hive 以分钟为单位获取日期差异

hadoop - 通过将分区目录复制到仓库中来复制 Hive 管理的表