mirror of
https://github.com/apache/impala.git
synced 2025-12-19 18:12:08 -05:00
IMPALA-5333: Add support for Impala to work with ADLS
This patch leverages the AdlFileSystem in Hadoop to allow Impala to talk to the Azure Data Lake Store. This patch has functional changes as well as adds test infrastructure for testing Impala over ADLS. We do not support ACLs on ADLS since the Hadoop ADLS connector does not integrate ADLS ACLs with Hadoop users/groups. For testing, we use the azure-data-lake-store-python client from Microsoft. This client seems to have some consistency issues. For example, a drop table through Impala will delete the files in ADLS, however, listing that directory through the python client immediately after the drop, will still show the files. This behavior is unexpected since ADLS claims to be strongly consistent. Some tests have been skipped due to this limitation with the tag SkipIfADLS.slow_client. Tracked by IMPALA-5335. The azure-data-lake-store-python client also only works on CentOS 6.6 and over, so the python dependencies for Azure will not be downloaded when the TARGET_FILESYSTEM is not "adls". While running ADLS tests, the expectation will be that it runs on a machine that is at least running CentOS 6.6. Note: This is only a test limitation, not a functional one. Clusters with older OSes like CentOS 6.4 will still work with ADLS. Added another dependency to bootstrap_build.sh for the ADLS Python client. Testing: Ran core tests with and without TARGET_FILESYSTEM as 'adls' to make sure that all tests pass and that nothing breaks. Change-Id: Ic56b9988b32a330443f24c44f9cb2c80842f7542 Reviewed-on: http://gerrit.cloudera.org:8080/6910 Tested-by: Impala Public Jenkins Reviewed-by: Sailesh Mukil <sailesh@cloudera.com>
This commit is contained in:
@@ -60,6 +60,10 @@ COMPILED_REQS_PATH = os.path.join(DEPS_DIR, "compiled-requirements.txt")
|
||||
# by the compiled requirements step.
|
||||
KUDU_REQS_PATH = os.path.join(DEPS_DIR, "kudu-requirements.txt")
|
||||
|
||||
# Requirements for the ADLS test client step, which depends on Cffi (C Foreign Function
|
||||
# Interface) being installed by the compiled requirements step.
|
||||
ADLS_REQS_PATH = os.path.join(DEPS_DIR, "adls-requirements.txt")
|
||||
|
||||
def delete_virtualenv_if_exist():
|
||||
if os.path.exists(ENV_DIR):
|
||||
shutil.rmtree(ENV_DIR)
|
||||
@@ -213,6 +217,18 @@ def install_compiled_deps_if_possible():
|
||||
mark_reqs_installed(COMPILED_REQS_PATH)
|
||||
return True
|
||||
|
||||
def install_adls_deps():
|
||||
# The ADLS dependencies require that the OS is at least CentOS 6.6 or above,
|
||||
# which is why we break this into a seperate step. If the target filesystem is
|
||||
# ADLS, the expectation is that the dev environment is running at least CentOS 6.6.
|
||||
if reqs_are_installed(ADLS_REQS_PATH):
|
||||
LOG.debug("Skipping ADLS deps: matching adls-installed-requirements.txt found")
|
||||
return True
|
||||
if os.environ.get('TARGET_FILESYSTEM') == "adls":
|
||||
LOG.info("Installing ADLS packages into the virtualenv")
|
||||
exec_pip_install(["-r", ADLS_REQS_PATH])
|
||||
mark_reqs_installed(ADLS_REQS_PATH)
|
||||
|
||||
def install_kudu_client_if_possible():
|
||||
'''Installs the Kudu python module if possible, which depends on the toolchain and
|
||||
the compiled requirements in compiled-requirements.txt. If the toolchain isn't
|
||||
@@ -348,3 +364,4 @@ if __name__ == "__main__":
|
||||
setup_virtualenv_if_not_exists()
|
||||
if install_compiled_deps_if_possible():
|
||||
install_kudu_client_if_possible()
|
||||
install_adls_deps()
|
||||
|
||||
Reference in New Issue
Block a user