예제 #1
0
    def updateJobProperties(cls,
                            propFile,
                            properties=None,
                            haEnabled=False,
                            debug=False):
        fileSystemName = Hadoop.getFSDefaultValue()
        jobTrackerIP = MAPRED.getJobtrackerAddress()
        jobTracker = jobTrackerIP[0] + ":" + jobTrackerIP[1]

        if not properties:
            properties = {}
        if not properties.has_key('nameNode'):
            properties['nameNode'] = fileSystemName
        if not properties.has_key('jobTracker'):
            properties['jobTracker'] = jobTracker

        if "hcatalog" in propFile:
            if Hadoop.isSecure():
                kerberosPrincipal = Hive.getConfigValue(
                    "hive.metastore.kerberos.principal")
                properties[
                    'hive.metastore.kerberos.principal'] = kerberosPrincipal

            logger.info("Updating for hcatalog workflow")
            hcatNode = Hive.getConfigValue("hive.metastore.uris").replace(
                'thrift', 'hcat')
            logger.info("Hcat node is " + hcatNode)
            properties['hcatNode'] = hcatNode

        if Hadoop.isSecure():
            # determine the namenode and the jobtracker principal
            nnPrincipal = None
            if haEnabled:
                nnPrincipal = HDFS.getNameNodePrincipal().replace(
                    '_HOST', HDFS.getNamenodeByState('active'))
            else:
                nnPrincipal = HDFS.getNameNodePrincipal().replace(
                    '_HOST',
                    HDFS.getNamenodeHttpAddress()[0])
            jtPrincipal = MAPRED.getMasterPrincipal().replace(
                '_HOST', jobTrackerIP[0])
            properties['dfs.namenode.kerberos.principal'] = nnPrincipal
            properties['mapreduce.jobtracker.kerberos.principal'] = jtPrincipal

        wfPath = util.getPropertyValueFromFile(propFile,
                                               "oozie.wf.application.path")
        if wfPath != None and wfPath.find("hdfs://localhost:9000") != -1:
            wfPath = wfPath.replace("hdfs://localhost:9000", fileSystemName)
            logger.info("Value of replaced oozie.wf.application.path is " +
                        wfPath)
            properties['oozie.wf.application.path'] = wfPath

        util.writePropertiesToFile(propFile, propFile, properties)

        if debug:
            logger.info('Content of properties file %s' % propFile)
            f = open(propFile, 'r')
            # print the file to the console
            logger.info(f.read())
            f.close()
예제 #2
0
 def share_lib_update(cls, fs=None):
     # only need to do this on windows
     oozie_server = cls.getOozieUrl()
     cmd = "  admin -oozie " + oozie_server + "  -sharelibupdate"
     if Hadoop.isSecure():
         cmd = " -Doozie.auth.token.cache=false " + cmd
     return cls.runas(cls._oozie_user, cmd)
예제 #3
0
    def submit_storm_hive_topology(cls, tcId, className, args,
                                   useStandaloneCmd):
        if Hadoop.isSecure():
            if Config.hasOption('machine', 'USER_REALM'):
                user_realm = Config.get('machine', 'USER_REALM', '')
            else:
                nnKerbPrincipal = HDFS.getNameNodePrincipal(defaultValue='')
                atloc = nnKerbPrincipal.find("@")
                if (atloc != -1):
                    user_realm = nnKerbPrincipal[atloc:]
            if user_realm != None:
                args += " " + Machine.getHeadlessUserKeytab(
                    Config.getEnv('USER')) + " " + Config.getEnv(
                        'USER') + '@' + user_realm

        exit_code, stdout = Storm.runStormHdfsTopology(
            TARGET_HIVE_STORM_JAR,
            className,
            args,
            None,
            logoutput=True,
            inBackground=False,
            useStandaloneCmd=useStandaloneCmd)
        logger.info(exit_code)

        ruAssert("Storm", exit_code == 0,
                 "[StormHiveSubmit] %s Failed" % (tcId))
예제 #4
0
    def runas(cls,
              user,
              cmd,
              cwd=None,
              env=None,
              logoutput=True,
              runInBackground=False):
        runCmd = Config.get('pig', 'PIG_CMD') + " " + cmd
        # initialize env
        if not env:
            env = {}
        # get kerberos ticket
        if Hadoop.isSecure():
            if user is None:
                user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            env['KRB5CCNAME'] = kerbTicket
            user = None

        if runInBackground:
            return Machine.runinbackgroundAs(user, runCmd, cwd=cwd, env=env)
        else:
            return Machine.runas(user,
                                 runCmd,
                                 cwd=cwd,
                                 env=env,
                                 logoutput=logoutput)
