You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by vb...@apache.org on 2015/08/20 11:12:51 UTC

[2/2] ambari git commit: AMBARI-12803. BE: SQLA Type-2 driver support.(vbrodetskyi)

AMBARI-12803. BE: SQLA Type-2 driver support.(vbrodetskyi)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/59d0632e
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/59d0632e
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/59d0632e

Branch: refs/heads/branch-2.1
Commit: 59d0632e41957516dbcf9dbccdf6bae76ef27e76
Parents: e044c15
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Thu Aug 20 12:12:50 2015 +0300
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Thu Aug 20 12:12:50 2015 +0300

----------------------------------------------------------------------
 ambari-server/src/main/python/ambari-server.py  |  10 +-
 .../python/ambari_server/dbConfiguration.py     |   3 +-
 .../main/python/ambari_server/serverSetup.py    |   7 +-
 .../HIVE/0.12.0.2.0/configuration/hive-env.xml  |   4 +
 .../HIVE/0.12.0.2.0/package/scripts/hive.py     |  22 +-
 .../package/scripts/hive_metastore.py           |  19 +-
 .../0.12.0.2.0/package/scripts/params_linux.py  |  18 +-
 .../OOZIE/4.0.0.2.0/configuration/oozie-env.xml |   4 +
 .../OOZIE/4.0.0.2.0/package/scripts/oozie.py    |  24 +-
 .../4.0.0.2.0/package/scripts/params_linux.py   |  14 +-
 .../OOZIE/4.2.0.2.3/configuration/oozie-env.xml |   4 +
 .../services/HIVE/configuration/hive-env.xml    |   4 +
 .../services/OOZIE/configuration/oozie-env.xml  |   4 +
 .../stacks/2.0.6/OOZIE/test_oozie_server.py     | 209 +++++
 .../2.0.6/configs/oozie_existing_sqla.json      | 821 +++++++++++++++++++
 .../stacks/2.1/HIVE/test_hive_metastore.py      |  88 ++
 16 files changed, 1238 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/python/ambari-server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari-server.py b/ambari-server/src/main/python/ambari-server.py
index 1b02162..524db30 100755
--- a/ambari-server/src/main/python/ambari-server.py
+++ b/ambari-server/src/main/python/ambari-server.py
@@ -359,10 +359,13 @@ def init_parser_options(parser):
   parser.add_option('--databasepassword', default=None, help="Database user password", dest="database_password")
   parser.add_option('--sidorsname', default="sname", help="Oracle database identifier type, Service ID/Service "
                                                           "Name sid|sname", dest="sid_or_sname")
