Вы должны построить Искру с Улей. Экспортировать 'SPARK_HIVE=true'

Я пытаюсь запустить записную книжку в Google Analytics для Apache Spark, работающей в Bluemix, но у меня возникает следующая ошибка:

Exception: ("You must build Spark with Hive. Export 'SPARK_HIVE=true' and 
run build/sbt assembly", Py4JJavaError(u'An error occurred while calling 
None.org.apache.spark.sql.hive.HiveContext.\n', JavaObject id=o38))

Ошибка прерывистая - это не всегда происходит. Строка кода в вопросе:

df = sqlContext.read.format('jdbc').options(
            url=url, 
            driver='com.ibm.db2.jcc.DB2Driver', 
            dbtable='SAMPLE.ASSETDATA'
        ).load()

Есть несколько похожих вопросов о стековом потоке, но они не задают вопрос о сервисе spark в bluemix.

4 ответа

Решение

Создать новый SQLContext объект перед использованием sqlContext:

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

и затем запустите код снова.

Эта ошибка возникает, если у вас есть несколько ноутбуков, использующих "из коробки" sqlContext,

Это утверждение инициализирует HiveContext под прикрытием. Затем HiveContext инициализирует локальную базу данных Derby для хранения ее метаданных. База данных Derby создается в текущем каталоге по умолчанию. Описанная проблема возникает при следующих обстоятельствах (среди прочих):

  1. База данных Derby уже существует, и есть оставшиеся файлы блокировки, потому что ядро ​​ноутбука, которое использовало ее в последний раз, не закрылось должным образом.
  2. База данных Derby уже существует и в настоящее время используется другим ядром ноутбука, которое также инициализировало HiveContext.

Пока IBM не изменит установку по умолчанию, чтобы избежать этой проблемы, возможные обходные пути:

  • В случае 1 удалите оставшиеся файлы блокировки. Из записной книжки Python это делается путем выполнения:

    !rm -f ./metastore_db/*.lck
    
  • В случае 2 измените текущий рабочий каталог перед созданием контекста Hive. В записной книжке Python это превратится во вновь созданный каталог:

    import os
    import tempfile
    os.chdir(tempfile.mkdtemp())
    

    Но будьте осторожны, она будет загромождать файловую систему новым каталогом и базой данных Derby при каждом запуске этого ноутбука.

Я знаю, что IBM работает над исправлением. Пожалуйста, используйте эти обходные пути, только если вы столкнулись с проблемой, а не заблаговременно.

Легко, вы можете решить эту проблему следующим образом: перейдите в верхний правый угол, нажмите на свое имя пользователя, вы получите список: 1. выберите переводчика 2. прокрутите страницу, пока не получите искру 3. в правой части у вас есть список, содержащий: spark ul, edit, ... выбрать перезагрузку

Вернитесь к своей записной книжке и запустите снова, она должна работать

К сожалению, ответ, который говорит "Создать новый SQLContext", абсолютно неверен.

Это плохая идея заменить sqlContext новым экземпляром SQLContext, потому что вы теряете поддержку улья: по умолчанию sqlContext инициализируется с HiveContext.

Во-вторых, сообщение "Вы должны собрать Spark с помощью Hive. Export 'SPARK_HIVE=true'..." - это плохо написанный код в PySpark (context.py), который не получает правильное исключение из драйвера java и не делает ' не отображать это.

Чтобы узнать, что происходит, сделайте так, чтобы журнал драйвера java был записан в некоторый файл. В моем случае у клиента есть Spark с DSE, а в каталоге conf есть несколько XML-файлов с именем logback-spark *.xml. Откройте файл с именем logback-spark.xml (без суффиксов) и добавьте туда файл appender. Затем воспроизведите ошибку и прочитайте исключения + трассировки стека, написанные драйвером Java.

Для других версий / сборок Spark сначала узнайте, как получить журнал для драйвера java, и настройте конфигурацию так, чтобы он записывал в файл.

В журнале моего искрового драйвера у меня было четкое сообщение о том, что логин Spark не может записать в файловую систему метастафа куста. В вашем случае вы можете получить другое сообщение. Но проблема в Java является основной - вы должны посмотреть на нее в первую очередь.

Другие вопросы по тегам