예제 #5
0
    def getHSIInstances(cls):
        """
    Returns the list of active and passive hive server interactive instances.
    """

        hsi_dict = {'active': [], 'passive': []}
        zkhosts = Zookeeper.getZKHosts()
        if Hadoop.isSecure():
            zNode = 'hs2ActivePassiveHA-sasl'
        else:
            zNode = 'hs2ActivePassiveHA-unsecure'
        exit_code, stdout = Zookeeper.runZKCli("ls /%s/instances" % zNode, server=zkhosts[0])
        instances = stdout.split('\n')[-1]
        logger.info(instances)
        if instances == '[]':
            return hsi_dict
        for each_bracket in ['[', ']']:
            instances = instances.replace(each_bracket, '')
        instances_list = instances.split(', ')
        for each_instance in instances_list:
            exit_code, out = Zookeeper.runZKCli("get /%s/instances/%s" % (zNode, each_instance), server=zkhosts[0])
            for line in out.split("\n"):
                match = re.search(".*JSONServiceRecord.*", line)
                if match:
                    json_data = line
                    break
            instance_dict = ast.literal_eval(json_data)
            instance_host = instance_dict['hive.server2.thrift.bind.host']
            if instance_dict['internal'][0]['api'] == 'passiveEndpoint':
                hsi_dict['passive'].append(instance_host)
            else:
                hsi_dict['active'].append(instance_host)
        logger.info(hsi_dict)
        return hsi_dict
예제 #6
0
    def setup_storm_hdfs_topology(cls, useStandaloneCmd):
        storm_version = Storm.getVersion(useStandaloneCmd=True)
        try:
            file_obj = open(HDFS_CONFIG_FILE, 'w')
            if Hadoop.isSecure():
                file_obj.write('hdfs.keytab.file: ' +
                               Machine.getHeadlessUserKeytab(
                                   user=HADOOPQA_USER) + '\n')
                file_obj.write('hdfs.kerberos.principal: ' +
                               Machine.get_user_principal(user=HADOOPQA_USER) +
                               '\n')
        finally:
            file_obj.close()

        HDFS.createDirectory("/tmp/mySeqTopology", HDFS_USER, "777", False)
        HDFS.createDirectory("/tmp/dest", HDFS_USER, "777", False)
        HDFS.createDirectory("/tmp/dest2", HDFS_USER, "777", False)
        HDFS.createDirectory("/tmp/foo", HDFS_USER, "777", False)
        HDFS.createDirectory("/tmp/trident", HDFS_USER, "777", False)
        HDFS.createDirectory("/tmp/trident-seq", HDFS_USER, "777", False)

        Machine.copy(JAVA_HDFS_SRC_DIR,
                     LOCAL_HDFS_WORK_DIR,
                     user=None,
                     passwd=None)
        if not Machine.isWindows():
            (exit_code, _) = Maven.run('package',
                                       cwd=LOCAL_HDFS_WORK_DIR,
                                       env={
                                           HADOOP_VERSION_MAVEN_PARAMETER:
                                           HADOOP_VERSION,
                                           STORM_VERSION_MAVEN_PARAMETER:
                                           storm_version,
                                           HADOOP_CONF_MAVEN_PARAMETER:
                                           HADOOP_CONF,
                                           HDFS_FILE_MAVEN_PARAMETER:
                                           HDFS_FILE,
                                           HADOOP_CORE_MAVEN_PARAMETER:
                                           HADOOP_CONF,
                                           CORE_FILE_MAVEN_PARAMETER:
                                           CORE_FILE,
                                           PUBLIC_REPO_MAVEN_PARAMETER:
                                           Maven.getPublicRepoUrl()
                                       })
        else:
            filepath = os.path.join(MOD_CONF_PATH, "core-site.xml")
            (exit_code, _) = Maven.run(
                'package -D%s=%s -D%s=%s -D%s=%s -D%s=%s -D%s=%s -D%s=%s -D%s=%s'
                % (HADOOP_VERSION_MAVEN_PARAMETER, HADOOP_VERSION,
                   STORM_VERSION_MAVEN_PARAMETER, storm_version,
                   HADOOP_CONF_MAVEN_PARAMETER, HADOOP_CONF,
                   HDFS_FILE_MAVEN_PARAMETER, HDFS_FILE,
                   HADOOP_CORE_MAVEN_PARAMETER, HADOOP_CONF,
                   CORE_FILE_MAVEN_PARAMETER, CORE_FILE,
                   PUBLIC_REPO_MAVEN_PARAMETER, Maven.getPublicRepoUrl()),
                cwd=LOCAL_HDFS_WORK_DIR)
        ruAssert("Storm", exit_code == 0,
                 "[StormHDFSSetup] maven package command failed")