-  parser.add_option('--jdbc-driver', default=None, help="Specifies the path to the JDBC driver JAR file for the " \
-                                                        "database type specified with the --jdbc-db option. Used only with --jdbc-db option.",
+  parser.add_option('--jdbc-driver', default=None, help="Specifies the path to the JDBC driver JAR file or archive " \
+                                                        "with all required files(jdbc jar, libraries and etc), for the " \
+                                                        "database type specified with the --jdbc-db option. " \
+                                                        "Used only with --jdbc-db option. Archive is supported only for" \
+                                                        " sqlanywhere database." ,
                     dest="jdbc_driver")
-  parser.add_option('--jdbc-db', default=None, help="Specifies the database type [postgres|mysql|mssql|oracle|hsqldb] for the " \
+  parser.add_option('--jdbc-db', default=None, help="Specifies the database type [postgres|mysql|mssql|oracle|hsqldb|sqlanywhere] for the " \
                                                     "JDBC driver specified with the --jdbc-driver option. Used only with --jdbc-driver option.",
                     dest="jdbc_db")
   parser.add_option('--cluster-name', default=None, help="Cluster name", dest="cluster_name")
@@ -468,6 +471,7 @@ def fix_database_options(options, parser):
     parser.error("Option --jdbc-db is used only in pair with --jdbc-driver")
   elif options.jdbc_driver is not None and options.jdbc_db is None:
     parser.error("Option --jdbc-driver is used only in pair with --jdbc-db")
+
   if options.sid_or_sname.lower() not in ["sid", "sname"]:
     print "WARNING: Valid values for sid_or_sname are 'sid' or 'sname'. Use 'sid' if the db identifier type is " \
           "Service ID. Use 'sname' if the db identifier type is Service Name"

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/python/ambari_server/dbConfiguration.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/dbConfiguration.py b/ambari-server/src/main/python/ambari_server/dbConfiguration.py
index fa8d6e3..a66738b 100644
--- a/ambari-server/src/main/python/ambari_server/dbConfiguration.py
+++ b/ambari-server/src/main/python/ambari_server/dbConfiguration.py
@@ -330,7 +330,8 @@ class DBMSConfigFactoryLinux(DBMSConfigFactory):
       'mysql',
       'postgres',
       'mssql',
-      'hsqldb'
+      'hsqldb',
+      'sqlanywhere'
     ]
 
     self.DBMS_LIST = [

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/python/ambari_server/serverSetup.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/serverSetup.py b/ambari-server/src/main/python/ambari_server/serverSetup.py
index 045e969..93b393a 100644
--- a/ambari-server/src/main/python/ambari_server/serverSetup.py
+++ b/ambari-server/src/main/python/ambari_server/serverSetup.py
@@ -56,6 +56,8 @@ SE_MODE_PERMISSIVE = "permissive"
 
 PERSISTENCE_TYPE_PROPERTY = "server.persistence.type"
 
+TAR_GZ_ARCHIVE_TYPE = ".tar.gz"
+
 # Non-root user setup commands
 NR_USER_COMMENT = "Ambari user"
 
@@ -858,7 +860,10 @@ def _cache_jdbc_driver(args):
 
   resources_dir = get_resources_location(properties)
 
-  symlink_name = args.jdbc_db + "-jdbc-driver.jar"
+  if args.jdbc_driver.endswith(TAR_GZ_ARCHIVE_TYPE):
+    symlink_name = args.jdbc_db + "-jdbc-driver" + TAR_GZ_ARCHIVE_TYPE
+  else:
+    symlink_name = args.jdbc_db + "-jdbc-driver.jar"
   jdbc_symlink = os.path.join(resources_dir, symlink_name)
   path, jdbc_name = os.path.split(args.jdbc_driver)
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
index d201df5..21c52e1 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/configuration/hive-env.xml
@@ -152,6 +152,10 @@ else
   export HIVE_AUX_JARS_PATH=/usr/lib/hcatalog/share/hcatalog/hcatalog-core.jar
 fi
 export METASTORE_PORT={{hive_metastore_port}}
+
+{% if sqla_db_used %}
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:{{jdbc_libs_dir}}"
+{% endif %}
     </value>
   </property>
   

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
index 6081b39..3bb8f4d 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
@@ -34,6 +34,7 @@ from resource_management.libraries.functions.is_empty import is_empty
 from resource_management.libraries.resources.xml_config import XmlConfig
 from resource_management.libraries.functions.format import format
 from resource_management.core.exceptions import Fail
+from resource_management.core.shell import as_sudo
 
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons import OSConst
@@ -371,10 +372,25 @@ def jdbc_connector():
             sudo = True)
     
     File(params.downloaded_custom_connector,
-         content = DownloadSource(params.driver_curl_source),
-    )
+         content = DownloadSource(params.driver_curl_source))
+
+    # maybe it will be more correcvly to use db type
+    if params.sqla_db_used:
+      untar_sqla_type2_driver = ('tar', '-xvf', params.downloaded_custom_connector, '-C', params.tmp_dir)
+
+      Execute(untar_sqla_type2_driver, sudo = True)
+
+      Execute(as_sudo(['yes', '|', 'cp', params.jars_path_in_archive, params.hive_lib], auto_escape=False),
+              path=["/bin", "/usr/bin/"])
+
+      Directory(params.jdbc_libs_dir,
+                recursive=True)
+
+      Execute(as_sudo(['yes', '|', 'cp', params.libs_path_in_archive, params.jdbc_libs_dir], auto_escape=False),
+              path=["/bin", "/usr/bin/"])
 
