Ошибка запуска искры в Scala REPL - доступ запрещен org.apache.derby.security.SystemPermission ("engine", "usederbyinternals") - PullRequest
0 голосов
/ 08 мая 2018

Я использую IntelliJ для ускорения разработки приложений Spark в Scala с использованием sbt.Я понимаю основы, хотя 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

Это открывает REPL Scala (включая загрузку всех зависимостей), в котором я запускаю:

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 в командной строке имел бы эту проблему, тогда как проект sbt в IntelliJ работает нормально (я в значительной степени скопировал / вставил код из проекта IntelliJ).Я думаю, что IntelliJ делает что-то от моего имени, но я не знаю, что именно, поэтому я выполняю это упражнение.

Кто-нибудь может посоветовать, как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете установить соответствующее разрешение, добавив его в ваш скрипт pre-init :

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 находится в текущем рабочем каталоге, и вы извлекаете Derby из локально кэшированного репозитория Ivy . Измените путь, чтобы отразить фактическую родительскую папку Derby Jar, если это необходимо. Звездочка имеет большое значение, и это не традиционная оболочка.

Смотри также: https://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html

0 голосов
/ 08 мая 2018

Не собираюсь брать полный кредит на это, но это похоже на Тест 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()
...