我想做一个复制文本文件从外部来源到hdfs。假设我可以根据文件的大小合并和拆分文件,那么文本文件的大小应该是多少,以获得最佳自定义Map,从而降低作业性能。尺寸重要吗?
31moq8wy1#
hdfs被设计成支持非常大的文件而不是小的文件。与hdfs兼容的应用程序是那些处理大型数据集的应用程序。这些应用程序只写一次数据,但它们读取一次或多次数据,并要求以流速度满足这些读取要求。hdfs支持文件的一次写多读语义,在hdfs体系结构中有块的概念。hdfs使用的典型块大小是64 mb。当我们把一个大文件放入hdfs时,它会被切碎成64MB的块(基于默认的块配置),假设你有一个1gb的文件,你想把这个文件放到hdfs中,然后将有1gb/64mb=16个分割/块,这些块将分布在数据节点上。分割文件的目标是并行处理和数据故障转移。根据集群配置,这些块/区块将驻留在不同的数据节点上。Map绘制人员如何分配Map器的数量由mapreduce作业中数据的拆分数量决定。在典型的输入格式中,它与文件数量和文件大小成正比。假设您的hdfs块配置配置为64mb(默认大小),并且您有一个大小为100mb的文件,那么将有2个拆分,它将占用2个块,然后将根据这些块分配2个Map器,但是假设您有2个大小为30mb的文件(每个文件),那么每个文件将占用一个块,并且将分配Map器基于此。因此,您不需要拆分大文件,但是如果您处理的是非常小的文件,那么合并它们是值得的。这个链接将有助于理解小文件的问题。请参考下面的链接,以获得更多有关hdfs设计的详细信息。http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html
1条答案
按热度按时间31moq8wy1#
hdfs被设计成支持非常大的文件而不是小的文件。与hdfs兼容的应用程序是那些处理大型数据集的应用程序。这些应用程序只写一次数据,但它们读取一次或多次数据,并要求以流速度满足这些读取要求。hdfs支持文件的一次写多读语义,在hdfs体系结构中有块的概念。hdfs使用的典型块大小是64 mb。当我们把一个大文件放入hdfs时,它会被切碎成64MB的块(基于默认的块配置),假设你有一个1gb的文件,你想把这个文件放到hdfs中,然后将有1gb/64mb=16个分割/块,这些块将分布在数据节点上。分割文件的目标是并行处理和数据故障转移。根据集群配置,这些块/区块将驻留在不同的数据节点上。
Map绘制人员如何分配
Map器的数量由mapreduce作业中数据的拆分数量决定。在典型的输入格式中,它与文件数量和文件大小成正比。假设您的hdfs块配置配置为64mb(默认大小),并且您有一个大小为100mb的文件,那么将有2个拆分,它将占用2个块,然后将根据这些块分配2个Map器,但是假设您有2个大小为30mb的文件(每个文件),那么每个文件将占用一个块,并且将分配Map器基于此。
因此,您不需要拆分大文件,但是如果您处理的是非常小的文件,那么合并它们是值得的。
这个链接将有助于理解小文件的问题。
请参考下面的链接,以获得更多有关hdfs设计的详细信息。
http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html