我有一个外部数据源,可通过Kafka发送数据。
事实上,这不是真实数据,而是指向数据的链接。
<canvas id="canvas" style='background-color:#EEE;' width='500px' height='500px'></canvas>
只有一个主题,但是它包含$('p').each(function(index) {
$(this).attr('tabindex', index)
}).on('keyup', function(e) {
e.preventDefault;
if (e.keyCode == 39) {
$('[TabIndex="' + Number(Number($(this).attr('tabindex')) + 1) + '"]').focus();
}
if (e.keyCode == 37) {
$('[TabIndex="' + Number(Number($(this).attr('tabindex')) - 1) + '"]').focus();
}
});
字段,我需要在该字段上执行一项工作。
数据不是连续的,而是更像作业-它包含一组数据,应在单个批处理中处理。下一个主题是独立的。所有相同类型的主题都应同步处理。
选项:
使用Spark Streaming。
看来这不是适合我的方案的解决方案。而且没有内置的功能将"type": "job_type_1"
"urls": [
"://some_file"
"://some_file"
]
视为数据而不是路径列表
创建一个中间服务,该中间服务将分派请求并启动具体作业。在这种情况下,什么是传递20Kb +数据到作业的最佳方法,因为提交火花可能不会花费很多争论
创建一个长期运行的spark应用程序,其中将包含纯Kafka使用者,并在每条消息上创建Spark Session并执行作业。
不确定这将正常工作,如何停止等等,
更新
到目前为止,我的解决方案是创建一个长期运行的Spark作业,该作业将使用Kafka API(不是spark)连接到Kafka,进行订阅,检索URL列表,调度作业类型,然后执行spark作业与type
一起使用,因此Spark应用将使用标准的value
API
答案 0 :(得分:1)
您可以在一个Spark会话中运行多个Spark作业。在传入流上启动火花流作业。将结果收集到主节点,并同时触发查询。例如...
class KafkaStreamingExample {
val conf = new SparkConf().setAppName("Spark Pi")
def main(args:Array[String]):Unit = {
val spark = SparkSession.builder.config(conf).enableHiveSupport().getOrCreate()
val ssc = new StreamingContext(spark.sparkContext, Seconds(1))
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "localhost:9092,anotherhost:9092",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "use_a_separate_group_id_for_each_stream",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean)
)
val topics = Array("topicA", "topicB")
val stream = KafkaUtils.createDirectStream[String, String](
ssc,
PreferConsistent,
Subscribe[String, String](topics, kafkaParams)
)
stream.foreachRDD((rdd,time) =>{
val queriesToRun = rdd.map(_.value()).collect()
queriesToRun.par.foreach(query => {
spark.sql(query)
})
})
}
}