예제 #7
0
    def runOozieJobsCmdAs(cls,
                          user,
                          cmd,
                          cwd=None,
                          env=None,
                          logoutput=True,
                          retry=False,
                          num_of_retries=5,
                          wait=30,
                          oozie_server=None):
        if not env:
            env = {}
        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            env['KRB5CCNAME'] = kerbTicket
            user = None

        # if oozie server is not sent find it.
        logger.info("OOZIE SERVER:%s" % oozie_server)
        if not oozie_server:
            oozie_server = cls.getOozieUrl()
        logger.info("OOZIE SERVER:%s" % oozie_server)
        env['JAVA_HOME'] = Config.get("machine", "JAVA_HOME")
        if Machine.type() == 'Windows':
            paramsList = cmd.split()
            escapedCmd = ""
            for param in paramsList:
                if param[0] != '"' and param[-1] != '"':
                    escapedCmd = escapedCmd + "\"" + param + "\"" + " "
                else:
                    escapedCmd = escapedCmd + param + " "

            oozie_cmd = OOZIE_CMD + " jobs -oozie " + oozie_server + "  " + escapedCmd
        else:
            oozie_cmd = OOZIE_CMD + " jobs -oozie " + oozie_server + "  " + cmd
        exit_code, output = Machine.runas(user,
                                          oozie_cmd,
                                          cwd=cwd,
                                          env=env,
                                          logoutput=logoutput)
        count = 1
        # Handle retires if the user selects
        while retry and exit_code != 0 and count < num_of_retries:
            exit_code, output = Machine.runas(user,
                                              oozie_cmd,
                                              cwd=cwd,
                                              env=env,
                                              logoutput=logoutput)
            count += 1
            time.sleep(wait)
        return exit_code, output
예제 #8
0
    def serverStop(cls, cwd=None, env=None, logoutput=True):
        cmd = SQOOP2_SERVER + "stop"  #Config.get('sqoop2', 'SQOOP2_CMD')
        osenv = {"JAVA_HOME": Config.get('machine', 'JAVA_HOME')}
        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            osenv['KRB5CCNAME'] = kerbTicket
            user = None

        if env:
            for key, value in env.items():
                osenv[key] = value
        return Machine.run(cmd, cwd=cwd, env=osenv, logoutput=logoutput)
예제 #9
0
    def runas(cls, user, cmd, cwd=None, env=None, logoutput=True, disableAuth=False):
        if not env:
            env = {}
        # if disable auth is requsted set the env
        # var to empty only for a secure cluster
        if disableAuth and Hadoop.isSecure():
            env['KRB5CCNAME'] = ''
        # if disableAuth is false and we are running a secure cluster get
        # the credentials
        elif Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            env['KRB5CCNAME'] = kerbTicket
            user = None

        mahout_cmd = Config.get('mahout', 'MAHOUT_CMD')
        mahout_cmd += " " + cmd
        osenv = {"JAVA_HOME": Config.get('machine', 'JAVA_HOME')}
        if env:
            for key, value in env.items():
                osenv[key] = value
        return Machine.runas(user, mahout_cmd, cwd=cwd, env=osenv, logoutput=logoutput)
예제 #10
0
 def runas(cls, user, cmd, env=None, logoutput=True, disableAuth=False):
     if not env:
         env = {}
     # if disable auth is requsted set the env
     # var to empty only for a secure cluster
     if disableAuth and Hadoop.isSecure():
         env['KRB5CCNAME'] = ''
         env = env.items() + ENVIRONMENT.items()
     # if disableAuth is false and we are running a secure cluster get
     # the credentials
     elif Hadoop.isSecure():
         if user is None:
             user = Config.getEnv('USER')
         kerbTicket = Machine.getKerberosTicket(user)
         env['KRB5CCNAME'] = kerbTicket
         user = None
     return Machine.runas(
         user,
         cmd,
         env=dict(env.items() +
                  ENVIRONMENT.items() if env is not None else ENVIRONMENT),
         logoutput=logoutput)
예제 #11
0
    def getOozieJobList(cls, status):
        '''
          Returns an array of jobID
        '''
        jobArray = []
        regex = '[\d]{7}-[\d]{15}-oozie-oozi-[W|B|C]'
        for jobType in ('wf', 'coordinator', 'bundle'):
            cmd = ' jobs -oozie=%s -filter status=%s -jobtype %s' % (
                cls.getOozieUrl(), status, jobType)
            if Hadoop.isSecure():
                cmd = " -Doozie.auth.token.cache=false " + cmd
            exit_code, stdout = cls.runas(cls._oozie_user, cmd)
            jobArray += re.findall(regex, stdout)

        return jobArray
예제 #12
0
 def _extendedHiveserver2Url(cls, isHttpMode, isLdapMode, isDirectMode, useSSL):
     hs2url = ''
     if not isDirectMode and cls.isDynamicServiceDiscoveryOn():
         zknamespace = cls.getZkNamespace()
         hs2url += (";serviceDiscoveryMode=%s;zooKeeperNamespace=" % cls.getServiceDiscoveryMode()) + zknamespace
     isLdapMode = isLdapMode or cls.getConfigValue("hive.server2.authentication", "NONE").lower() == "ldap"
     if not isLdapMode and Hadoop.isSecure():
         principal = cls.getConfigValue("hive.server2.authentication.kerberos.principal")
         hs2url += ";principal=" + principal
     if isHttpMode or cls.getConfigValue("hive.server2.transport.mode", "binary") == "http":
         hs2url += ";transportMode=http;httpPath=cliservice"
     if useSSL and cls.getConfigValue("hive.server2.use.SSL", defaultValue="false").lower() == "true":
         trustStorePath = "/etc/security/serverKeys/hivetruststore.jks"
         trustStorePwd = "changeit"
         hs2url += ";ssl=true;sslTrustStore=%s;trustStorePassword=%s" % (trustStorePath, trustStorePwd)
     return hs2url
