Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何为多个用户设置共享Spark安装(默认情况下,db.lck阻止其他用户打开)?_Apache Spark - Fatal编程技术网

Apache spark 如何为多个用户设置共享Spark安装(默认情况下,db.lck阻止其他用户打开)?

Apache spark 如何为多个用户设置共享Spark安装(默认情况下,db.lck阻止其他用户打开)?,apache-spark,Apache Spark,我们希望学生能够以自己的用户身份启动sparkshell或pyspark。但是,Derby数据库会将进程锁定为另一个用户: -rw-r--r-- 1 myuser staff 38 Jun 28 10:40 db.lck 出现以下错误: ERROR PoolWatchThread: Error in trying to obtain a connection. Retrying in 7000ms java.sql.SQLException: A read-only user or a u

我们希望学生能够以自己的用户身份启动
sparkshell
pyspark
。但是,Derby数据库会将进程锁定为另一个用户:

-rw-r--r-- 1 myuser staff   38 Jun 28 10:40 db.lck
出现以下错误:

ERROR PoolWatchThread: Error in trying to obtain a connection. Retrying in 7000ms
java.sql.SQLException: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection.
    at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
    at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
    at org.apache.derby.impl.jdbc.EmbedConnection.setReadOnly(Unknown Source)
    at com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1324)
    at com.jolbox.bonecp.ConnectionHandle.<init>(ConnectionHandle.java:262)
    at com.jolbox.bonecp.PoolWatchThread.fillConnections(PoolWatchThread.java:115)
    at com.jolbox.bonecp.PoolWatchThread.run(PoolWatchThread.java:82)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)
Caused by: ERROR 25505: A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection.
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
    at org.apache.derby.impl.sql.conn.GenericAuthorizer.setReadOnlyConnection(Unknown Source)
    at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.setReadOnly(Unknown Source)
ERROR PoolWatchThread:尝试获取连接时出错。在7000ms内重试
java.sql.SQLException:只读用户或只读数据库中的用户不允许在连接上禁用只读模式。
位于org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知源)
位于org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知源)
位于org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(未知源)
位于org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(未知源)
位于org.apache.derby.impl.jdbc.EmbedConnection.handleException(未知源)
位于org.apache.derby.impl.jdbc.EmbedConnection.setReadOnly(未知源)
位于com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1324)
位于com.jolbox.bonecp.ConnectionHandle。(ConnectionHandle.java:262)
位于com.jolbox.bonecp.PoolWatchThread.fillConnections(PoolWatchThread.java:115)
位于com.jolbox.bonecp.PoolWatchThread.run(PoolWatchThread.java:82)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
运行(Thread.java:748)
原因:错误25505:只读用户或只读数据库中的用户不允许在连接上禁用只读模式。
位于org.apache.derby.iapi.error.StandardException.newException(未知源)
位于org.apache.derby.iapi.error.StandardException.newException(未知源)
位于org.apache.derby.impl.sql.conn.generiauthorizer.setReadOnlyConnection(未知源)
位于org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.setReadOnly(未知源)
对于这种情况,是否有变通办法或最佳实践

然后我尝试使用配置MySQL,但发生了以下情况:

[Fatal Error] hive-site.xml:7:2: The markup in the document following the root element must be well-formed.
17/06/28 12:14:13 ERROR Configuration: error parsing conf file:/usr/local/bin/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml
org.xml.sax.SAXParseException; systemId: file:/usr/local/bin/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml; lineNumber: 7; columnNumber: 2; The markup in the document following the root element must be well-formed. 74 more
<console>:14: error: not found: value spark
       import spark.implicits._
              ^
<console>:14: error: not found: value spark
       import spark.sql
              ^
