草庐IT

小文件

全部标签

hadoop - HDFS(序列文件)中的单个大文件或多个小文件?

目前我正在使用SequenceFile来压缩我们现有的HDFS数据。现在我有两个选项可以将这个序列文件存储为单个大文件,这意味着所有记录都转到这个文件。多个小文件,每个文件的大小与HDFSblock大小(128MB)完全匹配众所周知,HDFS文件存储为block,每个block都到一个映射器。所以我认为当MR处理序列文件时没有什么不同。我知道选项二的唯一缺点是名称节点需要更多开销来维护这些文件,而选项一只有一个文件。我对这两个选项感到困惑,因为我看到太多文章推荐了尽可能使您的HDFS文件大小与block大小匹配。尽可能将小文件合并为一个大文件。任何人都可以指出正确的方法吗?哪个更好?这

hadoop - 大量小文件Hadoop

一些机器的参数是通过网络服务测量并上传到HDFS的。每次测量的参数值都保存在一个文件中,其中一次测量平均有1000个值。问题是-有大量文件。只有一定数量的文件用于MapReduce作业(例如,上个月的测量值)。因此我无法将它们全部合并到一个大的序列文件中,因为不同的时间需要不同的文件。我知道拥有大量小文件是不好的,因为NameNode包含HDFS上所有这些文件的路径(并将其保存在内存中),另一方面,每个小文件都会产生一个Mapper创作。如何避免这个问题? 最佳答案 迟到的答案:您可以使用SeaweedFShttps://githu

apache-spark - Spark Streaming 创建许多小文件

我已经实现了一个SparkStreaming作业,它将过去6个月收到的事件流式传输到HDFS。它在HDFS中创建许多小文件,我希望它们的每个文件大小为HDFS的128MB(block大小)。如果我使用追加模式,所有数据都将写入一个parquet文件。如何配置Spark为每128MB数据创建一个新的HDFSparquet文件? 最佳答案 Spark会在写入之前在对象上写入与分区一样多的文件。这可能真的很低效。要减少部分文件的总数,试试这个,它会检查对象的总字节大小并将其重新调整为+1最佳大小。importorg.apache.spar

hadoop - 一个小文件是如何存储在HDFS中的

在hadoop权威指南中:以128MB的block大小存储的1MB文件使用1MB的磁盘空间,而不是128MB。这是什么意思?它是在一个128MB的block中使用1MB的大小,还是使用了1MB并且剩余的127MB被其他文件免费占用? 最佳答案 这通常是对HDFS的误解——block大小更多的是关于单个文件如何拆分/分区,而不是关于文件系统的某些保留部分。在这些方案的背后,每个block都作为普通文件(以及相关的校验和)存储在DataNodes底层文件系统中。如果您查看磁盘上的数据节点文件夹,您应该能够找到该文件(如果您知道文件的bl

hadoop - 优化 hadoop 放置大量小文件

我必须在我的集群上加载大量文件(+/-500000),这需要很长时间。每个文件都是gzip格式,占用80Mb的空间。目前我使用while循环通过put加载我的文件,但您可能有最佳解决方案...感谢您的帮助。 最佳答案 按照您的解释方式很难理解问题。HDFS支持不拆分的gzip压缩。由于您的文件每个约为80MB,因此拆分对您来说不是大问题,只需确保使用128MB或更大的block大小即可。关于文件上传,为什么不直接用-put命令上传整个目录呢?hadoopfs-putlocal/path/to/dirpath/in/hdfs会成功的。

performance - 如何强制 PigStorage 输出几个大文件而不是数千个小文件?

我在我的pig脚本中使用了这些行:setdefault_parallel20;requests=LOAD‘/user/me/todayslogs.gz’USINGcustomParser;intermediate_results=some_data=FOREACHintermediate_resultsGENERATEday,request_id,result;STOREsome_dataINTO'/user/me/output_data'USINGPigStorage(',');“/user/me/todayslogs.gz”包含数千个gzip文件,每个文件大小为200MB。当脚本完

hadoop - Flume 创建小文件

我正在尝试使用水槽从本地系统将我的文件移动到hdfs中,但是当我运行我的水槽时,它会创建许多小文件。我的原始文件大小为154-500Kb,但在我的HDFS中它创建了许多大小为4-5kb的文件。我搜索并了解到更改rollSize和rollCount会起作用我增加了值但仍然发生同样的问题。我也遇到了以下错误。错误:ERRORhdfs.BucketWriter:Hitmaxconsecutiveunder-replicationrotations(30);willnotcontinuerollingfilesunderthispathduetounder-replication因为我在集群中

file - 多个小文件作为 map reduce 的输入

我有很多小文件,比如说20000多个。我想节省花在映射器初始化上的时间,那么是否可以只使用500个映射器,每个处理40个小文件作为其输入?如果可能的话,我需要有关如何实现这种输入格式的指导,谢谢!顺便说一句,我知道我应该合并这些小文件,这一步也是需要的。 最佳答案 可以使用CombineFileInputFormat。它在old中和new先生API。这是一个不错的blogentry关于如何使用它。 关于file-多个小文件作为mapreduce的输入,我们在StackOverflow上找

hadoop - Hive 为 HDFS 中的每个插入创建多个小文件

下面已经实现了KafkaProducer使用SparkStreaming从Twitter中提取数据。KafkaConsumer将数据提取到Hive外部表(在HDFS上)。虽然到目前为止一切正常。我只面临一个问题,当我的应用程序将数据插入Hive表时,它创建了一个小文件,每个文件的每一行数据。下面是代码//Definewhichtopicstoreadfromvaltopic="topic_twitter"valgroupId="group-1"valconsumer=KafkaConsumer(topic,groupId,"localhost:2181")//CreateSparkCo

java - 小文件的 Spark 重新分区数据

我是Spark的新手,我使用的集群主要用于并行化目的。我有一个100MB的文件,其中的每一行都经过某种算法处理,这是一个相当繁重且漫长的处理过程。我想使用10节点集群并并行处理。我知道block大小超过100MB,我尝试重新分区textFile。如果我理解得很好,这个repartition方法增加了分区的数量:JavaRDDinput=sc.textFile(args[0]);input.repartition(10);问题是当我部署到集群时,只有一个节点在有效处理。我怎样才能设法并行处理文件?更新1:这是我的spark-submit命令:/usr/bin/spark-submit--