2014-11-24 70 views
0

我正在动态评估一些数据库模式。由于有大量的模式,在一台PC上评估它们是不现实的。我想通过评估一个工作节点上的每个模式来使用Spark来完成这项工作。评估程序将如此。 (1)为每个模式创建测试负载,并将所有测试负载存储在Hadoop文件系统或工作节点的本地文件系统中。测试加载只是在.SQL文件中插入和选择语句,但是大小很大。 (2)从文件系统读取测试负载,并将语句提供给mysql以使用JDBC执行。我会记录在同一时间花费的时间。Spark如何在一个工作节点上执行一个地图动作?

我们可以将评估过程作为“e”函数来处理,它将数据库模式作为输入,并输出评估的时间消耗。我们可以将该函数映射到模式数组,以获得一系列评估时间。

有没有办法在Spark中实现这一点?由于我必须在一个工作节点上运行该功能,因此问题是:是否有办法在一个工作节点上运行每个映射操作?

谢谢大家!

回答

0

在Spark中没有简单的方法。更重要的是,在Spark中进行此评估没有意义。你需要的东西就像分布式业务流程一样。你有以下选择:

  1. 使用Spark为此。您可以在Yarn上启动它,并在每个节点上指定可用于Yarn的最大内存量,这将阻止它为每个节点调度多个执行容器。或者你可以像锁定某个信号量或文件系统上的一个文件一样进行破解,以防止除第一个容器外的所有其他容器执行。但是在任何一种情况下,使用Spark都不是最好的选择
  2. 为此写入自定义代码。很简单 - 编写shell/python/perl脚本来执行特定模式所需的代码。接受模式名称作为参数。在主应用程序中,通过创建ssh会话到远程计算机并等待它完成,获取计算机的数量和计划远程执行
  3. 编写一些更复杂的代码。在ACID DBMS中,创建一个包含要评估的模式列表的表。创建工作,将连接到数据库,得到该文件的模式之一,其标记为执行(更新元数据表),然后执行你的测试逻辑和存储测试结果存入数据库

在我认为选项2和3更容易实施并且更容易控制其结果。但是,如果实际上您需要每天运行此评估,并且这是您系统的某种路由任务,那么我会将其编码为方法1与执行的火花的组合,方法3与ACID DBMS中的集中元数据组合

+0

感谢你真是太棒了!经过一段时间的思考之后,我也认为它在某种意义上不是一个经典的地图缩减工作。我遇到的主要问题是用一台PC评估这些模式将花费15天时间,这是不能接受的。我需要一种方法来缩短评估时间。我想也许2是最简单的方法。谢谢! – 2014-11-24 15:44:18

相关问题