2015-10-10 194 views
4

我们正在尝试将文件上传到Google Cloud Storage中,然后将它们移到BigQuery中,但我们经常遇到'500 Internal Server Error'或'410 Gone'(下面的原始消息)在一些上传过程中。将文件上传到Google云端存储:500后端错误

我们使用官方的SDK,并添加了指数退避的重试,但错误总是在这里。你有任何建议吗?

下面是我们如何上传(斯卡拉):

val credential = new GoogleCredential().setAccessToken(accessToken) 

val requestInitializer = new HttpRequestInitializer() { 
    def initialize(request: HttpRequest): Unit = { 
     credential.initialize(request) 

     // to avoid read timed out exception 
     request.setConnectTimeout(200000) 
     request.setReadTimeout(200000) 

     request.setIOExceptionHandler(new 
      HttpBackOffIOExceptionHandler(new ExponentialBackOff())) 
     request.setUnsuccessfulResponseHandler(new 
      HttpBackOffUnsuccessfulResponseHandler(new ExponentialBackOff())) 
    } 
} 

val storage = new Storage.Builder(
    new NetHttpTransport, 
    JacksonFactory.getDefaultInstance, 
    requestInitializer 
).setApplicationName("MyAppHere").build 

val objectMetadata = new StorageObject() 
    .setBucket(bucketName) 
    .setName(distantFileName) 

val isc = new InputStreamContent("binary/octet-stream", fis) 
val length = isc.getLength 
val insertObject = storage.objects().insert(bucketName, objectMetadata, isc) 
// For small files, you may wish to call setDirectUploadEnabled(true), to 
// reduce the number of HTTP requests made to the server. 
if (length > 0 && length <= 2 * 1000 * 1000 /* 2MB */) { 
    insertObject.getMediaHttpUploader.setDirectUploadEnabled(true) 
} 
insertObject.execute() 

我们的斯卡拉依赖关系:

"com.google.api-client" % "google-api-client" % "1.18.0-rc", 
"com.google.api-client" % "google-api-client-jackson2" % "1.18.0-rc", 
"com.google.apis" % "google-api-services-bigquery" % "v2-rev142-1.18.0-rc", 
"com.google.apis" % "google-api-services-storage" % "v1-rev1-1.18.0-rc", 
"com.google.http-client" % "google-http-client" % "1.18.0-rc", 
"com.google.oauth-client" % "google-oauth-client" % "1.18.0-rc" 

生SDK的错误响应:

500 Internal Server Error 
    { 
     "code" : 500, 
     "errors" : [ { 
     "domain" : "global", 
     "message" : "Backend Error", 
     "reason" : "backendError" 
    } ], 
     "message" : "Backend Error" 
    } 

410 Gone 
    { 
     "code" : 500, 
     "errors" : [ { 
     "domain" : "global", 
     "message" : "Backend Error", 
     "reason" : "backendError" 
    } ], 
     "message" : "Backend Error" 
    } 
+0

感谢您发表评论 – mecanix

+0

得到410作为对上述代码的回应,特别是当结果中包含“代码”:“500”时,这是非常令人惊讶的。你有可能修改你的结果的某种防火墙吗? –

+0

@BrandonYarbrough我们的防火墙不会修改任何内容,它只是过滤互联网流量 – mecanix

回答

3

Backend error应与处理指数重试,因为可能存在服务问题。

如果错误在我们说10小时后仍然存在,那么您应该联系支持人员,以便为您提供1:1的帮助。

+0

错误是否可能是由于格式错误的CSV? – mecanix

+1

这就是不同的错误,例如:第0行错误,无法识别字段0 – Pentium10

相关问题