예제 #13
0
def getClasspathForJdbcClient():
    jdbc_standalone_jar = getStandaloneHiveJdbcJar()
    assert jdbc_standalone_jar, "No JDBC standalone jar found"
    classpath = [jdbc_standalone_jar]
    hadoop_home = Config.get('hadoop', 'HADOOP_HOME')
    if Hadoop.isHadoop2() and Machine.type() == 'Windows':
        hadoop_home = os.path.join(hadoop_home, "share", "hadoop", "common")
    hadoop_common_jar = util.findMatchingFiles(hadoop_home, "hadoop-common-*[!(tests)].jar", depth=1)
    assert len(hadoop_common_jar) > 0, "No hadoop-common.jar found"
    classpath.append(hadoop_common_jar[0])
    if Hadoop.isSecure():
        hadoop_auth_jar = util.findMatchingFiles(hadoop_home, "hadoop-auth-*[!(tests)].jar", depth=1)
        assert len(hadoop_auth_jar) > 0, "No hadoop-auth.jar found"
        classpath.append(hadoop_auth_jar[0])
    classpath.append(Config.get('hadoop', 'HADOOP_CONF'))
    return (os.pathsep).join(classpath)
예제 #14
0
    def createClusterEntities(cls, colo, desc, name):
        try:
            from beaver.component.falcon import Falcon
        except ImportError:
            ## Import fails when Falcon is not installed on this machine. Nothing to do
            return

        from beaver.component.hadoop import Hadoop, HDFS, YARN
        write_endpoint = Hadoop.getFSDefaultValue()
        webhdfs_scheme = 'webhdfs'
        if HDFS.isHttpsEnabled():
            webhdfs_scheme = 'swebhdfs'
        read_endpoint = '%s://%s:%s' % (
            webhdfs_scheme, write_endpoint.split('/')[2].split(':')[0],
            HDFS.getNNWebPort())
        execute_endpoint = YARN.getResourceManager()
        falconNode = Falcon.get_falcon_server()

        from beaver.component.oozie import Oozie
        oozieUrl = Oozie.getOozieUrl()
        entityText = "<?xml version=\"1.0\"?>" \
                     "<cluster colo=\"" + colo + "\" description=\"" + desc + "\" name=\"" + name + "\" " \
                     "xmlns=\"uri:falcon:cluster:0.1\"> " \
                        "<interfaces> " \
                            "<interface type=\"readonly\" endpoint=\""+read_endpoint+"\" version=\"0.20.2\"/> " \
                            "<interface type=\"write\" endpoint=\""+write_endpoint+"\" version=\"0.20.2\"/> " \
                            "<interface type=\"execute\" endpoint=\"" + execute_endpoint + "\" version=\"0.20.2\"/> " \
                            "<interface type=\"workflow\" endpoint=\"" + oozieUrl + "\" version=\"3.1\"/>" \
                            "<interface type=\"messaging\" endpoint=\"" \
                                "tcp://" + falconNode + ":61616?daemon=true\" version=\"5.1.6\"/>" \
                        "</interfaces>" \
                        "<locations>" \
                            "<location name=\"staging\" path=\"/apps/falcon/" + name + "/staging\" />" \
                            "<location name=\"temp\" path=\"/tmp\" />" \
                            "<location name=\"working\" path=\"/apps/falcon/" + name + "/working\" />" \
                        "</locations>" \
                        "<ACL owner=\"" + cls._job_user + "\" group=\"users\" permission=\"0755\"/>"
        if Hadoop.isSecure():
            realm = HDFS.getConfigValue(
                'dfs.namenode.kerberos.principal').split('@')[1]
            entityText += "<properties> <property name=\"dfs.namenode.kerberos.principal\" value=\"nn/_HOST@" + realm + "\"/> </properties>"
        entityText += "</cluster>"
        textFile = open(os.path.join(cls._local_workspace, name + ".xml"), "w")
        textFile.write("%s" % entityText)
        textFile.close()

        return
예제 #15
0
    def run(cls, cmd, cwd=None, env=None, logoutput=True, user=None):
        # make sure maven is setup before its run
        cls.setupAnt()

        # initialize env
        if not env:
            env = {}

        # if running a secure cluster get a kerb ticket
        if Hadoop.isSecure():
            env['KRB5CCNAME'] = Machine.getKerberosTicket(user)

        env['JAVA_HOME'] = cls._java_home
        env['ANT_HOME'] = cls._ant_home
        run_cmd = "%s -Dbuild.compiler=javac1.7 %s" % (cls._ant_cmd, cmd)
        exit_code, stdout = Machine.run(run_cmd, cwd=cwd, env=env, logoutput=logoutput)
        return exit_code, stdout