-    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, params.target),
+    else:
+      Execute(('cp', '--remove-destination', params.downloaded_custom_connector, params.target),
             #creates=params.target, TODO: uncomment after ranger_hive_plugin will not provide jdbc
             path=["/bin", "/usr/bin/"],
             sudo = True)

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
index 1a6c6c1..b955b12 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
@@ -20,7 +20,7 @@ limitations under the License.
 import os
 
 from resource_management.core.logger import Logger
-from resource_management.core.resources.system import Execute
+from resource_management.core.resources.system import Execute, Directory
 from resource_management.libraries.script import Script
 from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import hdp_select
@@ -33,6 +33,7 @@ from resource_management.libraries.functions.security_commons import get_params_
 from resource_management.libraries.functions.security_commons import validate_security_config_properties
 from resource_management.libraries.functions.security_commons import FILE_TYPE_XML
 from resource_management.core.resources.system import File
+from resource_management.core.shell import as_sudo
 
 from hive import hive
 from hive import jdbc_connector
@@ -176,8 +177,20 @@ class HiveMetastoreDefault(HiveMetastore):
         # download it
         jdbc_connector()
 
-      Execute(('cp', params.target, target_directory),
-        path=["/bin", "/usr/bin/"], sudo = True)
+      if params.sqla_db_used:
+        target_native_libs_directory = format("{target_directory}/native/lib64")
+
+        Execute(as_sudo(['yes', '|', 'cp', params.jars_in_hive_lib, target_directory], auto_escape=False),
+                path=["/bin", "/usr/bin/"])
+
+        Directory(target_native_libs_directory,
+                  recursive=True)
+
+        Execute(as_sudo(['yes', '|', 'cp', params.libs_in_hive_lib, target_native_libs_directory], auto_escape=False),
+                path=["/bin", "/usr/bin/"])
+      else:
+        Execute(('cp', params.target, target_directory),
+                path=["/bin", "/usr/bin/"], sudo = True)
 
       File(os.path.join(target_directory, os.path.basename(params.target)),
         mode = 0644,

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
index b78dd4b..d672c4e 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
@@ -174,6 +174,9 @@ if hive_metastore_db_type == "mssql":
 hive_user = config['configurations']['hive-env']['hive_user']
 #JDBC driver jar name
 hive_jdbc_driver = config['configurations']['hive-site']['javax.jdo.option.ConnectionDriverName']
+# NOT SURE THAT IT'S A GOOD IDEA TO USE PATH TO CLASS IN DRIVER, MAYBE IT WILL BE BETTER TO USE DB TYPE.
+# BECAUSE PATH TO CLASSES COULD BE CHANGED
+sqla_db_used = False
 if hive_jdbc_driver == "com.microsoft.sqlserver.jdbc.SQLServerDriver":
   jdbc_jar_name = "sqljdbc4.jar"
   jdbc_symlink_name = "mssql-jdbc-driver.jar"
@@ -186,14 +189,26 @@ elif hive_jdbc_driver == "org.postgresql.Driver":
 elif hive_jdbc_driver == "oracle.jdbc.driver.OracleDriver":
   jdbc_jar_name = "ojdbc.jar"
   jdbc_symlink_name = "oracle-jdbc-driver.jar"
+elif hive_jdbc_driver == "sap.jdbc4.sqlanywhere.IDriver":
+  jdbc_jar_name = "sajdbc4.jar"
+  jdbc_symlink_name = "sqlanywhere-jdbc-driver.tar.gz"
+  sqla_db_used = True
 
 check_db_connection_jar_name = "DBConnectionVerification.jar"
 check_db_connection_jar = format("/usr/lib/ambari-agent/{check_db_connection_jar_name}")
-hive_jdbc_drivers_list = ["com.microsoft.sqlserver.jdbc.SQLServerDriver","com.mysql.jdbc.Driver","org.postgresql.Driver","oracle.jdbc.driver.OracleDriver"]
+hive_jdbc_drivers_list = ["com.microsoft.sqlserver.jdbc.SQLServerDriver","com.mysql.jdbc.Driver",
+                          "org.postgresql.Driver","oracle.jdbc.driver.OracleDriver","sap.jdbc4.sqlanywhere.IDriver"]
 downloaded_custom_connector = format("{tmp_dir}/{jdbc_jar_name}")
 prepackaged_ojdbc_symlink = format("{hive_lib}/ojdbc6.jar")
 templeton_port = config['configurations']['webhcat-site']['templeton.port']
 
+#constants for type2 jdbc
+if sqla_db_used:
+  jars_path_in_archive = format("{tmp_dir}/sqla-client-jdbc/java/*")
+  libs_path_in_archive = format("{tmp_dir}/sqla-client-jdbc/native/lib64/*")
+  downloaded_custom_connector = format("{tmp_dir}/sqla-client-jdbc.tar.gz")
+  jdbc_libs_dir = format("{hive_lib}/native/lib64")
+  libs_in_hive_lib = format("{jdbc_libs_dir}/*")
 
 #common
 hive_metastore_hosts = config['clusterHostInfo']['hive_metastore_host']
@@ -265,6 +280,7 @@ artifact_dir = format("{tmp_dir}/AMBARI-artifacts/")
 yarn_log_dir_prefix = config['configurations']['yarn-env']['yarn_log_dir_prefix']
 
 target = format("{hive_lib}/{jdbc_jar_name}")
+jars_in_hive_lib = format("{hive_lib}/*.jar")
 
 jdk_location = config['hostLevelParams']['jdk_location']
 driver_curl_source = format("{jdk_location}/{jdbc_symlink_name}")

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/configuration/oozie-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/configuration/oozie-env.xml b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/configuration/oozie-env.xml
index d582581..d5b08c9 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/configuration/oozie-env.xml
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/configuration/oozie-env.xml
@@ -141,6 +141,10 @@ export OOZIE_ADMIN_PORT={{oozie_server_admin_port}}
 #
 # export OOZIE_BASE_URL="http://${OOZIE_HTTP_HOSTNAME}:${OOZIE_HTTP_PORT}/oozie"
 export JAVA_LIBRARY_PATH={{hadoop_lib_home}}/native/Linux-amd64-64
+
+{% if sqla_db_used %}
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:{{jdbc_libs_dir}}"
+{% endif %}
     </value>
   </property>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
index 35df33a..5fd531a 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
@@ -31,6 +31,7 @@ from resource_management.libraries.resources.xml_config import XmlConfig
 from resource_management.libraries.script.script import Script
 from resource_management.core.resources.packaging import Package
 from resource_management.core.shell import as_user
+from resource_management.core.shell import as_sudo
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons import OSConst
 from ambari_commons.inet_utils import download_file
@@ -295,7 +296,7 @@ def download_database_library_if_needed(target_directory = None):
   import params
   jdbc_drivers = ["com.mysql.jdbc.Driver",
     "com.microsoft.sqlserver.jdbc.SQLServerDriver",
-    "oracle.jdbc.driver.OracleDriver"]
+    "oracle.jdbc.driver.OracleDriver","sap.jdbc4.sqlanywhere.IDriver"]
 
   # check to see if the JDBC driver name is in the list of ones that need to
   # be downloaded
