【发布时间】:2016-03-11 21:33:13
【问题描述】:
我正在使用 DataflowPipelineRunner 创建一个数据流作业。我尝试了以下场景。
- 不指定任何机器类型
- 配g1小机
- 使用 n1-highmem-2
在上述所有场景中,输入是来自 GCS 的文件,该文件非常小(KB 大小),输出是大查询表。
我在所有场景中都出现内存不足错误
我编译的代码大小为 94mb。我只尝试字数统计示例,它没有读取任何输入(在作业开始之前失败)。请帮助我了解为什么会出现此错误。
注意:我正在使用 appengine 来启动这项工作。
注意:相同的代码适用于测试版0.4.150414
编辑 1
根据答案中的建议尝试了以下方法,
- 从自动缩放切换到基本缩放。
- 使用的机器类型 B2 提供 256MB 内存
经过这些配置,Java堆内存问题就解决了。但它试图将一个 jar 上传到超过 10Mb 的暂存位置,因此它失败了。
它记录以下异常
com.google.api.client.http.HttpRequest execute: exception thrown while executing request
com.google.appengine.api.urlfetch.RequestPayloadTooLargeException: The request to https://www.googleapis.com/upload/storage/v1/b/pwccloudedw-stagging-bucket/o?name=appengine-api-L4wtoWwoElWmstI1Ia93cg.jar&uploadType=resumable&upload_id=AEnB2Uo6HCfw6Usa3aXlcOzg0g3RawrvuAxWuOUtQxwQdxoyA0cf22LKqno0Gu-hjKGLqXIo8MF2FHR63zTxrSmQ9Yk9HdCdZQ exceeded the 10 MiB limit.
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.convertApplicationException(URLFetchServiceImpl.java:157)
at com.google.appengine.api.urlfetch.URLFetchServiceImpl.fetch(URLFetchServiceImpl.java:45)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.fetchResponse(URLFetchServiceStreamHandler.java:543)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getInputStream(URLFetchServiceStreamHandler.java:422)
at com.google.apphosting.utils.security.urlfetch.URLFetchServiceStreamHandler$Connection.getResponseCode(URLFetchServiceStreamHandler.java:275)
at com.google.api.client.http.javanet.NetHttpResponse.<init>(NetHttpResponse.java:36)
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:94)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965)
at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequestWithoutGZip(MediaHttpUploader.java:545)
at com.google.api.client.googleapis.media.MediaHttpUploader.executeCurrentRequest(MediaHttpUploader.java:562)
at com.google.api.client.googleapis.media.MediaHttpUploader.resumableUpload(MediaHttpUploader.java:419)
at com.google.api.client.googleapis.media.MediaHttpUploader.upload(MediaHttpUploader.java:336)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:427)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel$UploadOperation.call(AbstractGoogleAsyncWriteChannel.java:357)
at java.util.concurrent.FutureTask.run(FutureTask.java:260)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1168)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:605)
at com.google.apphosting.runtime.ApiProxyImpl$CurrentRequestThreadFactory$1$1.run(ApiProxyImpl.java:1152)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.apphosting.runtime.ApiProxyImpl$CurrentRequestThreadFactory$1.run(ApiProxyImpl.java:1146)
at java.lang.Thread.run(Thread.java:745)
at com.google.apphosting.runtime.ApiProxyImpl$CurrentRequestThreadFactory$2$1.run(ApiProxyImpl.java:1195)
我尝试直接上传 jar 文件 - appengine-api-1.0-sdk-1.9.20.jar,但它仍然尝试上传此 jar appengine-api-L4wtoWwoElWmstI1Ia93cg.jar。 我不知道它是什么罐子。任何关于这个 jar 的想法都值得赞赏。
请帮我解决这个问题。
【问题讨论】:
-
几个问题——您使用的是什么 SDK 版本,您能否提供一个作业 ID?
-
你能分享你得到的异常吗?您是在本地(在 appengine 上)看到 OOM,还是在管道启动后看到它?如果在 appengine 上发生 OOM,那么您可能会遇到 stackoverflow.com/questions/33647161/…
-
我将 appengine 机器类型更改为 F2,现在我没有收到 OOM 错误。但它正在尝试暂存超过 10 毫米的文件,并且可以恢复上传。上传需要很多时间,我得到了超出执行时间限制的异常。对此有任何想法。
-
@SamMcVeety 我的 appengine SDK 是 1.9.30,Dataflow SDK 是 1.2.1。未创建作业。它在 appengine 本身中失败了。
-
@Bharathi 您是否最终列出了 filesToStage 以绕过导致失败的 appengine-api jar 上传?
标签: google-bigquery google-cloud-platform google-cloud-dataflow