mysql - Apache Superset 通过 Spark 连接到 Mariadb
问题描述
我想在 Superset 中查看 Mariadb 的数据。我认为从 Mariadb --> Spark --> Superset 获取数据可能是最好的解决方案,因为我还将使用 Spark 和 H2o 苏打水。
1.我试过pip3 install mysqlclient但得到这个错误:
ERROR: Command "/bin/python3 -u -c 'import setuptools, tokenize; ... failed with error code 1 in /tmp/pip-install-kslmastj/mysqlclient/
2.我用 2 个配置文件尝试了 Spark,但我认为在 Spark 或 Spark SQL 中无法访问数据。
文件 1 ../conf/spark-defaults.conf
spark.driver.extraClassPath = /usr/share/java/mysql-connector-java.jar
spark.executor.extraClassPath = /usr/share/java/mysql-connector-java.jar
文件 2 ../conf/hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/DBNAME</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>USERNAME</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>PASSWORD</value>
<description>password to use against metastore database</description>
</property>
</configuration>
3.我阅读了有关SQLAlchemy方言和PyHive的信息。我搜索了超集代码,无法确定在哪里添加外部方言。
4.我在超集配置文件中尝试了一些配置。我想知道端口是否应该是 Spark 端口。 SQLALCHEMY_DATABASE_URI = 'hive://localhost:4040/'
5.我尝试导入 csv 文件,但出现错误。
注意:如果我在 scala 提示符下输入,我可以在 Spark 中看到 Mariadb 数据,但我认为这不是正确的解决方案。
import org.apache.spark.sql.SQLContext
val sqlcontext = new org.apache.spark.sql.SQLContext(sc)
val dataframe_mysql = sqlcontext.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/DATABASE_NAME").option("driver", "com.mysql.jdbc.Driver").option("dbtable", "TABLE_NAME").option("user", "USER_NAME").option("password", "PASSWORD").load()
dataframe_mysql.show()
谢谢
更新: 这不是理想的解决方案,但在阅读此链接上的解决方案后,我能够让pip3 install mysqlclient工作。
sudo ln -s /usr/lib64/libmariadbclient.a /usr/lib64/libmariadb.a
我仍然想使用 Spark。
解决方案
我已将 MariaDB 与 superset 作为我的主要 BD 而不是默认 SQLite 连接,这可能会帮助您连接。
SQLAlchemist 需要一个额外的 python 库来完成这项任务,在我的例子中,我使用了 pymysql。安装后(您可以使用 pip),连接将以mysql+pymysql为前缀,所以它看起来像这样:
'mysql+pymysql://user:password@host/dbname'
希望对你有帮助
推荐阅读
- java - 上传 pdf 文件时出现 SSL 异常
- css - 如何在 :after 选择器保持在背景和正确位置后制作背景图像?
- c# - C# FluentFTP 连接错误 - FTPS Windows 7
- javascript - 用于动画的 Ext js 面板显示不起作用
- c# - 大文件夹修改目录安全需要很长时间
- php - Fantasy Premier League API PHP cURL
- timeout - Hazelcast OperationTimeoutException 远程执行
- java - 如何使用 Maven 创建具有依赖项的不可执行 JAR?
- spreadsheet - 如何将 SpreadsheetDocument 放置在 1C:Enterprise 平台中的数据处理器表单上?
- azure - Microsoft Graph 访问令牌包含错误的联系人 API 权限