예제 #16
0
 def submit_storm_hbase_topology(cls, tcId, className, args,
                                 useStandaloneCmd):
     if Hadoop.isSecure():
         keytab_file = Machine.getHeadlessUserKeytab(user=HADOOPQA_USER)
         principal = Machine.get_user_principal(user=HADOOPQA_USER)
         args = args + " %s %s" % (keytab_file, principal)
     exit_code, stdout = Storm.runStormHdfsTopology(
         TARGET_HBASE_STORM_JAR,
         className,
         args,
         None,
         logoutput=True,
         inBackground=False,
         useStandaloneCmd=useStandaloneCmd)
     logger.info(exit_code)
     ruAssert("Storm", exit_code == 0,
              "[StormHBaseSubmit] %s Failed" % (tcId))
예제 #17
0
    def runas(cls, user, cmd, cwd=None, env=None, logoutput=True):
        hcat_cmd = cls._hcat_cmd + " " + cmd
        #  initialize env
        if not env:
            env = {}
        #  get kerberos ticket
        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            env['KRB5CCNAME'] = kerbTicket
            user = None

        return Machine.runas(user,
                             hcat_cmd,
                             cwd=cwd,
                             env=env,
                             logoutput=logoutput)
예제 #18
0
def getLLAPDaemonPidsHosts():
    hosts = []
    llapdaemon_pids = []
    if not Machine.isHumboldt(): nodes = Hadoop.getAllNodes()
    else: nodes = HDFS.getDatanodes()
    for node in nodes:
        pids = Machine.getProcessListRemote(
            node, format="%U %p %P %a", filter="org.apache.hadoop.hive.llap.daemon.impl.LlapDaemon", logoutput=True
        )
        if pids:
            if Hadoop.isSecure():
                pid = Machine.getPidFromString(pids[0], Config.get('hive', 'HIVE_USER'))
            else:
                pid = Machine.getPidFromString(pids[0], Config.get('hadoop', 'YARN_USER'))
            llapdaemon_pids.append(pid)
            hosts.append(node)
    return llapdaemon_pids, hosts
예제 #19
0
    def setup_phoenix(self):
        from beaver.component.hadoop import Hadoop
        PHOENIX_TEST_TABLE = 'basicTable'
        try:
            logger.info("### Phoenix setup starting ###")
            from beaver.component.hbase import HBase
            from beaver.component.phoenix import Phoenix
            from beaver.component.xa import Xa

            # servers = HBase.getNumOfRegionServers()
            # if servers == -1:
            #     time.sleep(10)
            #     servers = HBase.getNumOfRegionServers()
            #
            # if servers == -1 or servers['running'] <= 0:
            #     #We restart all the regionServers
            #     HBase.startRegionServers(nodes=HBase.getRegionServers())

            if Hadoop.isSecure() and not Xa.isArgus():
                Phoenix.grantPermissionsToSystemTables()
            #We create a table to read through the upgrade process
            primaryKey = {'name': 'ID', 'type': 'BIGINT'}
            columns = [{
                'name': 'FirstName',
                'type': 'VARCHAR(30)'
            }, {
                'name': 'SecondName',
                'type': 'VARCHAR(30)'
            }, {
                'name': 'City',
                'type': 'VARCHAR(30)'
            }]
            exit_code, stdout = Phoenix.createTable(PHOENIX_TEST_TABLE,
                                                    primaryKey, columns)
            env = {}
            env['JAVA_HOME'] = Config.get('machine', 'JAVA_HOME')
            #We insert 10 rows into the table
            for i in range(10):
                Phoenix.runSQLLineCmds(
                    "UPSERT INTO %s VALUES (%s,'Name_%s','Surname_%s','City_%s')"
                    % (PHOENIX_TEST_TABLE, str(i), str(i), str(i), str(i)),
                    env)
        except Exception as phoenix_exception:
            logger.info("###   Phoenix setup failed ###")
            logger.info('Caused by: ' + str(phoenix_exception))
            pass
예제 #20
0
    def runCommandAs(cls, user, cmd, cwd=None, env=None, logoutput=True, stderr_as_stdout=True, background=False):
        # initialize env
        if not env:
            env = {}
        # get kerberos ticket
        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            env['KRB5CCNAME'] = kerbTicket
            user = None

        if background:
            return Machine.runinbackgroundAs(user, cmd, cwd=cwd, env=env)

        if stderr_as_stdout:
            return Machine.runas(user, cmd, cwd=cwd, env=env, logoutput=logoutput)
        else:
            return Machine.runexas(user, cmd, cwd=cwd, env=env, logoutput=logoutput)
