通过 Spark SQL 将 tableau 与 Elastic 搜索连接起来

Posted

技术标签:

【中文标题】通过 Spark SQL 将 tableau 与 Elastic 搜索连接起来【英文标题】:Connect tableau with Elastic search via Spark SQL 【发布时间】:2015-02-23 20:27:54 【问题描述】:

我发现了一个post,它讨论了如何通过 Hive SQL 将 Tableau 连接到 Elastic Search。我想知道是否有办法通过 Spark SQL 连接到 Elastic Search,因为我对 hive 不太熟悉。

谢谢。

【问题讨论】:

【参考方案1】:

@busybug91,

正确的驱动程序是here 请尝试使用这个。可以解决你的问题。

【讨论】:

是的。我上周下载了这个驱动程序,我能够连接到 Spark SQL。但是,我看不到任何表格。【参考方案2】:

@NicholasY 经过几次试验,它得到了解决。我采取的两个步骤:-

我没有使用正确的驱动程序进行连接。我正在使用datastax企业驱动程序。但是,他们也有 spark sql 的驱动程序。我使用的是 Windows 64 位版本的驱动程序。使用 MapR Hadoop Hive 和 Hortonworks Hadoop Hive 驱动程序没有像我使用 Apache hive 那样工作。 当我使用正确的驱动程序(来自 DataStax)时,我意识到我的 hive 元存储和 spark-thrift-server 在同一个端口上运行。我将 spark-thrift-server 的端口更改为 10001,并成功建立了连接。

一个新问题:我在 hive 中创建了外部表。我也可以查询数据。我将 hive-metastore 作为服务启动。但是,正如link 中提到的,我无法在 Spark SQL 的配置单元中看到我的表。除非我从 hive 元存储中看到表,否则我将 Tableau 与 Spark Sql 连接是没有用的!当我在 spark sql 中执行 show tables; 时(通过 spark-sql shell 和作为服务同时运行的 hive Metastore),它运行的作业也给出了完成时间,但现在是表名。我通过 localhost:4040 对其进行了监控,我看到输入和输出大小为 0.0。我相信我无法在 spark sql 中从 hive 获取表,这就是为什么在从 Tableau 建立到 spark sql 的连接后我看不到任何表的原因。

编辑 我将 hive 和 spark sql 的 metastore 从 derby 更改为 mysql

【讨论】:

【参考方案3】:

我正在尝试这样做,所以也许我可以帮助您警告一些事情。

首先,使用 Hive 和 thrift Server 编译 Spark SQL 版本(版本 0.13):

export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"

mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -Phive -Phive-thriftserver -DskipTests clean package

您需要正确配置 hive-site.xml 以使用 Hive 并将其复制到 spark/conf 文件夹。

然后,您必须使用 elasticsearch-hadoop jar 路径设置 $CLASSPATH。

小心! Spark SQL 1.2.0 不适用于 elasticsearch-hadoop-2.0.x。您必须使用可用的 elasticsearch-hadoop-2.1.0-Beta4 或 BUILD-SNAPSHOT here。

要完成,您必须使用类似的东西运行 thriftserver:

./start-thriftserver.sh --master spark://master:7077 --driver-class-path $CLASSPATH --jars /root/spark-sql/spark-1.2.0/lib/elasticsearch-hadoop-2.1.0.Beta4.jar --hiveconf hive.server2.thrift.bind.host 0.0.0.0 --hiveconf hive.server2.thrift.port 10000

它适用于我,但仅适用于小型 docType(5000 行),数据托管似乎不起作用。我正在寻找一种解决方案来在每个 Spark 工作人员上移动 elasticsearch-hadoop.jar,就像 ryrobes 为 Hadoop 所做的那样。

如果你找到了访问 elasticsearch 的方法,请告诉我 ;)

HTH,

【讨论】:

我已将配置单元配置为与 MySQL 元存储一起运行。我也在 hive 中创建了一个外部表。类路径设置为 mySql 连接器和 elasticsearch-hadoop 快照 jar。将相同的配置单元配置复制到 SPARK_HOME/conf。使用 -Phive 和 -Phive-thriftserver 构建 spark。安装在 VM 上的 Simba Spark SQL 驱动程序。使用 tableau 的连接到其他数据库 (ODBC) 连接到 spark thrift 服务器。 Spark server、thirft-server 和 elastic search 都在运行。我仍然无法连接到它。您能否提供更多细节,因为可能是错误的。 Tableau 和 Spark 返回的错误消息是什么?您是否在元存储上创建了一个表以与 ES 映射? CREATE EXTERNAL TABLE mytable ( value type, ... ) STORED BY 'org.elasticsearch.hadoop.hive.EsStorageHandler' TBLPROPERTIES('es.resource' = 'index/doctype','es.nodes' = 'node1','es.port' = '9200','es.query' = '?q=*'); 经过几次试验后得到解决。我没有使用正确的驱动程序进行连接。当我使用正确的驱动程序(来自 DataStax)时,我意识到我的配置单元元存储和 spark-thrift-server 在同一个端口上运行。我将 spark-thrift-server 的端口更改为 10001,并建立了成功的连接。 @Nicholas 你在哪里创建了这个表。我在 Hive 中创建了我的表,但我无法在 spark 中看到该表。 @busybug91 例如,您可以从 Spark SQL Shell 或 Hive Shell 创建它。

以上是关于通过 Spark SQL 将 tableau 与 Elastic 搜索连接起来的主要内容,如果未能解决你的问题,请参考以下文章

无法创建数据提取 - Tableau 和 Spark SQL

将 Spark SQL Hive 服务器连接到 Cassandra?

tableau连接spark sql 报错,怎么处理?

Tableau技巧——模糊查询

如何将数据从本地 SQL Server 推送到 AWS 上的 Tableau Server

Tableau 与 Microsoft SQL Server 2017 的连接