【发布时间】:2016-12-19 15:44:07
【问题描述】:
我已经为 distcp 苦苦挣扎了好几天,我发誓我已经用谷歌搜索了足够多的东西。这是我的用例:
用例
我在某个位置有一个主文件夹,比如 /hdfs/root,里面有很多子目录(深度不固定)和文件。
数量:200,000 个文件 ~= 30 GO
我只需要为客户端复制一个子集,/hdfs/root 到另一个位置,比如 /hdfs/dest 该子集由可随时间更新的绝对路径列表定义。
数量:50,000 个文件 ~= 5 GO
您知道我不能使用简单的hdfs dfs -cp /hdfs/root /hdfs dest,因为它没有经过优化,它会占用每个文件,并且它没有-update 模式。
解决方案概念
我最终以两种方式使用 hadoop distcp:
Algo 1 (simplified):
# I start up to N distcp jobs in parallel for each subdir, with N=MAX_PROC (~30)
foreach subdir in mylist:
# mylist = /hdfs/root/dirX/file1 /hdfs/root/dirX/file2 ...
mylist = buildList(subdirs)
hadoop distcp -i -pct -update mylist /hdfs/dest/subdir &
和
Algo 2
# I start one distcp that has a blacklist
blacklist = buildBlackList()
hadoop distcp -numListstatusThread 10 -filters blacklist -pct -update /hdfs/root /hdfs/dest
Algo 2 甚至没有启动,似乎在源和黑名单之间建立差异对他来说太难了,所以我使用了 Algo 1,它可以工作。
OOZIE 工作流程
知道我需要在 Oozie 工作流程中安排所有工作流程。 我已将算法 2 置于 shell 操作中,因为我有很多 distcp 命令,而且我不掌握 oozie 中的递归或循环。
一旦开始,一段时间后,我收到以下错误: 容器运行超出物理内存限制。当前使用情况:已使用 17.2 GB 的 16 GB 物理内存
好吧,我要添加更多内存:
<configuration>
<property>
<name>oozie.launcher.mapreduce.map.memory.mb</name>
<value>32768</value>
</property>
<property>
<name>oozie.launcher.mapreduce.map.java.opts</name>
<value>-Xmx512m</value>
</property>
</configuration>
我仍然得到:容器超出物理内存限制。当前使用情况:已使用 32.8 GB 的 32 GB 物理内存但该作业的寿命是前一个作业的两倍。
我的集群上的 RAM 不是无限的,所以我不能更进一步。这是我的假设:
- distcp 作业不释放内存(JVM 垃圾收集器?)
- Oozie 将所有 distcp 作业的添加视为当前内存使用情况,这很愚蠢
- 这不是正确的做法(我知道,但仍然如此)
另外,关于内存管理,我有很多不明白的地方,很模糊(yarn、oozie、jvm、mapreduce)。
在谷歌搜索时,我注意到很少有人在谈论真正的 distcp 用例,这篇帖子已有 4 天了:https://community.hortonworks.com/articles/71775/managing-hadoop-dr-with-distcp-and-snapshots.html 并解释了我无法在我的案例中使用的快照用法。
我还听说http://atlas.incubator.apache.org 最终会通过“标记”文件并授予特定用户访问权限来解决我的问题,这样我们就可以避免复制到某个位置。我的管理团队正在处理它,但我们不会将它投入生产。
我很绝望。帮帮我。
【问题讨论】:
-
旁注:请注意
oozie.launcher.mapreduce.map.java.opts对 Shell 操作绝对没有影响... -
你说你的“algo 2”在边缘节点上运行它时不起作用,“无限”访问服务器 RAM,那么你为什么还要尝试使用运行 YARN 的 Oozie具有有限资源的容器?!?
-
现在我想起来了 - 法国人 Horton 发行版,在路线图中使用 Oozie、Atlas,对 DistCp 进行 DRP 的神经病依赖......你在 Nanterre 工作吗?!?
-
@SamsonScharfrichter 感谢您的反馈,我在图卢兹工作 :)
标签: hadoop jvm oozie hortonworks-data-platform distcp