我想将一些包含数百万个小文件的大型tar.gz归档文件的内容提取到HDFS。在数据上传之后,应该可以通过路径访问归档中的单个文件,并列出它们。最直接的解决方案是编写一个小脚本,将这些归档文件提取到某个HDFS基本文件夹中。然而,由于众所周知HDFS不能很好地处理小文件,我想知道如何改进这个解决方案。以下是我目前发现的潜在方法:
序列文件- <
- Hadoop档案/gh>
- HBase
理想情况下,我希望解决方案与Spark配合良好,这意味着如果数据被直接提取到HDFS,那么使用Spark访问数据应该不会比以前更复杂。在这个领域你有什么建议和经验?
您可以将文件降落到着陆区,然后将它们处理成有用的东西。
zcat <infile> | hdfs dfs -put - /LandingData/
然后在"着陆"的数据之上构建一个表。使用Hive或Spark
然后用Parquet或ORC格式写一个新表(在新文件夹中)。
当你需要在数据上运行分析时,使用这个新表,它将表现良好,并消除小文件问题。这将使小文件问题保持在一次加载。
序列文件是处理hadoop小文件问题的好方法。