예제 #21
0
    def start_LongRunning_HDFS_stream_job(cls,
                                          inputDir,
                                          num_executor,
                                          mode="yarn-client",
                                          inBackground=True,
                                          clientfile=None):
        '''
          Start Spark-HDFS Streaming application
          '''
        className = "org.apache.spark.examples.streaming.HdfsWordCount"
        if mode == "yarn-client" and not HDFS.isASV():
            jars = Spark.getLzoJar()
        else:
            jars = None
        if clientfile == None:
            Local_clientlog = Spark.createTmpClientFile(className + "_" + mode)
        else:
            Local_clientlog = Spark.createTmpClientFile(clientfile)
        arg = " %s 2>&1 | tee %s" % (inputDir, Local_clientlog)
        if Hadoop.isSecure():
            keytab = Machine.getHeadlessUserKeytab(
                Config.get('hadoop', 'HADOOPQA_USER'))
            principal = Machine.get_user_principal(
                Config.get('hadoop', 'HADOOPQA_USER'))
        else:
            keytab = None
            principal = None

        Spark.submitSparkApplication(className,
                                     mode,
                                     arg,
                                     jars=jars,
                                     num_executor=num_executor,
                                     inBackground=inBackground,
                                     timeout=120,
                                     keytab=keytab,
                                     principal=principal)
        f = open(Local_clientlog, "r")
        stdout = f.read()
        f.close()
        appId = YARN.getApplicationIDFromStdout(stdout)
        return appId, Local_clientlog
예제 #22
0
 def background_job_setup(cls, runSmokeTestSetup=True, config=None):
     '''
     Setup for background long running job
     :param runSmokeTestSetup: Runs smoke test setup if set to true
     '''
     from beaver.component.rollingupgrade.ruUpgrade import UpgradePerNode
     UpgradePerNode.reportProgress(
         "[INFO][FLUME][BGJobSetup] Long running job setup for Flume component started"
     )
     from beaver.component.flume import Agent
     global agent1
     global agent2
     if not os.path.exists(cls._local_work_dir):
         os.mkdir(cls._local_work_dir)
     shutil.copy(cls._flume_datagen_src, cls._local_work_dir)
     agent1 = Agent(cls._local_work_dir)
     agent2 = Agent(cls._local_work_dir)
     for outdir in (cls._agent1_chkpt_dir, cls._agent1_data_dir,
                    cls._agent2_chkpt_dir, cls._agent2_data_dir):
         os.mkdir(outdir)
     logger.info("Preparing the Flume configs for long running test")
     propertyMap = {}
     namenode = Hadoop.getFSDefaultValue()
     propertyMap['agent2.sinks.hdfsSink.hdfs.path'] = "%s%s" % (
         namenode, cls._hdfs_test_dir)
     if Hadoop.isSecure():
         if Config.hasOption('machine', 'USER_REALM'):
             user_realm = Config.get('machine', 'USER_REALM', '')
         else:
             nnKerbPrincipal = HDFS.getNameNodePrincipal(defaultValue='')
             atloc = nnKerbPrincipal.find("@")
             if atloc != -1:
                 user_realm = nnKerbPrincipal[atloc:]
         if user_realm:
             propertyMap[
                 'agent2.sinks.hdfsSink.hdfs.kerberosPrincipal'] = cls._test_user + '@' + user_realm
         propertyMap[
             'agent2.sinks.hdfsSink.hdfs.kerberosKeytab'] = Machine.getHeadlessUserKeytab(
                 cls._test_user)
     util.writePropertiesToFile(
         os.path.join(cls._flume_test_conf, 'longrunning.properties'),
         cls._flume_test_src, propertyMap)
예제 #23
0
    def runas(cls,
              user,
              cmd,
              cwd=None,
              env=None,
              sqoopenv=None,
              logoutput=True,
              stderr_as_stdout=True):
        sqoop_cmd = Config.get('sqoop', 'SQOOP_CMD')
        sqoop_cmd += " " + cmd
        osenv = {"JAVA_HOME": Config.get('machine', 'JAVA_HOME')}
        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            osenv['KRB5CCNAME'] = kerbTicket
            user = None

        if env:
            for key, value in env.items():
                osenv[key] = value

        if sqoopenv:
            if Machine.type() == 'Windows':
                sqoopenvcmd = "set SQOOP_CMD_OPTS=" + sqoopenv
                sqoop_cmd = sqoopenvcmd + "&" + sqoop_cmd
            else:
                sqoopenvcmd = "export SQOOP_CMD_OPTS=" + "\"" + sqoopenv + "\""
                sqoop_cmd = sqoopenvcmd + ";" + sqoop_cmd

        if stderr_as_stdout:
            return Machine.runas(user,
                                 sqoop_cmd,
                                 cwd=cwd,
                                 env=osenv,
                                 logoutput=logoutput)
        else:
            return Machine.runexas(user,
                                   sqoop_cmd,
                                   cwd=cwd,
                                   env=osenv,
                                   logoutput=logoutput)