@@ -312,9 +313,24 @@ def download_database_library_if_needed(target_directory = None):
   File(params.downloaded_custom_connector,
     content = DownloadSource(params.driver_curl_source))
 
-  Execute(('cp', '--remove-destination', params.downloaded_custom_connector, target_jar_with_directory),
-    path=["/bin", "/usr/bin/"],
-    sudo = True)
+  if params.sqla_db_used:
+    untar_sqla_type2_driver = ('tar', '-xvf', params.downloaded_custom_connector, '-C', params.tmp_dir)
+
+    Execute(untar_sqla_type2_driver, sudo = True)
+
+    Execute(as_sudo(['yes', '|', 'cp', params.jars_path_in_archive, params.oozie_libext_dir], auto_escape=False),
+            path=["/bin", "/usr/bin/"])
+
+    Directory(params.jdbc_libs_dir,
+              recursive=True)
+
+    Execute(as_sudo(['yes', '|', 'cp', params.libs_path_in_archive, params.jdbc_libs_dir], auto_escape=False),
+            path=["/bin", "/usr/bin/"])
+
+  else:
+    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, target_jar_with_directory),
+      path=["/bin", "/usr/bin/"],
+      sudo = True)
 
   File(target_jar_with_directory, owner = params.oozie_user,
     group = params.user_group)

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
index a02594b..6935e93 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py
@@ -190,7 +190,9 @@ else:
   put_shared_lib_to_hdfs_cmd = format("{oozie_setup_sh} sharelib create -fs {fs_root} -locallib {oozie_shared_lib}")
 
 jdbc_driver_name = default("/configurations/oozie-site/oozie.service.JPAService.jdbc.driver", "")
