Интеграция с репозиториями Dataproc + Datalab + Source Code - PullRequest
2 голосов
/ 02 мая 2019

Может ли кто-нибудь интегрировать Dataproc, Datalab и репозиторий исходного кода? Как многие из нас видели, когда вы вызываете действие init для установки datalab, оно не создает репозиторий исходного кода. Я пытаюсь создать комплексное комплексное решение, в котором пользователь входит в блокнот datalab, взаимодействует с Dataproc через Pyspark и регистрирует блокноты в репозитории исходного кода. Я не смог сделать это с помощью действия init, как я указал ранее. Я также попытался установить dataproc, а затем datalab как отдельную установку (на этот раз он создает репозиторий с исходным кодом), однако я не могу запустить любой искровой код на этом ноутбуке datalab. Может кто-нибудь дать мне несколько советов о том, как этого добиться? Любое и все ценится.

код в даталабе

from pyspark.sql import HiveContext
hc=HiveContext(sc)
hc.sql("""show databases""").show()
hc.sql("""CREATE EXTERNAL TABLE IF NOT EXISTS INVOICES
      (SubmissionDate DATE, TransactionAmount DOUBLE, TransactionType STRING)
      STORED AS PARQUET
      LOCATION 'gs://my-exercise-project-2019016-ds-team/datasets/invoices'""")
hc.sql("""select * from invoices limit 10""").show()

Error

Py4JJavaError: An error occurred while calling o55.sql.
: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2395)
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3208)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3240)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:121)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3291)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3259)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:470)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:356)
    at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$or

1 Ответ

2 голосов
/ 02 мая 2019

К сожалению, для создания репозитория datalab-notebooks в облачных хранилищах исходного кода из действия инициализации требуется некоторая предварительная работа.

Причина в том, что для создания хранилища требуется, чтобы учетная запись службы для виртуальной машины имела разрешение IAM «source.repos.create» на проект, что по умолчанию неверно.

Вы можете либо предоставить это разрешение учетной записи службы, а затем создать хранилище с помощью gcloud source repos create datalab-notebooks, либо вручную создать хранилище перед созданием кластера.

Затем, чтобы клонировать репозиторий внутри вашего скрипта запуска, добавьте следующие строки:

mkdir -p ${HOME}/datalab
gcloud source repos clone datalab-notebooks ${HOME}/datalab/notebooks

Если вы изменяете стандартное действие init для Datalab, я бы предложил добавить эти строки здесь

...