簡體   English   中英

在Scala REPL中運行spark時出錯-訪問被拒絕org.apache.derby.security.SystemPermission(“ engine”,“ usederbyinternals”)

[英]Error running spark in a Scala REPL - access denied org.apache.derby.security.SystemPermission( “engine”, “usederbyinternals” )

我一直在使用IntelliJ來加快使用sbt在Scala中開發Spark應用程序的速度。 盡管IntelliJ隱藏了很多腳手架,但我了解基礎知識,因此我想嘗試從命令行啟動並運行某些內容(即使用REPL)。 我正在使用macOS。

這是我所做的:

mkdir -p ~/tmp/scalasparkrepl
cd !$
echo 'scalaVersion := "2.11.12"' > build.sbt
echo 'libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.0"' >> build.sbt
echo 'libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.0"' >> build.sbt
echo 'libraryDependencies += "org.apache.spark" %% "spark-hive" % "2.3.0"' >> build.sbt
sbt console

這將打開一個運行我的scala REPL(包括下載所有依賴項):

import org.apache.spark.SparkConf
import org.apache.spark.sql.{SparkSession, DataFrame}
val conf = new SparkConf().setMaster("local[*]")
val spark = SparkSession.builder().appName("spark repl").config(conf).config("spark.sql.warehouse.dir", "~/tmp/scalasparkreplhive").enableHiveSupport().getOrCreate()
spark.range(0, 1000).toDF()

失敗,錯誤access denied org.apache.derby.security.SystemPermission( "engine", "usederbyinternals" )

scala> spark.range(0, 1000).toDF()
18/05/08 11:51:11 INFO SharedState: Setting hive.metastore.warehouse.dir ('null') to the value of spark.sql.warehouse.dir ('~/tmp/scalasparkreplhive').
18/05/08 11:51:11 INFO SharedState: Warehouse path is '/tmp/scalasparkreplhive'.
18/05/08 11:51:12 INFO StateStoreCoordinatorRef: Registered StateStoreCoordinator endpoint
18/05/08 11:51:12 INFO HiveUtils: Initializing HiveMetastoreConnection version 1.2.1 using Spark classes.
18/05/08 11:51:12 INFO HiveMetaStore: 0: Opening raw store with implemenation class:org.apache.hadoop.hive.metastore.ObjectStore
18/05/08 11:51:12 INFO ObjectStore: ObjectStore, initialize called
18/05/08 11:51:13 INFO Persistence: Property hive.metastore.integral.jdo.pushdown unknown - will be ignored
18/05/08 11:51:13 INFO Persistence: Property datanucleus.cache.level2 unknown - will be ignored
java.security.AccessControlException: access denied org.apache.derby.security.SystemPermission( "engine", "usederbyinternals" )

我已經四處搜尋,並且有一些有關此錯誤的信息,但沒有任何信息可以用來解決它。 我感到奇怪的是,命令行上的scala / sbt項目會出現此問題,而IntelliJ中的sbt項目運行良好(我幾乎從IntelliJ項目復制/粘貼了代碼)。 我想IntelliJ代表我做了一些事情,但我不知道是什么,這就是為什么我要進行此練習。

誰能建議如何解決這個問題?

不能完全相信這一點,但是它看起來類似於SBT測試,不適用於火花測試

解決方案是在運行Scala代碼之前發出以下代碼:

System.setSecurityManager(null)

因此完整:

System.setSecurityManager(null)
import org.apache.spark.SparkConf
import org.apache.spark.sql.{SparkSession, DataFrame}
val conf = new SparkConf().setMaster("local[*]")
val spark = SparkSession.builder().appName("spark repl").config(conf).config("spark.sql.warehouse.dir", "~/tmp/scalasparkreplhive").enableHiveSupport().getOrCreate()
spark.range(0, 1000).toDF()

您可以適當地設置權限,將其添加到預初始化腳本中:

export SBT_OPTS="-Djava.security.policy=runtime.policy"

創建一個runtime.policy文件:

grant codeBase "file:/home/user/.ivy2/cache/org.apache.derby/derby/jars/*" {
    permission org.apache.derby.security.SystemPermission "engine", "usederbyinternals";
};

假設您的runtime.policy文件位於當前工作目錄中,並且您要從本地緩存的Ivy存儲庫中拉出Derby 如有必要,請更改路徑以反映Derby Jar的實際父文件夾。 星號的位置很重要,這不是傳統的shell glob。

另請參閱: https : //docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM