【发布时间】:2017-12-18 12:09:59
【问题描述】:
我正在做一个项目,我收到大约 10 个文件,每个文件大小为 200GB。我的项目要求是从每个文件中提取数据并与其他文件进行连接并提取数据。
例如,我有文件 1.txt,其中有帐户 ID,我有文件 2.txt,其中有帐户 ID 和帐户名称。根据第一个文件中的帐户 ID,我需要从第二个文件中提取数据。
这样我需要对 10 个文件中的每一个执行操作并创建最终输出文件。
我目前正在 Java 中执行此操作,这确实需要时间。大约需要 4 到 5 个小时。
我可以通过任何改变来提高我的表现吗?是否有任何技术或工具或框架可以与 java 集成并提高我的性能?
我使用了以下方法。
1) Apache Drill- 我正在执行连接查询 结果:Drill 抛出 Drillbit 异常,因为文件太大。
2) Apache Beam - 我正在使用并行处理对文件进行连接。 结果:它在按功能分组时给了我内存不足异常。
我正在从 hadoop 中读取这些数据。
【问题讨论】:
-
为什么要用Java下载数据进行本地处理?你能用 Hive 之类的工具直接处理数据吗?
-
您是否增加了梁执行器或钻头堆大小? Hive、Spark 或 Pig 都是大多数 hadoop 发行版中典型的优秀工具
-
请附上您的 Beam 代码并说明您使用的是哪个版本的 Beam SDK 和哪个运行器。
-
@cricket_007 是的,我将钻头堆增加到 7GB 并尝试了但仍然没有运气。 :( 我将梁执行器计数为 2000,这是最大值,但它仍然无法工作。
-
第一件事 :: 我能不能用 Beam 或 Drill 处理这么多的数据.. 这些工具是否受支持。 ?
标签: java hadoop bigdata apache-beam