我创建并配置了小型Hadoop集群(1个主站和1个从站),并安装了spark。
我使用了预装spark-1.6.0-bin-hadoop2.6
和hadoop-2.7
.
当我运行示例时
$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode cluster
--driver-memory 4g
--executor-memory 2g
--executor-cores 1
--queue thequeue
lib/spark-examples*.jar
10
从 HDUSER(拥有 /usr/local/hadoop
的用户),一切正常,但是当我尝试从同一用户运行bin/spark-shell
时,会发生以下错误:
Database Class Loader started - derby.database.classpath='' 16/03/02 16:55:32 ERROR Datastore.Schema:
Failed initialising database. Cannot get a connection, pool error Could not create a validated object, cause:
A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection.
org.datanucleus.exceptions.NucleusDataStoreException: Cannot get a connection, pool error Could not create a validated object, cause:
A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection.
但是,当我从拥有/usr/local/spark
的用户user
运行bin/spark-shell
时,它工作正常。
我有两个问题:
首先,为什么首先会发生此错误?
其次,最好的处理方法是什么?也许让一个同时拥有Spark和hadoop的用户?还是不好的做法?
我不确定为什么,但对我来说解决这个问题的是首先关闭齐柏林飞艇。 但是这产生了您在上面看到的错误。所以我重新启动了服务器。 这可能是由于使用 control-C 退出 Spark shell 并让多个用户同时使用 SparkContext 引起的。
这可能与 Derby 有关,后者尝试在只读文件系统中写入。
可能的解决方法是在提交应用程序时更改 Derby 数据库路径:
--conf "spark.driver.extraJavaOptions= -Dderby.system.home=/tmp"