2016-08-18 41 views
0

我有一种情况,我必须将数据/文件从PROD复制到UAT(hadoop群集)。为此,我现在使用'distcp'。但它是永恒的。由于distcp在底层使用map-reduce,有没有办法使用spark来使进程更快?就像我们可以将配置单元执行引擎设置为'TEZ'(替换map-reduce),我们可以设置执行引擎为distcp启动吗?还是有任何其他'spark'方式来跨群集复制数据,这可能甚至不打扰distcp?使用火花在hadoop群集之间复制数据

这里是我的第二个问题(假设我们可以将distcp执行引擎设置为spark来代替map-reduce,否则请不要麻烦回答这个问题): - 据我所知,Spark比map-减少的主要原因是它将数据存储在可能需要处理的存储器中,以便它不必从磁盘一直加载数据。在这里,我们正在跨群集复制数据,因此不需要多次处理一个文件(或块或分割),因为每个文件都会上传到内存中,然后通过网络发送,并复制到目标群集磁盘,该文件的故事结束。那么,如果不使用主要功能,Spark如何让这个过程更快?

+0

没有尝试这个,但也许你可以实际使用Hive来读写(创建表格作为select)数据并在Tez或Spark上运行Hive。关于第二部分Spark的优势不仅在于使用内存,而且还有更好的执行阶段调度,所以它的顺序比MR –

回答

1

Spark并非真正用于Hadoop集群之间的数据移动。您可能需要使用"-m"选项来查看distcp作业的其他映射器。

+0

从: https://hadoop.apache.org/docs/r2.7.2/hadoop-distcp/DistCp .html 我明白它指定最大可以同时执行任何地图任务。那么是否有任何方法可以最大限度地知道我的集群正在同时执行多少个数据(假设有25个工作分组)?我可以在多大程度上增加这个数字而不会妨碍其他流程? 我有12个节点PROD和6个节点UAT,都有大约250 GB的物理内存和大约45 TB的磁盘空间。 – Mrinal

+0

可能需要一些测试来确定最佳设置。 –

1

你的上块状交簇IO瓶颈通常是

  1. 簇之间带宽
  2. 读取带宽源集群
  3. 写入带宽到目的地簇关闭(并用3×复制,写操作取磁盘和交换机的带宽)
  4. 工作分配的空间(即执行者的数量,任务)

通常在长距离上传它的长途网络是瓶颈:你不需要那么多的工作人员来淹没网络。

有两个雅虎之间的distcp操作着名的故事。集群确实可以做到这一点:Hadoop运营团队对distcp发展如此之快感到满意,而网络运营团队则惊慌失措,他们的核心服务由于两个站点之间的流量而受到某种程度的损害。我相信这个事件是distcp现在有-bandwidth选项的原因:)

distcp可能存在限制,它可能在任务设置和执行中:决定要提前复制哪些文件并且没有如果某些文件复制速度很快,但其他文件却很优秀,那么很多(任何?)情报在重新安排工作。

Distcp只是预先建立了列表,并将它交给特殊的distcp映射器,每个distcp映射器都读取它的文件列表并复制它。

有人可以尝试做一个distcp的spark版本;如果有人想要更好地进行调度,那么这可能是一个有趣的项目,依靠Spark向现有执行者推出新工作非常有效的事实:Spark版本可以动态地推出工作,而不是事先列出所有事情。事实上,它仍然可以在枚举要复制的文件时启动复制操作,从而缩短启动时间。即便如此:跨集群带宽通常会成为瓶颈。