-
+# NOT SURE THAT IT'S A GOOD IDEA TO USE PATH TO CLASS IN DRIVER, MAYBE IT WILL BE BETTER TO USE DB TYPE.
+# BECAUSE PATH TO CLASSES COULD BE CHANGED
+sqla_db_used = False
 if jdbc_driver_name == "com.microsoft.sqlserver.jdbc.SQLServerDriver":
   jdbc_driver_jar = "sqljdbc4.jar"
   jdbc_symlink_name = "mssql-jdbc-driver.jar"
@@ -203,6 +205,10 @@ elif jdbc_driver_name == "org.postgresql.Driver":
 elif jdbc_driver_name == "oracle.jdbc.driver.OracleDriver":
   jdbc_driver_jar = "ojdbc.jar"
   jdbc_symlink_name = "oracle-jdbc-driver.jar"
+elif jdbc_driver_name == "sap.jdbc4.sqlanywhere.IDriver":
+  jdbc_driver_jar = "sajdbc4.jar"
+  jdbc_symlink_name = "sqlanywhere-jdbc-driver.tar.gz"
+  sqla_db_used = True
 else:
   jdbc_driver_jar = ""
   jdbc_symlink_name = ""
@@ -215,6 +221,12 @@ if jdbc_driver_name == "org.postgresql.Driver":
 else:
   target = format("{oozie_libext_dir}/{jdbc_driver_jar}")
 
+#constants for type2 jdbc
+if sqla_db_used:
+  jars_path_in_archive = format("{tmp_dir}/sqla-client-jdbc/java/*")
+  libs_path_in_archive = format("{tmp_dir}/sqla-client-jdbc/native/lib64/*")
+  downloaded_custom_connector = format("{tmp_dir}/sqla-client-jdbc.tar.gz")
+  jdbc_libs_dir = format("{oozie_libext_dir}/native/lib64")
 
 hdfs_share_dir = "/user/oozie/share"
 ambari_server_hostname = config['clusterHostInfo']['ambari_server_host'][0]

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/configuration/oozie-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/configuration/oozie-env.xml b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/configuration/oozie-env.xml
index 17ce7a5..2b8e754 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/configuration/oozie-env.xml
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.2.3/configuration/oozie-env.xml
@@ -94,6 +94,10 @@ export JAVA_LIBRARY_PATH={{hadoop_lib_home}}/native/Linux-amd64-64
 # At least 1 minute of retry time to account for server downtime during
 # upgrade/downgrade
 export OOZIE_CLIENT_OPTS="${OOZIE_CLIENT_OPTS} -Doozie.connection.retry.count=5 "
+
+{% if sqla_db_used %}
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:{{jdbc_libs_dir}}"
+{% endif %}
     </value>
   </property>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
index 6d7434d..3b05dd4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HIVE/configuration/hive-env.xml
@@ -69,6 +69,10 @@ elif [ -d "/usr/hdp/current/hive-webhcat/share/hcatalog" ]; then
 fi      
 
 export METASTORE_PORT={{hive_metastore_port}}
