Apache spark Spark作业在本地运行,但在EMR上失败-can';我不明白为什么
出于某种原因,当我在EMR上运行作业时(使用Apache spark Spark作业在本地运行,但在EMR上失败-can';我不明白为什么,apache-spark,pyspark,amazon-emr,Apache Spark,Pyspark,Amazon Emr,出于某种原因,当我在EMR上运行作业时(使用EMR-5.0.0和Spark 2.0.0),管道中的以下函数导致错误: atf是一个非常简单的功能: def atf(iterable): """ Args: iterable: Returns: """ return [stats.mean(t) for t in zip(*list(zip(*iterable))[0])] 我得到了一个巨大的错误字符串,但这里是最后一部分:
EMR-5.0.0
和Spark 2.0.0),管道中的以下函数导致错误:
atf
是一个非常简单的功能:
def atf(iterable):
"""
Args:
iterable:
Returns:
"""
return [stats.mean(t) for t in zip(*list(zip(*iterable))[0])]
我得到了一个巨大的错误字符串,但这里是最后一部分:
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
at py4j.Gateway.invoke(Gateway.java:280)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:211)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.spark.api.python.PythonException: Traceback (most recent call last):
File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py", line 161, in main
func, profiler, deserializer, serializer = read_command(pickleSer, infile)
File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py", line 54, in read_command
command = serializer._read_with_length(file)
File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py", line 164, in _read_with_length
return self.loads(obj)
File "/mnt/yarn/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py", line 419, in loads
return pickle.loads(obj, encoding=encoding)
ImportError: No module named 'regression'
at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:234)
at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:319)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:283)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
at org.apache.spark.scheduler.Task.run(Task.scala:85)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 1 more
16/08/27 16:28:43 INFO ShutdownHookManager: Shutdown hook called
16/08/27 16:28:43 INFO ShutdownHookManager: Deleting directory /mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644
16/08/27 16:28:43 INFO ShutdownHookManager: Deleting directory /mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644/pyspark-41867521-9dfd-4d8f-8b13-33272063e0c3
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:237)
位于py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
在py4j.Gateway.invoke处(Gateway.java:280)
位于py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:128)
在py4j.commands.CallCommand.execute(CallCommand.java:79)
在py4j.GatewayConnection.run处(GatewayConnection.java:211)
运行(Thread.java:745)
原因:org.apache.spark.api.python.python异常:回溯(最近一次调用last):
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py”,主文件第161行
func、探查器、反序列化器、序列化器=读取命令(pickleSer、infle)
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/worker.py”,第54行,在read_命令中
命令=序列化程序。\读取长度为的\u(文件)
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py”,第164行,长度为
返回自加载(obj)
文件“/mnt/thread/usercache/hadoop/appcache/application_1472313936084_0003/container_1472313936084_0003_01_000002/pyspark.zip/pyspark/serializers.py”,第419行,已加载
返回pickle.load(对象,编码=编码)
ImportError:没有名为“回归”的模块
位于org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
位于org.apache.spark.api.python.PythonRunner$$anon$1。(PythonRDD.scala:234)
位于org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
位于org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
在org.apache.spark.rdd.rdd.computeOrReadCheckpoint(rdd.scala:319)
位于org.apache.spark.rdd.rdd.iterator(rdd.scala:283)
位于org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
位于org.apache.spark.scheduler.Task.run(Task.scala:85)
位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:274)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 还有一个
16/08/27 16:28:43信息关闭挂钩管理器:已调用关闭挂钩
16/08/27 16:28:43信息关机挂钩管理器:删除目录/mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644
16/08/27 16:28:43信息关机挂钩管理器:删除目录/mnt/tmp/spark-429a8665-405e-4a8a-9a0c-7f939020a644/PySark-41867521-9dfd-4d8f-8b13-33272063e0c3
有一个导入错误:没有名为“回归”的模块。消息对我来说没有意义,因为我脚本的其余部分正在运行此模块中的函数,当我删除
aggregate\u user\u topic\u vectors
函数时,脚本运行没有错误。另外,正如我前面所说的,即使使用聚合\用户\主题\向量
,脚本在本地机器上也不会出错。我已经设置了PYTHONPATH
来查看我的项目,只是为了确定。我真的不知道该怎么办。任何评论都将不胜感激。正如我所怀疑的,我的问题是通过从groupByKey
(这显然是邪恶的)转移到reduceByKey
(因此,与我导入模块的方式无关)来解决的。这是修改后的代码。希望这对别人有帮助
def autv(self):
if not self._utv:
raise FileNotFoundError("No data loaded.")
ut = self._utv
try:
self._utv = (ut
.rdd
.map(lambda x: (x.id, (x.t, x.w)))
.reduceByKey(lambda accum, x: (accum[0] + x[0], accum[1] + x[1]))
.map(lambda row: Row(user_id=row[0],
weight=row[1][1],
topics=row[1][0]))
.toDF()).cache()
return self
except AttributeError as e:
logging.error(e)
return None
正如我所怀疑的,我的问题是通过从
groupByKey
(这显然是邪恶的)转移到reduceByKey
(因此,与我导入模块的方式无关)来解决的。这是修改后的代码。希望这对别人有帮助
def autv(self):
if not self._utv:
raise FileNotFoundError("No data loaded.")
ut = self._utv
try:
self._utv = (ut
.rdd
.map(lambda x: (x.id, (x.t, x.w)))
.reduceByKey(lambda accum, x: (accum[0] + x[0], accum[1] + x[1]))
.map(lambda row: Row(user_id=row[0],
weight=row[1][1],
topics=row[1][0]))
.toDF()).cache()
return self
except AttributeError as e:
logging.error(e)
return None
您需要通过spark submit提供python依赖项。。请看它不是一个外部模块。这是我写的一个模块,叫做“回归”。我只使用Python标准库。好的,我明白了。集群的工作节点是否可以使用它?我知道在本地模式下它可以工作,而在集群模式下它不能解决它。这意味着工人无法使用您的模块。是吗?@RamPrasadG我一直在运行本模块中的所有其他内容,没有任何问题。它是关于这个特定功能的。我正在考虑把
groupByKey
变成reduceByKey
。我已经读到这些错误可能会产生误导,我可能只是有一个缩放问题。因为它是您自己的模块,几乎确定了RamPrasad G建议的路径/依赖性问题。可能会粘贴您如何组织文件、导入和提交到spark?您需要通过spark submit提供python依赖性。。请看它不是一个外部模块。这是我写的一个模块,叫做“回归”。我只使用Python标准库。好的,我明白了。集群的工作节点是否可以使用它?我知道在本地模式下它可以工作,而在集群模式下它不能解决它。这意味着工人无法使用您的模块。是吗?@RamPrasadG我一直在运行本模块中的所有其他内容,没有任何问题。它是关于这个特定功能的。我正在考虑把groupByKey
变成reduceByKey
。我已经读到这些错误可能会产生误导,我可能只是有一个缩放问题。因为它是您自己的模块,几乎确定了一个路径/依赖项