首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自火花流的RestAPI服务呼叫

问来自火花流的RestAPI服务呼叫
EN

Stack Overflow用户
提问于 2017-01-23 05:09:42
回答 1查看 15K关注 0票数 4

我有一个用例,在从Kafka读取消息之后,我需要从火花流调用RESTAPI来执行一些计算,并将结果保存到HDFS和第三方应用程序中。

我对此毫不怀疑:

  • 如何从火花流直接调用RESTAPI。
  • 如何使用流批处理时间管理RESTAPI超时。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-31 09:32:23

此代码不会按原样编译。但这是给定用途的方法。

代码语言:javascript
复制
val conf = new SparkConf().setAppName("App name").setMaster("yarn")
val ssc = new StreamingContext(conf, Seconds(1))

val dstream = KafkaUtils.createStream(ssc, zkQuorum, group, topicMap)

dstream.foreachRDD { rdd =>

  //Write the rdd to HDFS directly
  rdd.saveAsTextFile("hdfs/location/to/save")

  //loop through each parttion in rdd
  rdd.foreachPartition { partitionOfRecords =>

    //1. Create HttpClient object here
    //2.a POST data to API

    //Use it if you want record level control in rdd or partion
    partitionOfRecords.foreach { record =>
      //2.b Post the the date to API
      record.toString
    }
  }
  //Use 2.a or 2.b to POST data as per your req
}

ssc.start()
ssc.awaitTermination()

大多数HttpClients (用于REST调用)支持请求超时。

示例Http POST调用与使用Apache HttpClient的超时

代码语言:javascript
复制
val CONNECTION_TIMEOUT_MS = 20000; // Timeout in millis (20 sec).

val requestConfig = RequestConfig.custom()
  .setConnectionRequestTimeout(CONNECTION_TIMEOUT_MS)
  .setConnectTimeout(CONNECTION_TIMEOUT_MS)
  .setSocketTimeout(CONNECTION_TIMEOUT_MS)
  .build();

HttpClientBuilder.create().build();

val client: CloseableHttpClient = HttpClientBuilder.create().build();

val url = "https://selfsolve.apple.com/wcResults.do"
val post = new HttpPost(url);

//Set config to post
post.setConfig(requestConfig)

post.setEntity(EntityBuilder.create.setText("some text to post to API").build())

val response: HttpResponse = client.execute(post)
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41799578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档