为Hadoop分布式缓存将小文件合并为大文件?

为Hadoop分布式缓存将小文件合并为大文件?,hadoop,hdfs,Hadoop,Hdfs,我有很多小文件(大小约1MB)需要分发。众所周知,Hadoop和HDF更喜欢大文件。但我不知道这是否也可以应用于分布式缓存,因为分布式文件存储在本地机器上 如果需要合并它们,在HDFS上以编程方式合并文件的最佳方法是什么 还有一个问题:使用symlink有什么好处?谢谢您可以创建所有小文件的存档(tar或zip),并将其添加到分布式缓存中,如下所示: DistributedCache.addCacheArchive(new URI("/myapp/myzip.zip", job); publi

我有很多小文件(大小约1MB)需要分发。众所周知,Hadoop和HDF更喜欢大文件。但我不知道这是否也可以应用于分布式缓存,因为分布式文件存储在本地机器上

如果需要合并它们,在HDFS上以编程方式合并文件的最佳方法是什么

还有一个问题:使用symlink有什么好处?谢谢

您可以创建所有小文件的存档(tar或zip),并将其添加到分布式缓存中,如下所示:

DistributedCache.addCacheArchive(new URI("/myapp/myzip.zip", job);
public void configure(JobConf job) {
         // Get the cached archives/files
         File f = new File("./myzip.zip/some/file/in/zip.txt");
       }
并在映射器/还原器中获取文件,如下所示:

DistributedCache.addCacheArchive(new URI("/myapp/myzip.zip", job);
public void configure(JobConf job) {
         // Get the cached archives/files
         File f = new File("./myzip.zip/some/file/in/zip.txt");
       }
阅读更多

您可以创建所有小文件的存档(tar或zip),并将其添加到分布式缓存中,如下所示:

DistributedCache.addCacheArchive(new URI("/myapp/myzip.zip", job);
public void configure(JobConf job) {
         // Get the cached archives/files
         File f = new File("./myzip.zip/some/file/in/zip.txt");
       }
并在映射器/还原器中获取文件,如下所示:

DistributedCache.addCacheArchive(new URI("/myapp/myzip.zip", job);
public void configure(JobConf job) {
         // Get the cached archives/files
         File f = new File("./myzip.zip/some/file/in/zip.txt");
       }

阅读更多内容

这里是Cloudera关于小文件问题的评论。

这里是Cloudera关于小文件问题的评论。

谢谢。我试试看。你对这次演出有什么想法吗?会增加吗?谢谢。我试试看。你对这次演出有什么想法吗?会增加吗?