Как заставить версии Python синхронизироваться в экземпляре datalab, запущенном из кластера GCP dataproc? - PullRequest
1 голос
/ 01 апреля 2019

Я создал кластер Dataproc в GCP, используя изображение 1.2.Я хочу запустить Spark из записной книжки Datalab.Это прекрасно работает, если я держу ноутбук Datalab под управлением Python 2.7 в качестве ядра, но если я хочу использовать Python 3, я сталкиваюсь с несоответствием младшей версии.Я демонстрирую несоответствие со сценарием Datalab ниже:

### Configuration
import sys, os
sys.path.insert(0, '/opt/panera/lib')
os.environ['PYSPARK_PYTHON'] = '/opt/conda/bin/python'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/opt/conda/bin/python'

import google.datalab.storage as storage
from io import BytesIO

spark = SparkSession.builder \
  .enableHiveSupport() \
  .config("hive.exec.dynamic.partition","true") \
  .config("hive.exec.dynamic.partition.mode","nonstrict") \
  .config("mapreduce.fileoutputcommitter.marksuccessfuljobs","false") \
  .getOrCreate() \

sc = spark.sparkContext

### import libraries
from pyspark.mllib.tree import DecisionTree, DecisionTreeModel
from pyspark.mllib.util import MLUtils
from pyspark.mllib.regression import LabeledPoint

### trivial example
data = [ 
  LabeledPoint(0.0, [0.0]),
  LabeledPoint(1.0, [1.0]),
  LabeledPoint(1.0, [2.0]),
  LabeledPoint(1.0, [3.0])
]

toyModel = DecisionTree.trainClassifier(sc.parallelize(data), 2, {})
print(toyModel)

Ошибка:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.runJob.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3, pan-bdaas-prod-jrl6-w-3.c.big-data-prod.internal, executor 6): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/worker.py", line 124, in main
    ("%d.%d" % sys.version_info[:2], version))
Exception: Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.

Другие сценарии инициализации: gs: // dataproc-initialization-actions / cloud-sql-proxy/cloud-sql-proxy.sh gs: //dataproc-initialization-actions/datalab/datalab.sh ... и сценарии, которые загружают некоторые из наших необходимых библиотек и утилит

1 Ответ

2 голосов
/ 01 апреля 2019

Ядро Python 3 в Datalab использует Python 3.5, а не Python 3.6

Можно попытаться настроить среду 3.6 внутри Datalab, а затем установить для нее новую спецификацию ядра, но, вероятно, прощепросто настройте кластер Dataproc для использования Python 3.5

Инструкции по настройке кластера для использования 3.5 приведены ниже:

...