Goal
How to use REST API to submit queries to DrillEnv
Drill 1.4Solution
1. When authentication is not enabled(By default)
Example:curl -v -X POST -H "Content-Type: application/json" -d '{"queryType":"SQL", "query": "select * from sys.version"}' http://localhost:8047/query.jsonSample output:
* About to connect() to localhost port 8047 (#0) * Trying ::1... connected * Connected to localhost (::1) port 8047 (#0) > POST /query.json HTTP/1.1 > User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 > Host: localhost:8047 > Accept: */* > Content-Type: application/json > Content-Length: 57 > < HTTP/1.1 200 OK < Set-Cookie: JSESSIONID=5066jbscw9ii5hdxd9cb5k3n;Path=/ < Expires: Thu, 01 Jan 1970 00:00:00 GMT < Content-Type: application/json < Content-Length: 444 < Server: Jetty(9.1.5.v20140505) < { "columns" : [ "version", "commit_id", "commit_message", "commit_time", "build_email", "build_time" ], "rows" : [ { "build_email" : "Unknown", "commit_id" : "2756d168daded5ac4cd8813593ec0270598d04fc", "build_time" : "20.01.2016 @ 17:56:05 UTC", "commit_time" : "20.01.2016 @ 03:53:38 UTC", "commit_message" : "MD-669: Set the hasLimit0 flag in PlannerSettings (continuation of MD-649).", "version" : "1.4.0" } ] * Connection #0 to host localhost left intact * Closing connection #0
2. When authentication is enabled(with default HTTP)
Above curl command will fail with error message "HTTP 405 Method Not Allowed" which is expected. Here are 2 steps to make it work:Step 1: Create a cookie file by providing the username and password
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -k -c cookies.txt -s -d "j_username=mapr" -d "j_password=mapr" http://localhost:8047/j_security_checkAfter that, you can see a cookies.txt file created:
$ cat cookies.txt # Netscape HTTP Cookie File # http://curl.haxx.se/rfc/cookie_spec.html # This file was generated by libcurl! Edit at your own risk. localhost FALSE / FALSE 0 JSESSIONID 9e81s29cdyv51iiys6zh821tmStep 2: Using that cookie file to run the query
curl -k -b cookies.txt -v -X POST -H "Content-Type: application/json" -d '{"queryType":"SQL", "query": "select * from sys.version"}' http://localhost:8047/query.json
3. When both authentication and HTTPS are enabled.
HTTPS should be used together with authentication if you want to use REST API.One sample drill-override.conf is:
drill.exec: { cluster-id: "my_cluster_com-drillbits", zk.connect: "v1.poc.com:5181,v2.poc.com:5181,v3.poc.com:5181", impersonation.enabled: true, http.ssl_enabled: true, security.user.auth { enabled: true, packages += "org.apache.drill.exec.rpc.user.security", impl: "pam", pam_profiles: [ "sudo", "login" ] } }The command are basically the same as above #2. The only thing different is to change "http" to "https".
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -k -c cookies.txt -s -d "j_username=mapr" -d "j_password=mapr" https://localhost:8047/j_security_check curl -k -b cookies.txt -v -X POST -H "Content-Type: application/json" -d '{"queryType":"SQL", "query": "select * from sys.version"}' https://localhost:8047/query.json
No comments:
Post a Comment