Java 通过几个步骤写入HDFS文件的效率如何?

Java 通过几个步骤写入HDFS文件的效率如何?,java,scala,hadoop,apache-spark,hdfs,Java,Scala,Hadoop,Apache Spark,Hdfs,我知道HDFS块大小是64 MB。但假设我创建了一个新的HDFS文件,并继续向其中写入数据,但同时只写入了4KB的数据。那会很低效吗?到最后,我的文件大小可能会达到1GB,但一点一点地写入数据是否会导致写入此类文件的效率低下?我的意思是,在写入文件之前缓冲我的数据很重要吗。例如,在本例中,我可以不断将数据累积到缓冲区中,直到数据达到64 MB大小,然后将其写入HDFS文件,并在清除该缓冲区后重复该过程。首先,HDFS blocksize由您决定,默认值是可配置的,当你把一个给定的文件放到HDFS

我知道HDFS块大小是64 MB。但假设我创建了一个新的HDFS文件,并继续向其中写入数据,但同时只写入了4KB的数据。那会很低效吗?到最后,我的文件大小可能会达到1GB,但一点一点地写入数据是否会导致写入此类文件的效率低下?我的意思是,在写入文件之前缓冲我的数据很重要吗。例如,在本例中,我可以不断将数据累积到缓冲区中,直到数据达到64 MB大小,然后将其写入HDFS文件,并在清除该缓冲区后重复该过程。

首先,HDFS blocksize由您决定,默认值是可配置的,当你把一个给定的文件放到HDFS中时,你可以为它设置一个不同的块大小

如果您想将数据放入HDFS时,数据不在手边,那么请使用Flume,将源设置为数据生成器,将接收器设置为HDFS上的文件,并让该工具完成其工作,而无需费劲处理细节。如果数据在数据库中,也可以使用Sqoop


否则,如果您正在进行实验,则进行性能测试,并检查哪种方法更好,这在很大程度上取决于您的数据是如何生成的以及您如何使用哪个库。

您使用哪种方法来写入文件?是的,使用缓冲区(或其他任何方法)以“块”的形式写入。我正在使用apache的库来写入HDFS。我感兴趣的是…,在写入HDFS之前,您正在使用哪个库来检查以mb为单位的缓冲区内存。什么文件类型(avro、orc或其他)?如果是这样的话,我认为这是正确的方法。我见过有人合并小文件,直到它达到近似的块大小(他们称之为标准化),但在你的情况下,如果它成功了,那么这是正确的@皮特法:我想他不是在问数据摄取的问题。建议的水槽或sqoop方法可能是正确的。