我正在寻找以下问题陈述的解决方案(在 HADOOP 2.2+ 版本中)。
问题陈述:
我们每天需要处理超过 300 万个文件。我们是 有兴趣捕获文件名以及文件中的数据。 如何以最有效的方式处理这些数据?
我知道“CombineFileInputFormat”、“MultiFileInputSplit”和“HAR File Layout”,但我不确定哪一个在性能方面会更好。
如果您知道还有其他更好的选择,请分享。
“处理”或“捕获”是什么意思?由于这可能意味着所提供的上下文中的几乎任何内容,因此我将故意假设删除文件将满足您的要求(即使可能不会),以便我可以指出当提供的信息不足时会发生什么.
因此,基于这个目的,为了回答您的问题,处理所有数据文件的最有效方法是删除所有数据文件。这将“捕获”您的所有文件,包括文件名和数据。 使用hadoop,那就是:
hadoop fs -rm -r /PATH/TO/FILES/TO/DELETE
但是,根据文件的存储位置和方式,您可能需要使用不同的方法来删除文件,例如:
TRUNCATE TABLE [tableName]
(如果您使用的是 SQL 数据库)
或:
rm -rf /path/to/files
(如果它位于本地 Linux 文件系统上)
如果这个答案不能解决您当前的问题,那么请更具体地说明您想要做什么,因为您的问题不明确。欢迎来到堆栈溢出。我们想提供帮助,但我们无法读懂您的想法。
“过程”是什么意思? “过程”这个词可以有任何含义。尝试连接文件?根据某些规则连接某些文件?计算聚合?过滤掉某些数据?加入数据?执行这些操作的组合?是否需要对文件进行重复数据删除或验证?该操作是批处理还是流处理?如果您正在考虑使用 Hadoop,我希望您不要处理流操作。
文件类型有哪些,数据是什么? 它们是文本文件吗?二进制文件?镶木地板文件? XML 文件? JSON? CSV 文件?它们被加密了吗?它们可能包含垃圾数据吗?如果它们都只是符号链接怎么办?如果不清楚文件/数据的组成,我们不知道如何比执行压缩或删除等通用操作更具体地“处理”文件。您对“HAR”规范的评论表明该数据与监控有关。但是,您询问这是否是要使用的正确文件格式,但没有详细说明数据是什么或需要对它们执行什么操作,并且没有任何文件格式可以解决数据中所有可能的问题。最有效的方式。 (否则,就只有一种文件格式可供任何人使用。)
“捕获”是什么意思? 数据需要保存到数据库中吗? SQL 数据库?数据库?像 DynamoDB 这样的 NoSQL 数据库? “捕获”的数据是否需要映射到另一个文件中?文件是否需要转换为 JSON 等结构化格式?操作是否需要输出像parquet文件这样的特定数据?根据操作的内存要求,使用 Spark 或 PySpark 而不是 Hadoop 可能会获得 100 倍的加速。但我们需要更多信息才能更准确地提出此类建议。确保为正确的目的使用正确的技术。
什么是“高效”? “高效”是否意味着算法运行时间?这取决于需要计算的实际过程。或者“高效”意味着内存或存储?再说一遍,这还不清楚。
此外,将来我们还需要更多关于细节的上下文。例如,如果提到 Hadoop 的特定版本,我们需要知道 Hadoop 的特定版本如何或为何相关。据我们所知,Hadoop 可能是一个完全不适合处理这么多文件的工具,因为 Spark 或 Flink 可能更合适。或者也许是 Elasticsearch。或者也许是图形技术。或者也许是带有 Lambda 的 Amazon Kinesis。我们需要更多信息来提供具体建议。