直接在gcpdataproc集群上启动的交互式pyspark会话关于默认表配置单元的错误

zaqlnxep  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(313)

在gcp上使用pyspark,我有时会收到这样的消息

AnalysisException: "Database 'default' not found;"

根据我所做的研究,我知道这与Hive表有关。也许我应该明确告诉spark hive.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

我进入Pypark的方式和在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或定位Hive的特殊选项。我没有显式地使用hive,我只是读取Parquet文件,我所有的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 添加我缺少的特殊选项和配置。

9rbhqvlz

9rbhqvlz1#

+1用于使用笔记本,而不是Spark壳。许多初始化操作已升级到可选组件,这些组件的安装速度更快:
jupyter笔记本(Pypark):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 ),默认情况下,您将获得python3和conda/pip。这样就不需要运行任何脚本来设置Python3。
安装anaconda via --optional-components 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配置(look-in) /etc/spark/conf/spark-env.sh ). 所以 pyspark , spark-shell ,和 spark-submit 命令应该已经正确设置,而不需要任何参数。您粘贴的代码片段并没有真正接触到配置单元(也就是说,您没有阅读或编写配置单元表),所以我不知道您为什么会遇到这个错误消息。

相关问题