+
+{% if sqla_db_used %}
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:{{jdbc_libs_dir}}"
+{% endif %}
     </value>
   </property>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/configuration/oozie-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/configuration/oozie-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/configuration/oozie-env.xml
index 99ca2dc..0611cac 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/configuration/oozie-env.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/OOZIE/configuration/oozie-env.xml
@@ -100,6 +100,10 @@ export CATALINA_OPTS="${CATALINA_OPTS} -Xmx2048m -XX:MaxPermSize=256m "
 {% else %}
 export CATALINA_OPTS="${CATALINA_OPTS} -Xmx2048m"
 {% endif %}
+
+{% if sqla_db_used %}
+export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:{{jdbc_libs_dir}}"
+{% endif %}
     </value>
   </property>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/59d0632e/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
index 3e05542..525963d 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
@@ -253,6 +253,215 @@ class TestOozieServer(RMFTestCase):
         sudo = True,
     )
 
+
+  def test_configure_existing_sqla(self):
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/oozie_server.py",
+                       classname = "OozieServer",
+                       command = "configure",
+                       config_file="oozie_existing_sqla.json",
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES
+    )
+    self.assertResourceCalled('HdfsResource', '/user/oozie',
+                              security_enabled = False,
+                              hadoop_bin_dir = '/usr/bin',
+                              keytab = UnknownConfigurationMock(),
+                              default_fs = 'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_site = self.getConfig()['configurations']['hdfs-site'],
+                              kinit_path_local = '/usr/bin/kinit',
+                              principal_name = UnknownConfigurationMock(),
+                              user = 'hdfs',
+                              owner = 'oozie',
+                              hadoop_conf_dir = '/etc/hadoop/conf',
+                              type = 'directory',
+                              action = ['create_on_execute'],
+                              mode = 0775,
+                              )
+    self.assertResourceCalled('HdfsResource', None,
+                              security_enabled = False,
+                              hadoop_bin_dir = '/usr/bin',
+                              keytab = UnknownConfigurationMock(),
+                              default_fs = 'hdfs://c6401.ambari.apache.org:8020',
+                              hdfs_site = self.getConfig()['configurations']['hdfs-site'],
+                              kinit_path_local = '/usr/bin/kinit',
+                              principal_name = UnknownConfigurationMock(),
+                              user = 'hdfs',
+                              action = ['execute'],
+                              hadoop_conf_dir = '/etc/hadoop/conf',
+                              )
+    self.assertResourceCalled('Directory', '/etc/oozie/conf',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('XmlConfig', 'oozie-site.xml',
+                              group = 'hadoop',
+                              conf_dir = '/etc/oozie/conf',
+                              mode = 0664,
+                              configuration_attributes = {u'final': {u'oozie.service.CallableQueueService.queue.size': u'true',
+                                                                     u'oozie.service.PurgeService.purge.interval': u'true'}},
+                              owner = 'oozie',
+                              configurations = self.getConfig()['configurations']['oozie-site'],
+                              )
+    self.assertResourceCalled('File', '/etc/oozie/conf/oozie-env.sh',
+                              content = InlineTemplate(self.getConfig()['configurations']['oozie-env']['content']),
+                              owner = 'oozie',
+                              )
+    self.assertResourceCalled('File', '/etc/oozie/conf/oozie-log4j.properties',
+                              content = 'log4jproperties\nline2',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              mode = 0644,
+                              )
+    self.assertResourceCalled('File', '/etc/oozie/conf/adminusers.txt',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/oozie/conf/hadoop-config.xml',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/oozie/conf/oozie-default.xml',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('Directory', '/etc/oozie/conf/action-conf',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/etc/oozie/conf/action-conf/hive.xml',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('File', '/var/run/oozie/oozie.pid',
+                              action = ['delete'],
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1'",
+                              )
+    self.assertResourceCalled('Directory', '/usr/lib/oozie//var/tmp/oozie',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/var/run/oozie',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/var/log/oozie',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/var/tmp/oozie',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/hadoop/oozie/data',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/oozie',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server/webapps/',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server/conf',
+                              owner = 'oozie',
+                              cd_access = 'a',
+                              group = 'hadoop',
+                              recursive = True,
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Directory', '/var/lib/oozie/oozie-server',
+                              owner = 'oozie',
+                              recursive = True,
+                              group = 'hadoop',
+                              mode = 0755,
+                              cd_access = 'a',
+                              )
+    self.assertResourceCalled('Directory', '/usr/lib/oozie/libext',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Execute', ('tar', '-xvf', '/usr/lib/oozie/oozie-sharelib.tar.gz', '-C', '/usr/lib/oozie'),
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1' || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]]",
+                              sudo = True,
+                              )
+    self.assertResourceCalled('Execute', ('cp', '/usr/share/HDP-oozie/ext-2.2.zip', '/usr/lib/oozie/libext'),
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1'",
+                              sudo = True,
+                              )
+    self.assertResourceCalled('Execute', ('chown', u'oozie:hadoop', '/usr/lib/oozie/libext/ext-2.2.zip'),
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1'",
+                              sudo = True,
+                              )
+    self.assertResourceCalled('Execute', ('chown', '-RL', u'oozie:hadoop', '/var/lib/oozie/oozie-server/conf'),
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1'",
+                              sudo = True,
+                              )
+    self.assertResourceCalled('File', '/tmp/sqla-client-jdbc.tar.gz',
+                              content = DownloadSource('http://c6401.ambari.apache.org:8080/resources//sqlanywhere-jdbc-driver.tar.gz'),
+                              )
+    self.assertResourceCalled('Execute', ('tar', '-xvf', '/tmp/sqla-client-jdbc.tar.gz', '-C', '/tmp'),
+                              sudo = True,
+                              )
+    self.assertResourceCalled('Execute', 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E yes | cp /tmp/sqla-client-jdbc/java/* /usr/lib/oozie/libext',
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('Directory', '/usr/lib/oozie/libext/native/lib64',
+                              recursive = True,
+                              )
+    self.assertResourceCalled('Execute', 'ambari-sudo.sh [RMF_ENV_PLACEHOLDER] -H -E yes | cp /tmp/sqla-client-jdbc/native/lib64/* /usr/lib/oozie/libext/native/lib64',
+                              path = ['/bin', '/usr/bin/'],
+                              )
+    self.assertResourceCalled('File', '/usr/lib/oozie/libext/sajdbc4.jar',
+                              owner = 'oozie',
+                              group = 'hadoop',
+                              )
+    self.assertResourceCalled('Execute', 'ambari-sudo.sh cp /usr/lib/falcon/oozie/ext/falcon-oozie-el-extension-*.jar /usr/lib/oozie/libext',
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1'",
+                              )
+    self.assertResourceCalled('Execute', 'ambari-sudo.sh chown oozie:hadoop /usr/lib/oozie/libext/falcon-oozie-el-extension-*.jar',
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1'",
+                              )
+    self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war ',
+                              not_if = "ambari-sudo.sh su oozie -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1' || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]] && test -f /usr/lib/oozie/.prepare_war_cmd && [[ `cat /usr/lib/oozie/.prepare_war_cmd` == 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war ' ]]",
+                              user = 'oozie',
+                              )
+    self.assertResourceCalled('File', '/usr/lib/oozie/.hashcode',
+                              content = 'abc123hash',
+                              mode = 0644,
+                              )
+    self.assertResourceCalled('File', '/usr/lib/oozie/.prepare_war_cmd',
+                              content = 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war ',
+                              mode = 0644,
+                              )
+    self.assertResourceCalled('Execute', ('chown', '-R', u'oozie:hadoop', '/var/lib/oozie/oozie-server'),
+                              sudo = True,
+                              )
+    self.assertNoMoreResources()
+
+
   @patch("os.path.isfile")
   def test_start_default(self, isfile_mock):
     isfile_mock.return_value = True