首页 > 解决方案 > 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。

标签: mysqlapache-sparkpysparkmariadbsuperset

解决方案


我已将 MariaDB 与 superset 作为我的主要 BD 而不是默认 SQLite 连接,这可能会帮助您连接。

SQLAlchemist 需要一个额外的 python 库来完成这项任务,在我的例子中,我使用了 pymysql。安装后(您可以使用 pip),连接将以mysql+pymysql为前缀,所以它看起来像这样:

'mysql+pymysql://user:password@host/dbname'

希望对你有帮助


推荐阅读