現在想實作這樣一個邏輯:
單機上,生成一個亂數,對mysql做查詢,如果查詢到了,則進一步到spark集群上查詢更多資訊。
目前程式寫出來了,可以提交到集群運行,但是想想好像不對:
提交到集群后,豈不是各個節點會分布式地生成各自的亂數、然后各節點各自查詢mysql?
我想實作的邏輯該怎么做呢?
uj5u.com熱心網友回復:
你搞清楚什么代碼在Driver上執行,什么在Executor上執行就明白了。uj5u.com熱心網友回復:
+1,目前似乎明白點了。
但是如果整個程序做成回圈的話,它也會在driver和集群上之間來回轉換吧?
uj5u.com熱心網友回復:
你的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是執行緒安全的。
}
uj5u.com熱心網友回復:
~~~~~~~~~~~~~~路過!!1轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/64479.html
標籤:Spark
