Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 无法执行HTTP请求:等待来自Flink中池的连接超时_Amazon S3_Apache Flink_Flink Streaming - Fatal编程技术网

Amazon s3 无法执行HTTP请求:等待来自Flink中池的连接超时

Amazon s3 无法执行HTTP请求:等待来自Flink中池的连接超时,amazon-s3,apache-flink,flink-streaming,Amazon S3,Apache Flink,Flink Streaming,我正在开发一个应用程序,它将一些文件上传到s3存储桶,然后从s3存储桶读取文件并将其推送到我的数据库 我正在使用flink1.4.2和fs.s3api从s3存储桶读取和写入文件 将文件上载到s3存储桶工作正常,没有任何问题,但当我的应用程序从s3读取上载文件的第二阶段启动时,我的应用程序抛出以下错误: Caused by: java.io.InterruptedIOException: Reopen at position 0 on s3a://myfilepath/a/b/d/4: org.a

我正在开发一个应用程序,它将一些文件上传到s3存储桶,然后从s3存储桶读取文件并将其推送到我的数据库

我正在使用flink1.4.2fs.s3api从s3存储桶读取和写入文件

将文件上载到s3存储桶工作正常,没有任何问题,但当我的应用程序从s3读取上载文件的第二阶段启动时,我的应用程序抛出以下错误

Caused by: java.io.InterruptedIOException: Reopen at position 0 on s3a://myfilepath/a/b/d/4: org.apache.flink.fs.s3hadoop.shaded.com.amazonaws.SdkClientException: Unable to execute HTTP request: Timeout waiting for connection from pool
at org.apache.flink.fs.s3hadoop.shaded.org.apache.hadoop.fs.s3a.S3AUtils.translateException(S3AUtils.java:125)
at org.apache.flink.fs.s3hadoop.shaded.org.apache.hadoop.fs.s3a.S3AInputStream.reopen(S3AInputStream.java:155)
at org.apache.flink.fs.s3hadoop.shaded.org.apache.hadoop.fs.s3a.S3AInputStream.lazySeek(S3AInputStream.java:281)
at org.apache.flink.fs.s3hadoop.shaded.org.apache.hadoop.fs.s3a.S3AInputStream.read(S3AInputStream.java:364)
at java.io.DataInputStream.read(DataInputStream.java:149)
at org.apache.flink.fs.s3hadoop.shaded.org.apache.flink.runtime.fs.hdfs.HadoopDataInputStream.read(HadoopDataInputStream.java:94)
at org.apache.flink.api.common.io.DelimitedInputFormat.fillBuffer(DelimitedInputFormat.java:702)
at org.apache.flink.api.common.io.DelimitedInputFormat.open(DelimitedInputFormat.java:490)
at org.apache.flink.api.common.io.GenericCsvInputFormat.open(GenericCsvInputFormat.java:301)
at org.apache.flink.api.java.io.CsvInputFormat.open(CsvInputFormat.java:53)
at org.apache.flink.api.java.io.PojoCsvInputFormat.open(PojoCsvInputFormat.java:160)
at org.apache.flink.api.java.io.PojoCsvInputFormat.open(PojoCsvInputFormat.java:37)
at org.apache.flink.runtime.operators.DataSourceTask.invoke(DataSourceTask.java:145)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:718)
at java.lang.Thread.run(Thread.java:748)
我能够通过增加s3a API的max connection参数来控制这个错误

到目前为止,我在s3存储桶中有大约1000个文件,由我的应用程序在s3存储桶中推拉,我的最大连接数是3000个。我正在使用Flink的parallelism从s3 bucket上传/下载这些文件。我的任务管理器计数为14。 这是一个间歇性故障,我也有这个场景的成功案例

我的问题是

  • 为什么我会出现间歇性故障?如果我设置的最大连接数很低,那么我的应用程序在每次运行时都会抛出此错误
  • 是否有任何方法可以计算我的应用程序在不面临连接池超时错误的情况下工作所需的最佳最大连接数?或者这个错误与我不知道的其他事情有关
  • 谢谢
    根据我通过Flink(批处理)工作流处理S3中大量文件的经验,我提前发表了一些评论:

  • 读取文件时,Flink将根据文件数量和每个文件的大小计算“拆分”。每个拆分都是单独读取的,因此同时连接的理论最大值不是基于文件的数量,而是基于文件和文件大小的组合
  • HTTP客户机使用的连接池会在一段时间后释放连接,因为能够重用现有连接是一种胜利(不必发生服务器/客户机握手)。因此,池中有多少可用连接会引入一定程度的随机性
  • 连接池的大小对内存影响不大,因此我通常将其设置得相当高(例如,对于最近的工作流,设置为4096)
  • 使用AWS连接代码时,bump的设置为
    fs.s3.maxConnections
    ,这与纯Hadoop配置不同