AMBARI-8076. Install on a 5 node cluster fails with link creation for libsnappy. (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e5c08c5b Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e5c08c5b Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e5c08c5b Branch: refs/heads/branch-1.7.0 Commit: e5c08c5b5a35c528f44c25b863acaa3fe28bfc44 Parents: 8560215 Author: Andrew Onishuk <[email protected]> Authored: Fri Oct 31 21:38:21 2014 +0200 Committer: Andrew Onishuk <[email protected]> Committed: Fri Oct 31 21:38:21 2014 +0200 ---------------------------------------------------------------------- .../1.3.2/hooks/before-START/scripts/params.py | 1 + .../scripts/shared_initialization.py | 3 +- .../2.0.6/hooks/before-START/scripts/params.py | 1 + .../scripts/shared_initialization.py | 3 +- .../hooks/before-START/test_before_start.py | 69 ++++++++++++++++-- .../hooks/before-START/test_before_start.py | 75 +++++++++++++++++--- 6 files changed, 136 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e5c08c5b/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/params.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/params.py index fc66011..0788c50 100644 --- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/params.py +++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/params.py @@ -33,6 +33,7 @@ user_group = config['configurations']['cluster-env']['user_group'] #hosts hostname = config["hostname"] +current_service = config['serviceName'] ambari_server_hostname = config['clusterHostInfo']['ambari_server_host'][0] rm_host = default("/clusterHostInfo/rm_host", []) slave_hosts = default("/clusterHostInfo/slave_hosts", []) http://git-wip-us.apache.org/repos/asf/ambari/blob/e5c08c5b/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/shared_initialization.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/shared_initialization.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/shared_initialization.py index 81abf65..172abb1 100644 --- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/shared_initialization.py +++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/hooks/before-START/scripts/shared_initialization.py @@ -31,7 +31,8 @@ def setup_hadoop(): only_if="test -f /selinux/enforce" ) - install_snappy() + if params.current_service == "HDFS": + install_snappy() if params.has_namenode: http://git-wip-us.apache.org/repos/asf/ambari/blob/e5c08c5b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py index baf36cc..5bbd36f 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py +++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py @@ -42,6 +42,7 @@ else: hadoop_bin = "/usr/lib/hadoop/sbin" hadoop_home = '/usr' +current_service = config['serviceName'] hadoop_conf_dir = "/etc/hadoop/conf" #security params security_enabled = config['configurations']['cluster-env']['security_enabled'] http://git-wip-us.apache.org/repos/asf/ambari/blob/e5c08c5b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/shared_initialization.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/shared_initialization.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/shared_initialization.py index f70eee8..6fda3f7 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/shared_initialization.py +++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/shared_initialization.py @@ -31,7 +31,8 @@ def setup_hadoop(): only_if="test -f /selinux/enforce" ) - install_snappy() + if params.current_service == "HDFS": + install_snappy() #directories if params.has_namenode: http://git-wip-us.apache.org/repos/asf/ambari/blob/e5c08c5b/ambari-server/src/test/python/stacks/1.3.2/hooks/before-START/test_before_start.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/1.3.2/hooks/before-START/test_before_start.py b/ambari-server/src/test/python/stacks/1.3.2/hooks/before-START/test_before_start.py index d569a95..d27ed5a 100644 --- a/ambari-server/src/test/python/stacks/1.3.2/hooks/before-START/test_before_start.py +++ b/ambari-server/src/test/python/stacks/1.3.2/hooks/before-START/test_before_start.py @@ -21,6 +21,7 @@ limitations under the License. from mock.mock import MagicMock, call, patch from resource_management import * from stacks.utils.RMFTestCase import * +import json @patch("os.path.exists", new = MagicMock(return_value=True)) @patch.object(Hook, "run_custom_hook") @@ -35,10 +36,6 @@ class TestHookBeforeStart(RMFTestCase): self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce', only_if = 'test -f /selinux/enforce', ) - self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-i386-32; ln -sf /usr/lib/libsnappy.so /usr/lib/hadoop/lib/native/Linux-i386-32/libsnappy.so', - ) - self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-amd64-64; ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/Linux-amd64-64/libsnappy.so', - ) self.assertResourceCalled('Directory', '/var/log/hadoop', owner = 'root', group = 'hadoop', @@ -94,6 +91,62 @@ class TestHookBeforeStart(RMFTestCase): self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce', only_if = 'test -f /selinux/enforce', ) + self.assertResourceCalled('Directory', '/var/log/hadoop', + owner = 'root', + group = 'hadoop', + mode = 0775, + recursive = True, + ) + self.assertResourceCalled('Directory', '/var/run/hadoop', + owner = 'root', + group = 'root', + recursive = True, + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/health_check', + content = Template('health_check.j2'), + owner = 'root', + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/log4j.properties', + content = 'log4jproperties\nline2', + owner = 'hdfs', + group = 'hadoop', + mode = 0644, + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/hadoop-metrics2.properties', + content = Template('hadoop-metrics2.properties.j2'), + owner = 'hdfs', + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/task-log4j.properties', + content = StaticFile('task-log4j.properties'), + mode = 0755, + ) + self.assertResourceCalled('Link', '/usr/lib/hadoop/lib/hadoop-tools.jar', + to = '/usr/lib/hadoop/hadoop-tools.jar', + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/configuration.xsl', + owner = 'hdfs', + group = 'hadoop', + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/masters', + owner = 'hdfs', + group = 'hadoop', + ) + self.assertNoMoreResources() + + def test_hook_default_hdfs(self, mockHook): + config_file = "stacks/1.3.2/configs/default.json" + with open(config_file, "r") as f: + default_json = json.load(f) + + default_json['serviceName']= 'HDFS' + self.executeScript("1.3.2/hooks/before-START/scripts/hook.py", + classname="BeforeStartHook", + command="hook", + config_dict=default_json + ) + self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce', + only_if = 'test -f /selinux/enforce', + ) self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-i386-32; ln -sf /usr/lib/libsnappy.so /usr/lib/hadoop/lib/native/Linux-i386-32/libsnappy.so', ) self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-amd64-64; ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/Linux-amd64-64/libsnappy.so', @@ -109,12 +162,16 @@ class TestHookBeforeStart(RMFTestCase): group = 'root', recursive = True, ) + self.assertResourceCalled('File', '/etc/hadoop/conf/commons-logging.properties', + content = Template('commons-logging.properties.j2'), + owner = 'hdfs', + ) self.assertResourceCalled('File', '/etc/hadoop/conf/health_check', content = Template('health_check.j2'), - owner = 'root', + owner = 'hdfs', ) self.assertResourceCalled('File', '/etc/hadoop/conf/log4j.properties', - content = 'log4jproperties\nline2', + content = 'log4jproperties\nline2log4jproperties\nline2\nambari.jobhistory.database=jdbc:postgresql://c6401.ambari.apache.org/ambarirca\nambari.jobhistory.driver=org.postgresql.Driver\nambari.jobhistory.user=mapred\nambari.jobhistory.password=mapred\nambari.jobhistory.logger=${hadoop.root.logger}\n\nlog4j.appender.JHA=org.apache.ambari.log4j.hadoop.mapreduce.jobhistory.JobHistoryAppender\nlog4j.appender.JHA.database=jdbc:postgresql://c6401.ambari.apache.org/ambarirca\nlog4j.appender.JHA.driver=org.postgresql.Driver\nlog4j.appender.JHA.user=mapred\nlog4j.appender.JHA.password=mapred\n\nlog4j.logger.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=DEBUG,JHA\nlog4j.additivity.org.apache.hadoop.mapred.JobHistory$JobHistoryLogger=true\n\n', owner = 'hdfs', group = 'hadoop', mode = 0644, http://git-wip-us.apache.org/repos/asf/ambari/blob/e5c08c5b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py index 54b956e..4b7ffa5 100644 --- a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py +++ b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py @@ -21,6 +21,7 @@ limitations under the License. from mock.mock import MagicMock, call, patch from resource_management import * from stacks.utils.RMFTestCase import * +import json @patch("os.path.exists", new = MagicMock(return_value=True)) @patch.object(Hook, "run_custom_hook", new = MagicMock()) @@ -34,10 +35,6 @@ class TestHookBeforeStart(RMFTestCase): self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce', only_if = 'test -f /selinux/enforce', ) - self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-i386-32; ln -sf /usr/lib/libsnappy.so /usr/lib/hadoop/lib/native/Linux-i386-32/libsnappy.so', - ) - self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-amd64-64; ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/Linux-amd64-64/libsnappy.so', - ) self.assertResourceCalled('Directory', '/var/log/hadoop', owner = 'root', group = 'hadoop', @@ -95,6 +92,68 @@ class TestHookBeforeStart(RMFTestCase): self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce', only_if = 'test -f /selinux/enforce', ) + self.assertResourceCalled('Directory', '/var/log/hadoop', + owner = 'root', + group = 'hadoop', + mode = 0775, + recursive = True, + ) + self.assertResourceCalled('Directory', '/var/run/hadoop', + owner = 'root', + group = 'root', + recursive = True, + ) + self.assertResourceCalled('Directory', '/tmp/hadoop-hdfs', + owner = 'hdfs', + recursive = True, + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/commons-logging.properties', + content = Template('commons-logging.properties.j2'), + owner = 'root', + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/health_check', + content = Template('health_check-v2.j2'), + owner = 'root', + ) + self.assertResourceCalled('File', + '/etc/hadoop/conf/log4j.properties', + mode=0644, + group='hadoop', + owner='hdfs', + content='log4jproperties\nline2log4jproperties\nline2' + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/hadoop-metrics2.properties', + content = Template('hadoop-metrics2.properties.j2'), + owner = 'hdfs', + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/task-log4j.properties', + content = StaticFile('task-log4j.properties'), + mode = 0755, + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/configuration.xsl', + owner = 'hdfs', + group = 'hadoop', + ) + self.assertResourceCalled('File', '/etc/hadoop/conf/masters', + owner = 'hdfs', + group = 'hadoop', + ) + self.assertNoMoreResources() + + def test_hook_default_hdfs(self): + config_file = "stacks/2.0.6/configs/default.json" + with open(config_file, "r") as f: + default_json = json.load(f) + + default_json['serviceName']= 'HDFS' + self.executeScript("2.0.6/hooks/before-START/scripts/hook.py", + classname="BeforeStartHook", + command="hook", + config_dict=default_json + ) + self.assertResourceCalled('Execute', '/bin/echo 0 > /selinux/enforce', + only_if = 'test -f /selinux/enforce', + ) self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-i386-32; ln -sf /usr/lib/libsnappy.so /usr/lib/hadoop/lib/native/Linux-i386-32/libsnappy.so', ) self.assertResourceCalled('Execute', 'mkdir -p /usr/lib/hadoop/lib/native/Linux-amd64-64; ln -sf /usr/lib64/libsnappy.so /usr/lib/hadoop/lib/native/Linux-amd64-64/libsnappy.so', @@ -116,11 +175,11 @@ class TestHookBeforeStart(RMFTestCase): ) self.assertResourceCalled('File', '/etc/hadoop/conf/commons-logging.properties', content = Template('commons-logging.properties.j2'), - owner = 'root', + owner = 'hdfs', ) self.assertResourceCalled('File', '/etc/hadoop/conf/health_check', content = Template('health_check-v2.j2'), - owner = 'root', + owner = 'hdfs', ) self.assertResourceCalled('File', '/etc/hadoop/conf/log4j.properties', @@ -128,7 +187,7 @@ class TestHookBeforeStart(RMFTestCase): group='hadoop', owner='hdfs', content='log4jproperties\nline2log4jproperties\nline2' - ) + ) self.assertResourceCalled('File', '/etc/hadoop/conf/hadoop-metrics2.properties', content = Template('hadoop-metrics2.properties.j2'), owner = 'hdfs', @@ -146,7 +205,7 @@ class TestHookBeforeStart(RMFTestCase): group = 'hadoop', ) self.assertNoMoreResources() - + def test_that_jce_is_required_in_secured_cluster(self): try: self.executeScript("2.0.6/hooks/before-START/scripts/hook.py",
