通过 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?