Our Community is getting an upgrade! To get everything ready for the relaunch, we’ll be placing the site in read-only mode starting September 21st.
We really appreciate your understanding while we get things set up behind the scenes. Catch up on all the exciting details about the move here.
Need help or have questions? Drop us a line at [email protected]
Created 08-05-2016 10:37 PM
Hi,
I'm writing a script that will set up the necessary classpath on a Spark cluster managed by Ambari.
Originally, I had a script that would just edit /etc/spark/conf/spark-defaults.conf directly. However, as discussed here, that was bad solution since Ambari regularly overwrites that file with whatever configuration is registered with Ambari.
Therefore, I am now using the configs.sh script as described here to make these adjustments.
I am looking for a way to determine the AMBARI_HOST and CLUSTER_NAME arguments via the command line. Here is what I have so far:
#!/usr/bin/env bash
ambari_host= # TODO: some command to find this out
cluster_name= # TODO: some command to find this out
config_types=("spark.executor.extraClassPath" "spark.driver.extraClassPath")
phoenix_jar="$(ls /usr/hdp/current/phoenix-client/phoenix-*-client-spark.jar)"
sqljdbc_jar="$(ls /usr/share/java/sqljdbc*.jar)"
jars="$phoenix_jar:$sqljdbc_jar"
for config_type in "${config_types[@]}"; do
/var/lib/ambari-server/resources/scripts/configs.sh \
set "$ambari_host" "$cluster_name" spark-defaults "$config_type" "$jars"
done
I can elaborate on anything that's unclear. Thanks in advance!
Edit: thank you everyone for the answers! I wish I could accept all of them.
For posterity, here's what I ended up with:
#!/usr/bin/env bash
ambari_user="$1"
ambari_password="$2"
ambari_port=8080
ambari_host="$(/opt/hostname_scripts/hostname.sh)"
cluster_name="$(curl -u ${ambari_user}:${ambari_password} -i -H 'X-Requested-By: ambari' http://$ambari_host:$ambari_port/api/v1/clusters | sed -n 's/.*"cluster_name" : "\([^\"]*\)".*/\1/p')"
config_types=("spark.executor.extraClassPath" "spark.driver.extraClassPath")
phoenix_jar="$(ls /usr/hdp/current/phoenix-client/phoenix-*-client-spark.jar)"
sqljdbc_jar="$(ls /usr/share/java/sqljdbc*.jar)"
jars="$phoenix_jar:$sqljdbc_jar"
for config_type in "${config_types[@]}"; do
/var/lib/ambari-server/resources/scripts/configs.sh -u "$ambari_user" -p "$ambari_password" -port "$ambari_port" set "$ambari_host" "$cluster_name" spark-defaults "$config_type" "$jars" > /dev/null
done This was also a valuable resource.
[3] http://lecluster.delaurent.com/one-shot-backup-all-config-files-with-ambari-api/
Created 08-08-2016 01:34 AM
@Zach Kirsch here is how I usually detect the cluster name using parsing the json output via sed
export SERVICE=ZEPPELIN export PASSWORD=admin export AMBARI_HOST=localhost #detect name of cluster output=`curl -u admin:$PASSWORD -i -H 'X-Requested-By: ambari' http://$AMBARI_HOST:8080/api/v1/clusters` CLUSTER=`echo $output | sed -n 's/.*"cluster_name" : "\([^\"]*\)".*/\1/p'` echo $CLUSTER
Created 08-06-2016 02:42 AM
1) I don't know what you mean by AMBARI_HOST? Is it where your ambari server is installed? From any of the agent hosts, you can find the server host from : /etc/ambari-agent/conf/ambari-agent.ini.
Look for the entry [server] hostname=$SERVER_HOST
2) Are you ok using API?
You can get the cluster name by running :
curl --user admin:admin http://$AMBARI_HOST:8080/api/v1/clusters/
This will return you a response of the type :
{ "href" : "http://$AMBARI_HOST:8080/api/v1/clusters/", "items" : [ { "href" : "http://$AMBARI_HOST:8080/api/v1/clusters/clustername", "Clusters" : { "cluster_name" : "clustername", "version" : "version" } } ]}You may then extract the cluster name.
Hope this helps!
Created 08-06-2016 07:11 PM
1) To find out cluster_name, you can either use the api curl --user admin:admin http://$AMBARI_SERVER:8080/api/v1/clusters/ as mentioned by Shreya,
Or you can query the database for table 'clusters' as below :
select cluster_name from clusters;
2) If you are looking to find out ambari server host, then as @sbhat mentioned, you can grep ambari-agent.ini. Below command would do :
grep "hostname" /etc/ambari-agent/conf/ambari-agent.ini
But if you are looking for the host on which particular spark component is installed, then please use this api :
curl --user admin:admin http://$AMBARI_SERVER:8080/api/v1/clusters/<cluster_name>/services/SPARK/<component_name>
From the response, parse the json for the field 'host_components'
Created 08-08-2016 01:34 AM
@Zach Kirsch here is how I usually detect the cluster name using parsing the json output via sed
export SERVICE=ZEPPELIN export PASSWORD=admin export AMBARI_HOST=localhost #detect name of cluster output=`curl -u admin:$PASSWORD -i -H 'X-Requested-By: ambari' http://$AMBARI_HOST:8080/api/v1/clusters` CLUSTER=`echo $output | sed -n 's/.*"cluster_name" : "\([^\"]*\)".*/\1/p'` echo $CLUSTER
Created 08-08-2016 03:24 AM
You can get Ambari server hostname from ambari-agent.ini file.
example:
[root@kknode3 ~]# cat /etc/ambari-agent/conf/ambari-agent.ini |grep -i host hostname = kknode1.openstacklocal