Python 使用Hadoop/Spark/Thread在RaspberryPi群集上的Jupyter笔记本中运行PySpark代码时出错

Python 使用Hadoop/Spark/Thread在RaspberryPi群集上的Jupyter笔记本中运行PySpark代码时出错,python,apache-spark,hadoop,jupyter-notebook,yarn,Python,Apache Spark,Hadoop,Jupyter Notebook,Yarn,我正在尝试使用Yarn cluster使用PySpark运行Jupyter笔记本中的示例代码 我认为我的集群工作得很好。我可以看到所有节点都在运行 纱线节点-列表-全部 OpenJDK客户端VM警告:您已加载library/opt/hadoop/lib/native/libhadoop.so.1.0.0,该库可能已禁用堆栈保护。VM现在将尝试修复堆栈保护。 强烈建议您使用“execstack-c”修复库,或使用“-z noexecstack”链接库。 节点总数:3 节点Id节点状态节点Http地

我正在尝试使用Yarn cluster使用PySpark运行Jupyter笔记本中的示例代码

我认为我的集群工作得很好。我可以看到所有节点都在运行

纱线节点-列表-全部
OpenJDK客户端VM警告:您已加载library/opt/hadoop/lib/native/libhadoop.so.1.0.0,该库可能已禁用堆栈保护。VM现在将尝试修复堆栈保护。
强烈建议您使用“execstack-c”修复库,或使用“-z noexecstack”链接库。
节点总数:3
节点Id节点状态节点Http地址正在运行的容器数
pi2:40045运行pi2:8042 0
pi1:38067运行pi1:8042 0
pi3:35139运行pi3:8042 0
我正在使用此处提供的示例笔记本:

我可以运行除此单元格外的所有笔记本代码:

#按类别显示标签计数
df.groupBy(“标签”)\
.count()\
.orderBy(列(“计数”).desc()\
.show()
Spark在此作业中卡住,出现以下错误:

线程“map-output-dispatcher-0”java.lang.unsatifiedlinkerror:/opt/hadoop/lib/native/libzstd-jni.so:/opt/hadoop/lib/native/libzstd-jni.so:错误的ELF类:ELFCLASS64(可能原因:体系结构字宽不匹配)
不支持的OS/arch,无法找到/linux/arm/libzstd-jni.so或从系统库加载zstd-jni。请尝试从源代码构建jar或在系统中提供libzstdjni。
位于java.base/java.lang.ClassLoader$NativeLibrary.load0(本机方法)
位于java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2442)
位于java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2498)
位于java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2694)
位于java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2659)
位于java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)
位于java.base/java.lang.System.loadLibrary(System.java:1873)
位于com.github.luben.zstd.util.Native.load(Native.java:73)
位于com.github.luben.zstd.util.Native.load(Native.java:60)
位于com.github.luben.zstd.ZstdOutputStream。(ZstdOutputStream.java:15)
位于org.apache.spark.io.ZStdCompressionCodec.compressedOutStream(CompressionCodec.scala:224)
位于org.apache.spark.MapOutputTracker$.serializeMapStatuses(MapOutputTracker.scala:913)
在org.apache.spark.ShuffleStatus.$anonfun$serializedMapStatus$2(MapOutputTracker.scala:210)
在scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
在org.apache.spark.ShuffleStatus.withWriteLock上(MapOutputTracker.scala:72)
在org.apache.spark.ShuffleStatus.serializedMapStatus上(MapOutputTracker.scala:207)
位于org.apache.spark.MapOutputTrackerMaster$MessageLoop.run(MapOutputTracker.scala:457)
位于java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
位于java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
位于java.base/java.lang.Thread.run(Thread.java:834)
线程“map-output-dispatcher-1”java.lang.NoClassDefFoundError中出现异常:无法初始化类com.github.luben.zstd.zstOutputStream
位于org.apache.spark.io.ZStdCompressionCodec.compressedOutStream(CompressionCodec.scala:224)
位于org.apache.spark.MapOutputTracker$.serializeMapStatuses(MapOutputTracker.scala:913)
在org.apache.spark.ShuffleStatus.$anonfun$serializedMapStatus$2(MapOutputTracker.scala:210)
在scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
在org.apache.spark.ShuffleStatus.withWriteLock上(MapOutputTracker.scala:72)
在org.apache.spark.ShuffleStatus.serializedMapStatus上(MapOutputTracker.scala:207)
位于org.apache.spark.MapOutputTrackerMaster$MessageLoop.run(MapOutputTracker.scala:457)
位于java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
位于java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
位于java.base/java.lang.Thread.run(Thread.java:834)

我也尝试过从这个解决方案,但它不起作用。

功能集群不需要本机库,但如果想使用它们,显然需要为ARM构建/安装zstd。就我个人而言,我会尝试将k3s与Spark结合使用,而不是在有限的网络上引入更多的JVM开销memory@OneCricketeer我已经从源代码unpacket.jar构建了zstd,以获取libzstd-jni.so文件,并将其复制到hadoop/lib/native/中,但仍然得到相同的错误。我应该不同地做吗?错误:
WARN scheduler.TaskSetManager:stage 7.0(TID 17,pi1,executor 2)中丢失了任务0.0:java.lang.UnsatifiedLinkError:java.library.path中没有zstd jni不受支持的OS/arch,找不到/linux/arm/libzstd-jni.so或从系统库中加载zstd jni。请尝试从源代码构建jar或在系统中提供libzstd jni。
可能需要重新启动JVM才能加载库?不过我不确定