我正在使用mllib的svd库在一个大矩阵上做一些降维:
数据大约是20G,
并且火花记忆是60G
我收到以下警告和错误消息:
WARN ARPACK:无法从以下位置加载实施: com.github.fommil.netlib.NativeSystemARPACK WARN ARPACK:失败 从以下地址加载实现:com.github.fommil.netlib.NativeRefARPACK WARN BLAS:无法从以下位置加载实现: com.github.fommil.netlib.NativeSystemBLAS WARN BLAS:加载失败 实现自:com.github.fommil.netlib.NativeRefBLAS异常 在线程“main”中java.lang.OutOfMemoryError:Java堆空间
at java.util.Arrays.copyOfRange(Arrays.java:2766) at org.apache.spark.mllib.linalg.EigenValueDecomposition$.symmetricEigs(EigenValueDecomposition.scala:128) at org.apache.spark.mllib.linalg.distributed.RowMatrix.computeSVD(RowMatrix.scala:258) at org.apache.spark.mllib.linalg.distributed.RowMatrix.computeSVD(RowMatrix.scala:190)
要解决警告消息,我使用该命令构建 Spark(1.2)
本地-Pnetlib-lgpl
,当我在本地测试时,警告消息消失了。并且日志显示netlib库正常工作:
15/03/05 20:07:03 INFO JniLoader:已成功加载 /tmp/jniloader7217840327264308862netlib-native_system-linux-x86_64.so 15/03/05 20:07:11 INFO JniLoader:已加载 netlib-native_system-linux-x86_64.so
然后我安装了使用-Pnetlib-lgpl on AWS EMR
编译的 Spark(1.2),但仍显示警告和错误消息。
我不确定这是否是我本地编译的问题,所以我编译了Spark (1.2) on AWS EC2
并将其安装在AWS EMR上,但警告和错误消息仍然显示出来。
有谁能告诉我如何解决这个问题?非常感谢!
答案 0 :(得分:0)
问题部分解决了。感谢@SeanOwen的评论。
我收到java内存错误的原因是因为顶部特征向量的计算在驱动程序上,所以我需要确保在驱动程序节点上有足够的内存。
将spark-submit
与--driver-memory 5G
一起使用时,问题就解决了。
但警告信息仍然存在。