[致命错误]配置单元站点。xml:7:2:根元素后面的文档中的标记必须格式正确。
17/06/28 12:14:13错误配置:解析conf文件时出错:/usr/local/bin/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml
org.xml.sax.SAXParseException;systemId:file:/usr/local/bin/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml;行号:7;列数:2;文档中根元素后面的标记必须格式正确。74多
:14:错误:未找到:值火花
导入spark.implicits_
^
:14:错误:未找到:值火花
导入spark.sql
^
以下是XML文件的内容:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost/metastore</value>
  <description>the URL of the MySQL database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>ourpassword</value>
</property>

<property>
  <name>datanucleus.autoCreateSchema</name>
  <value>false</value>
</property>

<property>
  <name>datanucleus.fixedDatastore</name>
  <value>true</value>
</property>

<property>
  <name>hive.metastore.uris</name>
  <value>thrift://ourip:9083</value>
  <description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>

javax.jdo.option.ConnectionURL
jdbc:mysql://localhost/metastore
MySQL数据库的URL
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
蜂箱
javax.jdo.option.ConnectionPassword
我们的密码
datanucleus.autoCreateSchema
假的
datanucleus.fixedDatastore
真的
hive.metastore.uris
thrift://ourip:9083
metastore主机的IP地址(或完全限定的域名)和端口
编辑,添加开始和结束标记后,我得到以下结果:

17/06/28 12:28:50 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
17/06/28 12:28:52 WARN metastore: Failed to connect to the MetaStore Server...
17/06/28 12:28:53 WARN metastore: Failed to connect to the MetaStore Server...
17/06/28 12:28:54 WARN metastore: Failed to connect to the MetaStore Server...
17/06/28 12:28:55 WARN Hive: Failed to access metastore. This class should not accessed in runtime.
org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
    at org.apache.hadoop.hive.ql.metadata.Hive.getAllDatabases(Hive.java:1236)
  at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:466)
  at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:236)
  at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:74)
  ... 96 more
<console>:14: error: not found: value spark
       import spark.implicits._
              ^
<console>:14: error: not found: value spark
       import spark.sql
              ^
17/06/28 12:28:50警告NativeCodeLoader:无法为您的平台加载本机hadoop库。。。在适用的情况下使用内置java类
17/06/28 12:28:52警告元存储:无法连接到元存储服务器。。。
17/06/28 12:28:53警告元存储:无法连接到元存储服务器。。。
17/06/28 12:28:54警告元存储:无法连接到元存储服务器。。。
17/06/28 12:28:55警告配置单元:无法访问元存储。不应在运行时访问此类。
org.apache.hadoop.hive.ql.metadata.HiveException:java.lang.RuntimeException:无法实例化org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
位于org.apache.hadoop.hive.ql.metadata.hive.getAllDatabases(hive.java:1236)
位于org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:466)
位于org.apache.hadoop.hive.metastore.HiveMetaStoreClient。(HiveMetaStoreClient.java:236)
位于org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient。(SessionHiveMetaStoreClient.java:74)
... 96多
:14:错误:未找到:值火花
导入spark.implicits_
^
:14:错误:未找到:值火花
导入spark.sql
^
对于这种情况,是否有变通办法或最佳实践

对。让学生使用自己的Spark安装(不要使用共享安装,因为它不会为您带来任何好处)

毕竟,Spark只是一个用于开发分布式数据处理应用程序的库,您所面临的问题是
Spark shell
,它帮助人们在命令行上开始使用Spark

出现此问题的原因是
sparkshell
(默认情况下,spark)使用Derby数据库进行目录和配置单元元存储,该数据库可供单个用户使用。不同的设置要比每个用户单独安装Spark花费更多的精力


旁注:你有没有考虑过使用命令行,这样学生们就不会关心命令行了?

Dziekuje,Jaciek,请给出建议。我能够将Derby配置为使用MySQL。不过,我必须使用
--jars/usr/share/java/mysql连接器java.jar
选项启动它。是否有办法将该选项添加到
sparkshell
脚本中


我在另一台工作站上测试了它,PostgreSQL似乎也能很好地工作。在Fedora上有点棘手,但一旦我运行了,它似乎不需要
--jars
选项。

@MrunalPagnis想描述一下您的环境,以及如何获得错误?