直接在GCP dataproc上启动的交互式pyspark会话关于默认表HIVE的集群错误



使用GCP上的pyspark,我有时会收到类似的消息

AnalysisException: "Database 'default' not found;"

从我所做的研究中,我了解到这与蜂窝表有关。也许我应该明确地告诉sparkhive.xml文件在哪里

./etc/hive/conf.dist/hive-site.xml

其他一些可能很重要的文件是

./usr/local/share/google/dataproc/bdutil/conf/hive-template.xml
./usr/local/share/google/dataproc/bdutil/conf/hive-ha-mixins.xml
./etc/hive-hcatalog/conf.dist/proto-hive-site.xml

我进入pyspark的方式和我在AWS上一样。我正在ssh连接到集群,并构建自己的spark-submit命令。它一开始就像

export PYTHONPATH=/path/to/my/stuff:$PYTHONPATH
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=/usr/local/bin/ipython3
pyspark --class main --master yarn --deploy-mode client  --conf spark.speculation=True

也就是说,我将直接在dataproc集群的主节点上使用ipython创建一个交互式pyspark会话。

我没有任何关于启用蜂窝或定位蜂窝的特殊选项。我没有明确使用hive,我只是在阅读拼花地板文件,我所有的SQL都是通过pyspark接口,比如

df = spark.read.parquet('gs://path/to/my/data')
df.groupBy('something').count().show()

这是在dataproc集群上创建交互式pyspark会话的错误方法吗?我找到了一些文档,比如https://cloud.google.com/sdk/gcloud/reference/dataproc/jobs/submit/pyspark上面介绍了如何从笔记本电脑提交作业,但我还没有看到任何关于在集群上启动交互式会话的内容。我担心gcloud dataproc jobs submit pyspark添加了我缺少的特殊选项和配置。

+1用于使用笔记本电脑,而不是火花壳。许多初始化操作都已升级为可选组件,安装速度更快:

  • Jupyter笔记本(pyspark):https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/optional-components#jupyter_notebook
  • 齐柏林飞艇笔记本(多种语言,包括SQL):https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/optional-components#zeppelin_notebook.

如果使用--image-version=preview(最终将为--image-version=1.4),默认情况下将获得Python 3和conda/pip。这样,您就不需要运行任何脚本来设置Python3。

通过--optional-components ANACONDA安装Anaconda也很方便,因为它附带了许多常见的数据科学包。

请注意,设置SSH隧道以查看web界面有点棘手。这是tl;那个医生的医生:

# Terminal 1: Run an SSH tunnel on port 1080
gcloud compute ssh clustername-m -- -nND 1080
# Terminal 2: Run Chrome (on Linux -- the command is different for a Mac) using the proxy on port 1080. Make sure you don't have any corporate proxy settings that might interfere with using the proxy on 1080.
/usr/bin/google-chrome --proxy-server="socks5://localhost:1080" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" --user-data-dir=/tmp/master-host-name

回到您最初的问题:我们将Spark的类路径配置为包含Hive配置(参见/etc/spark/conf/spark-env.sh)。因此,pysparkspark-shellspark-submit命令应该已经正确设置,而不需要任何参数。你粘贴的代码片段并没有真正接触到Hive(也就是说,你没有阅读或编写Hive表),所以我不确定你为什么会收到错误消息。

最新更新