【发布时间】:2015-02-23 20:27:54
【问题描述】:
我发现了一个post,它讨论了如何通过 Hive SQL 将 Tableau 连接到 Elastic Search。我想知道是否有办法通过 Spark SQL 连接到 Elastic Search,因为我对 hive 不太熟悉。
谢谢。
【问题讨论】:
标签: elasticsearch hive tableau-api apache-spark-sql
我发现了一个post,它讨论了如何通过 Hive SQL 将 Tableau 连接到 Elastic Search。我想知道是否有办法通过 Spark SQL 连接到 Elastic Search,因为我对 hive 不太熟悉。
谢谢。
【问题讨论】:
标签: elasticsearch hive tableau-api apache-spark-sql
@busybug91,
正确的驱动程序是here 请尝试使用这个。可以解决你的问题。
【讨论】:
@NicholasY 经过几次试验,它得到了解决。我采取的两个步骤:-
一个新问题:我在 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。
【讨论】:
我正在尝试这样做,所以也许我可以帮助您警告一些事情。
首先,使用 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,
【讨论】:
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=*');