Java 通过SocketTimeoutException从google存储随机下载失败

Java 通过SocketTimeoutException从google存储随机下载失败,java,google-api,google-cloud-storage,Java,Google Api,Google Cloud Storage,我遇到了与上述相同的问题,但与作者不同的是,即使我从欧洲或美国的服务器连接,问题也没有消失 我使用非常简单的代码来查询存储: Storage storage = new Storage.Builder( new NetHttpTransport(), new JacksonFactory(), new GoogleCredential().setAccessToken(accessToken))

我遇到了与上述相同的问题,但与作者不同的是,即使我从欧洲或美国的服务器连接,问题也没有消失

我使用非常简单的代码来查询存储:

 Storage storage = new Storage.Builder(
                new NetHttpTransport(),
                new JacksonFactory(),
                new GoogleCredential().setAccessToken(accessToken))
            .setApplicationName("FooBar")
            .build();

 Storage.Objects.Get getObject = storage.objects().get(bucket, fn);
  getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true);
  getObject.executeMediaAndDownloadTo(outputStream);
用map reduce作业包装

当作业运行时,它会使用少量节点并行获取文件(~15GB)。 某些运行成功,但有时多达50%的下载尝试失败,例外情况如下:

java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
        at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:798)
        at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:755)
        at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        at sun.net.www.MeteredStream.read(MeteredStream.java:116)
        at java.io.FilterInputStream.read(FilterInputStream.java:116)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2676)
        at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2671)
        at com.google.api.client.util.ByteStreams.copy(ByteStreams.java:51)
        at com.google.api.client.util.IOUtils.copy(IOUtils.java:94)
        at com.google.api.client.util.IOUtils.copy(IOUtils.java:63)
        at com.google.api.client.googleapis.media.MediaHttpDownloader.executeCurrentRequest(MediaHttpDownloader.java:261)
        at com.google.api.client.googleapis.media.MediaHttpDownloader.download(MediaHttpDownloader.java:209)
        at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeMediaAndDownloadTo(AbstractGoogleClientRequest.java:553)
        at com.google.api.services.storage.Storage$Objects$Get.executeMediaAndDownloadTo(Storage.java:4494)
        at ***
        at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
        at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:771)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:375)
        at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)
        at org.apache.hadoop.mapred.Child.main(Child.java:249)
我尝试过使用亚马逊(美国东部地区)并在欧洲拥有自己的服务器,但没有任何帮助。下载会随机失败

有没有办法在google storage client中配置超时?
OAuth2访问令牌在集群的所有节点上共享。是否有同时连接到google存储的配额?

我想知道您是否找到了解决方案?我使用AWS和地区us-west-2(俄勒冈州),有时我会收到这个“超时”。我第一次请求获取“谷歌硬盘”的目录列表时就得到了它(即使是在传输大文件时也没有)。