有人告诉我,任何配置单元作业都将消耗32gb内存或集群中的大量内存,而执行琐碎的行插入将导致创建许多小文件。这是真的吗?使用配置单元插入少量数据本身就是错误的吗?
of1yzvn41#
小文件可能是hadoop本身的一个问题。在配置单元中插入单独的行时,每一行都将保存到不同的文件中。每次插入操作都需要几秒钟。您可以在下面的示例中看到。我在配置单元表中插入了3行,它创建了3个2字节的文件。您应该避免在配置单元中插入少量数据。它可能会导致诸如namenode内存不足等问题,因为文件的元数据将存储在内存中。
create table testing (t int); insert into table testing values (1); insert into table testing values (2); insert into table testing values (3); dfs -ls /apps/hive/warehouse/testing; -rwxrwxrwx 1 root hdfs 2 2015-12-08 23:59 /apps/hive/warehouse/testing/000000_0 -rwxrwxrwx 1 root hdfs 2 2015-12-08 23:59 /apps/hive/warehouse/testing/000000_0_copy_1 -rwxrwxrwx 1 root hdfs 2 2015-12-08 23:59 /apps/hive/warehouse/testing/000000_0_copy_2
1条答案
按热度按时间of1yzvn41#
小文件可能是hadoop本身的一个问题。在配置单元中插入单独的行时,每一行都将保存到不同的文件中。每次插入操作都需要几秒钟。您可以在下面的示例中看到。我在配置单元表中插入了3行,它创建了3个2字节的文件。您应该避免在配置单元中插入少量数据。它可能会导致诸如namenode内存不足等问题,因为文件的元数据将存储在内存中。