现在想实现这样一个逻辑:单机上,生成一个随机数,对mysql做查询,如果查询到了,则进一步到spark集群上查询更多信息。目前程序写出来了,可以提交到集群运行,但是想想好像不对:提交到集群后,岂不是各个节点会分布式地生成各自的随机数、然后各节点各自查询mysql?我想实现的逻辑该怎么做呢?
解决方案 »
- Pandora云端战略的第一个对手 --> dashboard
- 求大神解答?openstack 安装问题
- Cloud Foundry参赛博文——Cloudfoundry自动化部署工具Bosh的CPI研究分析
- 小白请教大神一个问题
- 安装单机Hadoop时格式化HDFS出现问题
- spark 是否支持 hadoop cdh3u4
- 有人用过 AWS PHP SDK 的 waiter 吗?
- Spark 定时任务!!在线等。 我用了定时器然后报错了
- CF login登陆报错 Invalid authentication token.
- 怎么限制CPU收率不超过50%
- nginx的 limit_req_zone问题
- hive数据能够加载,但是select语句卡顿 有哪位大神在线帮忙看一下
+1,目前似乎明白点了。但是如果整个过程做成循环的话,它也会在driver和集群上之间来回转换吧?
+1,目前似乎明白点了。但是如果整个过程做成循环的话,它也会在driver和集群上之间来回转换吧?
你的Spark程序就是Driver,你各种rdd算子和spark sql就是executor执行的东西。
例如:List<String> list = XXXDao.getXXX(); // driver执行
JavaRDD<String> rdd = sparkContext.parallelize(list); // driver发送数据到executor,构建rdd
rdd.map(str -> str.trim()); // executor执行又例如 :
for(String sql : list) { // 例如这个list里是若干个sql
sqlContext.sql(sql); // 循环控制在driver执行,而sql的执行是在executor上;driver提交了这样的作业,会同步等待executor执行完毕并反馈。
}
多线程:
for(final String sql : list) {
new Thread() {
public void run() {
sqlContext.sql(sql); // 只要集群资源充裕,多个sql作业会并发执行
}
}.start(); // sqlContext是线程安全的。
}