python - 是否可以使用 Spark 从 Kubernetes 之外的外部 HBase 集群中读取数据进行处理?
问题描述
我无法在 Kubernetes 中使用 Spark (2.4.3) 从 HBase (1.3) 读取数据。驱动程序 pod 和执行程序 pod 已成功启动,但是,当驱动程序 pod 尝试调用 HBase 时,它与 HBase 的连接失败并出现以下错误:
java.net.ConnectException: Connection refused at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)
我认为根本原因是由于:
INFO ClientCnxn: Opening socket connection to server localhost/127.0.0.1:2181
spark 驱动程序和执行程序 pod 正在 localhost 中寻找 zookeeper,而不是远程主机。此外,这些 pod 似乎忽略了我提供的 hbase-site.xml。
我已将带有正确远程主机信息的 hbase-site.xml 放在自定义 spark 映像的 $SPARK_HOME/conf/ 目录中。我已经测试了可以通过使用自定义 spark 映像运行 kubernetes pod 部署来建立从 kubernetes 到 hbase 的连接,该命令使用以下命令使其在 yaml 中保持启动和运行:
command: ["sleep"]
args: ["infinity"]
然后,我通过kubectl exec -it <pod> bash
. 在这里,我通过 spark-submit 运行完全相同的脚本,该脚本用于在 Spark 独立本地模式下从 HBase 读取,并且能够成功地从 HBase 读取。我用来从 spark 连接到 HBase 的方法是通过 shc 连接器。
这一次,当我运行完全相同的脚本时,spark-submit 现在指向 k8 集群,它失败了。
由于某种原因,hbase-site.xml 被忽略,驱动程序和执行程序 pod 通过 localhost:2181 查找 zookeeper。
在部署 pod 中,我使用两个命令进行测试:
从 Kubernetes 外部连接到 HBase 集群的 Spark 本地模式
spark-submit \
--jars=/hbase-jars/* \
--files=gs://<project>/dependencies/hbase-site.xml \
gs://<project>/dependencies/test-read.py
hbase-jars 是存储 shc 和相关 hbase jar 的地方。为了便于测试,我已将 hbase-site.xml 放在 gcs 上。此测试能够从 hbase 返回读取。
Spark Kubernetes 提交:
--master k8s://https://<ip> \
--deploy-mode cluster \
--conf spark.driver.memory=2G \
--conf spark.executor.memory=2G \
--conf spark.executor.instances=2 \
--conf spark.kubernetes.executor.request.cores=1 \
--conf spark.kubernetes.namespace=default \
--conf spark.authenticate.driver.serviceAccountName=default \
--conf spark.kubernetes.container.image=gcr.io/<project>/spark-hbase:latest \
--jars=/hbase-jars/* \
--files=gs://<project>/dependencies/hbase-site.xml \
gs://<project>/dependencies/test-read.py
从上面返回错误。我还连接到正在运行的驱动程序和执行程序 pod 以运行本地 spark-submit 并得到与运行 Kubernetes 的 spark-submit 时相同的错误
是否需要设置某种环境变量才能使驱动程序和执行程序 pod 成功读取 hbase-site.xml?我是否在 spark-submit 中错误地提供了 hbase-site.xml?非常感谢您的帮助!
解决方案
推荐阅读
- android - 运行应用程序时出现键盘布局边缘?
- fiware-orion - 固件猎户座:按环境配置
- intellij-idea - 仅在 Intellj 的特定模块中查找符号的用法
- php - Codeigniter:“where 子句”中的未知列“stud.id”
- microsoft-graph-api - Microsoft graph 团队,403 在聊天中发布消息
- java - 解压后的 xlsx 文件和 apache poi 的内容
- javascript - DevTools 无法加载 sourceMap 文件,HTTP 错误:状态码 403,net:: ERR_HTTP_RESPONSE_CODE_FAILURE
- c - 使用 char 指针读取 GCC 中的寄存器
- java - Java在main方法中打印递归
- firebase - 在没有获取完整文档数据的情况下检查 Firestore 上是否存在文档