예제 #24
0
 def setup_storm_jdbc_topology(cls, useStandaloneCmd):
     from beaver.dbutil import MySQL
     MySQL.createUserWithAllPriveleges(STORM_JDBC_TEST_USER,
                                       STORM_JDBC_TEST_PASSWD)
     storm_version = Storm.getVersion(useStandaloneCmd=True)
     try:
         file_obj = open(HDFS_CONFIG_FILE, 'w')
         if Hadoop.isSecure():
             file_obj.write('hdfs.keytab.file: ' +
                            Machine.getHeadlessUserKeytab(
                                user=HADOOPQA_USER) + '\n')
             file_obj.write('hdfs.kerberos.principal: ' +
                            Machine.get_user_principal(user=HADOOPQA_USER) +
                            '\n')
     finally:
         file_obj.close()
     Machine.copy(JAVA_JDBC_SRC_DIR,
                  LOCAL_JDBC_WORK_DIR,
                  user=None,
                  passwd=None)
     post_fenton_opt = " -DpostFenton=true" if Storm.isAfterFenton() else ""
     package_cmd = 'package ' + post_fenton_opt
     (exit_code, _) = Maven.run(package_cmd,
                                cwd=LOCAL_JDBC_WORK_DIR,
                                env={
                                    HADOOP_VERSION_MAVEN_PARAMETER:
                                    HADOOP_VERSION,
                                    STORM_VERSION_MAVEN_PARAMETER:
                                    storm_version,
                                    HADOOP_CONF_MAVEN_PARAMETER:
                                    HADOOP_CONF,
                                    HDFS_FILE_MAVEN_PARAMETER:
                                    HDFS_FILE,
                                    CORE_FILE_MAVEN_PARAMETER:
                                    CORE_FILE,
                                    PUBLIC_REPO_MAVEN_PARAMETER:
                                    Maven.getPublicRepoUrl()
                                })
     ruAssert("Storm", exit_code == 0,
              "[StormJDBCSetup] maven package command failed")
예제 #25
0
    def upgrade_slave(cls, version, node, config=None):
        '''
        Upgrades Yarn slave services : NM
        :param version: Version to be upgraded to
        :param node: Slave Node
        :param config: Config location
        :return:
        '''
        from beaver.component.rollingupgrade.ruUpgrade import UpgradePerNode
        UpgradePerNode.reportProgress(
            "[INFO][YARN][Upgrade] Nodemanager Upgrade for %s started " % node)
        logger.info("**** Beginning upgrade for nodemanager on %s ****" % node)
        MAPRED.stopTasktrackers(nodes=[node])
        from beaver.component.rollingupgrade.ruCommon import hdpSelect
        hdpSelect.changeVersion("hadoop-yarn-nodemanager", version, node)

        # BUG-27328
        # make sure we set the linux container executor permissions
        if Hadoop.isSecure() and not Machine.isWindows():
            container_exec_cfg = os.path.join(
                Config.get('hadoop', 'HADOOP_CONF'), 'container-executor.cfg')
            container_exec = os.path.join(
                Config.get('hadoop',
                           'YARN_HOME').replace("client", "nodemanager"),
                'bin', 'container-executor')
            cmd="chown root:hadoop %s %s ; chmod 400 %s ; chmod 6050 %s" % \
                (container_exec_cfg, container_exec, container_exec_cfg, container_exec)
            Machine.runas(Machine.getAdminUser(),
                          cmd,
                          host=node,
                          cwd=None,
                          env=None,
                          logoutput=True,
                          passwd=Machine.getAdminPasswd())

        MAPRED.startTasktrackers(config, nodes=[node])
        logger.info("**** Ending upgrade for nodemanager on %s ****" % node)
        UpgradePerNode.reportProgress(
            "[INFO][YARN][Upgrade] Nodemanager Upgrade on %s Finished " % node)
예제 #26
0
    def runas(cls,
              user,
              cmd,
              cwd=None,
              env=None,
              logoutput=True,
              base_cmd=OOZIE_CMD):
        if not env:
            env = {}

        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            env['KRB5CCNAME'] = kerbTicket
            user = None
        env['JAVA_HOME'] = Config.get("machine", "JAVA_HOME")
        oozie_cmd = base_cmd + " " + cmd
        return Machine.runas(user,
                             oozie_cmd,
                             cwd=cwd,
                             env=env,
                             logoutput=logoutput)
예제 #27
0
    def runOozieAdminCmdAs(cls,
                           user,
                           cmd,
                           host=None,
                           cwd=None,
                           env=None,
                           logoutput=True):
        if not env:
            env = {}
        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            env['KRB5CCNAME'] = kerbTicket
            user = None

        if host is None:
            oozie_server = cls.getOozieUrl()
        else:
            oozie_server = host

        env['JAVA_HOME'] = Config.get("machine", "JAVA_HOME")

        if Machine.type() == 'Windows':

            paramsList = cmd.split()
            escapedCmd = ""
            for param in paramsList:
                escapedCmd = escapedCmd + "\"" + param + "\"" + " "

            oozie_cmd = OOZIE_CMD + " admin -oozie " + oozie_server + ":" + OOZIE_PORT + "/oozie  " + escapedCmd
        else:
            oozie_cmd = OOZIE_CMD + " admin -oozie " + oozie_server + ":" + OOZIE_PORT + "/oozie  " + cmd
        exit_code, output = Machine.runas(user,
                                          oozie_cmd,
                                          cwd=cwd,
                                          env=env,
                                          logoutput=logoutput)

        return exit_code, output
