问题标签 [google-cloud-dataproc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
google-cloud-dataproc - Google Cloud Dataproc - sc.textFile() 命令上的作业文件错误
这是我通过 UI 在 Dataproc 中作为 PySpark 作业提交的文件
它开始,然后出错
为什么是这样?Dataproc 不应该已经建立了火花上下文吗?我需要在我的代码中添加什么以便将其作为 Spark 命令接受
apache-spark - Spark 工作超出 RAM (java.lang.OutOfMemoryError),即使有很多。xmx 太低了?
我的 Spark 作业出现 java.lang.OutOfMemoryError,即使只有 20% 的总内存在使用中。
我尝试了几种配置:
- 1x n1-highmem-16 + 2x n1-highmem-8
- 3x n1-highmem-8
我的数据集包含 180 万条记录,从主节点上的本地 json 文件中读取。整个json格式的数据集是7GB。我正在尝试执行的工作涉及一个简单的计算,然后是一个 reduceByKey。没什么特别的。这项工作在我只有 32GB 内存 (xmx28g) 的单台家用计算机上运行良好,尽管它需要对磁盘进行一些缓存。
作业通过 spark-submit 在服务器本地 (SSH) 提交。
堆栈跟踪和 Spark 配置可以在这里查看:https ://pastee.org/sgda
编码
python - 如何加载无法在每个 Spark 执行器中腌制的数据?
我正在使用用 Cython 编写的NoAho 库。它的内部 trie不能被腌制:如果我将它加载到主节点上,我永远不会得到在 worker 中执行的操作的匹配项。
由于我想在每个 Spark 执行器中使用相同的 trie,我找到了一种懒惰加载 trie 的方法,灵感来自spaCy on Spark issue。
虽然这可行,但所有.add()
调用都会针对每个 Spark 作业执行,这大约需要一分钟。因为我不确定“Spark 作业”是正确的术语,所以我会更明确一点:我在 Jupyter 笔记本中使用 Spark,每次运行需要该get_match()
功能的单元时,trie 永远不会被缓存并且需要一个分钟来加载尝试,这在运行时间中占主导地位。
我能做些什么来确保 trie 被缓存吗?或者我的问题有更好的解决方案吗?
hadoop - DataProc MapReduce 停止工作
我运行标准 hbase 类来计算 BigTable 表中的行数 (RowCounter)。使用 Google Console 中的 DataProc gui。它工作得很好,但几周后我尝试运行类似的 jar,但由于难以解释的原因,工作失败了。这看起来不像是连接参数问题,因为如果我使用不存在的 Hbase 表名,它会理解这一点。
1.1.2 和 1.0.1.1 Hbase 客户端的结果相同。1.0.1.1 来自示例。我发现由 bdutils 设置的集群使用 1.1.2 版本。
java - 您如何使用 Google DataProc Java 客户端使用关联 GS 存储桶中的 jar 文件和类提交 Spark 作业?
我需要触发 Spark 作业以使用 API 调用从 JSON 文件聚合数据。我使用 spring-boot 来创建资源。因此,解决方案的步骤如下:
- 用户使用 json 文件作为输入发出 POST 请求
- JSON 文件存储在与 dataproc 集群关联的 google 存储桶中。
- 使用指定的 jars、类从 REST 方法中触发聚合 Spark 作业,参数是 json 文件链接。
我希望使用 Dataproc 的 Java 客户端而不是控制台或命令行来触发作业。你怎么做呢?
apache-spark - 将 IPython notebook 连接到在不同机器上运行的 spark master
我不知道这是否已经在 SO 中得到解答,但我找不到解决我的问题的方法。
我在 Google Container Engine 的 docker 容器中运行了一个 IPython 笔记本,该容器基于此图像jupyter/all-spark-notebook
我还有一个使用google cloud dataproc创建的 spark 集群
Spark master 和 notebook 在不同的 VM中运行,但在相同的 region 和 zone中。
我的问题是我正在尝试从 IPython 笔记本连接到 spark master,但没有成功。我在我的 python 笔记本中使用了这段代码
我刚开始使用 spark,所以我确定我遗漏了一些东西(身份验证、安全性......),
我在那里发现的是通过SSH 隧道连接本地浏览器
有人已经做过这种设置了吗?
先感谢您
apache-spark - Spark 在启动后一分钟失去所有执行者
我pyspark
使用默认设置在 8 节点 Google dataproc 集群上运行。启动几秒钟后,我看到 30 个执行程序核心正在运行(如预期的那样):
一分钟后:
从那时起,所有操作仅在 2 个核心上运行:
如果我rng.cache()
在核心仍然连接的情况下运行,它们会保持连接并且作业会被分配。
检查监控应用程序(主节点上的端口 4040)显示执行程序已被删除:
是否有一些设置可以在没有变通方法的情况下保持核心连接?
apache-spark - Spark 1.6 kafka在dataproc py4j错误上流式传输
我收到以下错误:
Py4JError(u'调用 o73.createDirectStreamWithoutMessageHandler 时发生错误。Trace:\npy4j.Py4JException: Method createDirectStreamWithoutMessageHandler([class org.apache.spark.streaming.api.java.JavaStreamingContext, class java.util.HashMap, class java.util .HashSet,类 java.util.HashMap]) 不存在\n\tat py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335)\n\tat py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:344) \n\tat py4j.Gateway.invoke(Gateway.java:252)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)\n\tat py4j.commands.CallCommand.execute(CallCommand.java: 79)\n\tat py4j.GatewayConnection.run(GatewayConnection.java:209)\n\tat java.lang.Thread.run(Thread.java:745)\n\n',)
我正在使用 spark-streaming-kafka-assembly_2.10-1.6.0.jar (它存在于我所有节点 + 主节点上的 /usr/lib/hadoop/lib/ 文件夹中)
(编辑)实际错误是: java.lang.NoSuchMethodError: org.apache.hadoop.yarn.util.Apps.crossPlatformify(Ljava/lang/String;)Ljava/lang/String;
这是由于错误的 hadoop 版本。因此 spark 应该使用正确的 hadoop 版本编译:
mvn -Phadoop-2.6 -Dhadoop.version=2.7.2 -DskipTests clean package
这将在 external/kafka-assembly/target 文件夹中生成一个 jar。
apache-spark - 在 Java 中等待 Google Dataproc SparkJob 的最佳方式是什么?
我目前正在使用 Dataproc 的 Java 客户端 API 通过 Spring REST 服务触发 Spark 作业。火花工作的基础是:
- 初始化火花
- 处理数据
- 将结果存储到 GS 存储桶 .json 文件中
我存储数据的原因是,当我的 Spark 作业完成并将结果存储在 JSON 文件中时,我可以从 REST 服务读取存储的结果。但是,Dataproc 的 Java 客户端 API 只是触发作业,并不等待作业完成。因此,等待火花工作完成的最佳方式是什么?我不想使用 Object.wait(int time) 因为不同的火花作业会有不同的执行时间。