HTTP-ответ Spark Scala от исключения времени ожидания Rest Api

Мне нужно прочитать ответ JSON от REST API с помощью Spark Scala, я написал код (как с использованием scala.io.Source.fromInputStream, так и с помощью Scalaj HTTP), но задание не выполняется в HDFS, каждый раз оно дает мне исключение тайм-аута, хотя я увеличили время ожидания (подключение / чтение) до максимума.

На моем Intellij (локальном) он работает нормально, я видел в журналах HDFS, кроме исключения тайм-аута, ничего другого, что я могу найти, но это можно увидеть, если он все еще принимает значение тайм-аута по умолчанию, то есть 100 мс (не принимая максимальное значение, которое я предоставил в моем коде)

Ниже представлены журналы:

      21/08/19 11:17:54 INFO jdk.JdkHttpClient: connect timeout: Period{time=100, timeUnit=MILLISECONDS}, read timeout: Period{time=100, timeUnit=MILLISECONDS}, shutdown timeout: Period{time=10, timeUnit=MILLISECONDS}
21/08/19 11:17:54 INFO jdk.JdkHttpClient: connect timeout: Period{time=100, timeUnit=MILLISECONDS}, read timeout: Period{time=100, timeUnit=MILLISECONDS}, shutdown timeout: Period{time=10, timeUnit=MILLISECONDS}
21/08/19 11:17:54 INFO btrace.SparkSensorUtils: Sending init confJson
1/08/19 11:20:12 ERROR mainClasses.TestSap: Connection timed out (Connection timed out)
java.net.ConnectException: Connection timed out (Connection timed out)
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188
    

Below are the code I am using :

Using HTTP Scalaj :

```scala

System.setProperty("sun.net.http.allowRestrictedHeaders", "true")

    val spark = Context.getSparkSession()

    import spark.implicits._

    spark.conf.set("spark.network.timeout", "3000s")
    spark.conf.set("spark.executor.heartbeatInterval", "1500s")
    spark.conf.set("hive.spark.client.server.connect.timeout", "100000ms")
    spark.conf.set("hive.spark.client.connect.timeout", "100000ms")

 val result = Http(Url)
             .auth("xxxx","yyyy")
             .option(HttpOptions.connTimeout(999999999))
             .option(HttpOptions.readTimeout(999999999))
             .asString 

```
Using Scala.io.source :

```scala
 @throws(classOf[java.io.IOException])
    @throws(classOf[java.net.SocketTimeoutException])
    def GetUrlContentJson(url: String): DataFrame ={

      val userpass = "xxxx" + ":" + "yyyy";
     
      val basicAuth = "Basic " +
        javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes());
      val connection = new URL(url).openConnection
      connection.setRequestProperty("Authorization", basicAuth)
      connection.setConnectTimeout(999999999)
      connection.setReadTimeout(999999999)
      connection.setUseCaches(false)

      val result = scala.io.Source.fromInputStream(connection.getInputStream).mkString
      if (connection.getInputStream != null) connection.getInputStream.close
}
```
For both the cases using same URL , I can able to get response over running on Intellij, whereas running the same on HDFS (Spark Scala Jar) it is giving me Timeout Exception.
It will be really helpful, if anyone can help me to resolve this issue.

0 ответов

Другие вопросы по тегам