예제 #28
0
    def deleteHDFSSnapshots(cls, endpoint, directory, _beacon_host=None):
        if HDFS.isHAEnabled() and _beacon_host != None:
            snapshotendpoint = "hdfs://" + HDFS.getActiveNN(
                _beacon_host, "NAMENODE")

            snapshot_names = BeaconHDFS.getSnapshotList(
                snapshotendpoint, directory)
            for snapshot_name in snapshot_names:
                exit_code, stdout = HDFS.deleteSnapshot(snapshotendpoint +
                                                        directory,
                                                        snapshot_name,
                                                        user=hdfs_user)
            #assert exit_code == 0
        else:
            snapshot_names = BeaconHDFS.getSnapshotList(endpoint, directory)
            for snapshot_name in snapshot_names:
                exit_code, stdout = HDFS.deleteSnapshot(endpoint + directory,
                                                        snapshot_name,
                                                        user=hdfs_user)

        if _beacon_host is None:
            exit_code, stdout = HDFS.disallowSnapshot(endpoint + directory,
                                                      user=hdfs_user)
            assert exit_code == 0
        else:
            disallowsnapshot = " hdfs dfsadmin -disallowSnapshot " + endpoint + directory
            if Hadoop.isSecure():
                hdfsuser = Config.get("hadoop", 'HDFS_USER')
                kinitCmd = "kinit -k -t " + Machine.getHeadlessUserKeytab(
                    hdfsuser) + " " + hdfsuser + "@" + Machine.get_user_realm(
                    )
                exit_code, stdout = Machine.runas(user=hdfsuser,
                                                  cmd=kinitCmd,
                                                  host=_beacon_host)
            exit_code, stdout = Machine.runas(user=hdfs_user,
                                              cmd=disallowsnapshot,
                                              host=_beacon_host)
            assert exit_code == 0
예제 #29
0
    def write_hbase_site(cls, config=None):
        '''
        Obtain hbase-site.xml from Slider HBase and write to modified config path
        '''
        global new_conf_path
        from beaver.component.sliderhbase import SliderHBase
        from beaver.component.slider import Slider

        tmpHBaseConfFile = os.path.join(Machine.getTempDir(), "hbase-site.xml")
        if Hadoop.isSecure():
            hbasesite = Slider.registry(
                "sliderhbase",
                flags="--getconf hbase-site --out " + tmpHBaseConfFile,
                format="xml",
                user=cls.HBASE_USER,
                userFlag=cls.HBASE_USER
            )
        else:
            hbasesite = Slider.registry(
                "sliderhbase",
                flags="--getconf hbase-site --out " + tmpHBaseConfFile,
                format="xml",
                user=cls.HBASE_USER
            )
        propertyMap = {'hbase.tmp.dir': '/tmp/hbase-tmp'}
        generated_hbase_conf = os.path.join(new_conf_path, "hbase-site.xml")
        # QE-3108
        # if the hbase app is created successfully, a /tmp/hbase-site.xml will be
        # generated from the app. Otherwise if the /tmp/hbase-site.xml is missing
        # it means the slider app creation fails
        from beaver.component.rollingupgrade.ruUpgrade import UpgradePerNode
        if os.path.isfile(generated_hbase_conf):
            util.writePropertiesToConfigXMLFile(tmpHBaseConfFile, generated_hbase_conf, propertyMap)
        else:
            UpgradePerNode.reportProgress(
                "[FAILED][Slider][background] Slider hbase background setup failed due to hbase-site.xml not generated"
            )
예제 #30
0
    def clientOperation(cls,
                        cmd,
                        user=None,
                        host=None,
                        cwd=None,
                        env=None,
                        logoutput=True):
        tfile = tempfile.NamedTemporaryFile(delete=False)
        if host is not None:
            tfile.write("set server --host %s --port 12000\n" % host)
        tfile.write(cmd)
        tfile.close()
        Machine.runas(
            Machine.getAdminUser(), "chown -R %s %s" %
            (config.Config.get('sqoop2', 'SQOOP2_USER'), tfile.name))
        Machine.runas(Machine.getAdminUser(), "chmod 755 %s" % tfile.name)
        cmd = SQOOP2_CLIENT + tfile.name
        osenv = {"JAVA_HOME": Config.get('machine', 'JAVA_HOME')}
        if Hadoop.isSecure():
            if user is None: user = Config.getEnv('USER')
            kerbTicket = Machine.getKerberosTicket(user)
            osenv['KRB5CCNAME'] = kerbTicket
            #user = None

        if env:
            for key, value in env.items():
                osenv[key] = value

        if user is not None:
            return Machine.runas(user,
                                 cmd,
                                 cwd=cwd,
                                 env=osenv,
                                 logoutput=logoutput)
        else:
            return Machine.run(cmd, cwd=cwd, env=osenv, logoutput=logoutput)