I have what is probably a stupid Java question. I’ve spun up a Docker container of Elasticsearch v7.4.0, and I’m loving the “elasticsearch-sql-cli” script you can use to submit SQL-like queries to ES. Great stuff! The only hitch is, I have to run the script from within the container.
The online documentation (here) says “The jar containing [elasticsearch-sql-cli] is a stand alone Java application and the scripts just launch it. You can move it around to other machines without having to install Elasticsearch on them.” That sounded great. So I copied “elasticsearch-sql-cli,” the Java Jar file, plus two other files that “elasticsearch-sql-cli” referenced. (“elasticsearch-env” and “x-pack-env,” all in ES_HOME/bin/)
Of course, when transplanted to a remote machine, the script did not work. (Yes, the remote machine can ping the ES Docker container.) I took a look at “elasticsearch-sql-cli,” saw that it statically pointed to the other files in their original file locations, and then edited the script:
#!/bin/bash
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License;
# you may not use this file except in compliance with the Elastic License.
source /home/me/es_sql_script/elasticsearch-env
source /home/me/es_sql_script/x-pack-env
CLI_JAR="/home/me/es_sql_script/elasticsearch-sql-cli-7.4.0.jar"
exec \
"$JAVA" \
-jar "$CLI_JAR" \
"$@"
But of course, that didn’t work, either. So I wonder if I’m misunderstanding what the documentation means when it says “You can move it around to other machines.” Am I to just move the jar file and write a Java wrapper program that launches it? Or is it meant to be executed directly from the command line? I (obviously) don’t know much about jar files, but I don’t think Elastic intended either of those as solutions.
@redapplesonly I don't think you need the script. Can you try ./java -cp elasticsearch-sql-cli-7.4.0.jar org.elasticsearch.xpack.sql.cli.Cli http://localhost:9200 ? (changing the url to your node accordingly, of course)
And I agree with you, the docs are not clear. I followed the steps I assumed the docs are suggesting and ended up with an unworking cli (appeared to be hanging).
I didn't mean to imply that the documentation was unclear. I write technical docs myself, and frequently, I summarize things that are very clear to me, but may not be for my readers. My sense is that is what happened here.
I tried your suggestion, but the "org.elasticsearch.xpack.sql.cli.Cli" package seems to be a stumbling block:
me@ubuntu1:~#
me@ubuntu1:~# java -cp ./elasticsearch-sql-cli-7.4.0.jar org.elasticsearch.xpack.sql.cli.Cli http://10.10.10.10:9200
Error: Could not find or load main class org.elasticsearch.xpack.sql.cli.Cli
me@ubuntu1:~#
I'm unclear if your command would instruct Java to download the package or try to access it from a local file. When I went online and looked for that file, and found two links, here and here. Neither seemed to be what I as looking for, however. At least your version ran, even if it hung.
I suspect there isn't a viable solution or workaround for this yet. Can you point me to where I could make a suggestion for submit a bug for future versions of ES? Thank you!
@redapplesonly that jar file should come with your Elasticsearch installation. And you mentioned it already in your attempts to make this work... CLI_JAR="/home/me/es_sql_script/elasticsearch-sql-cli-7.4.0.jar" one of those mentions.
The CLI class resides in this jar file and when using java -cp it's telling java to use in its classpath the jar file mentioned above, go look inside for the Cli.class file and use that.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.