def _enable_event_log(self, master, key_path, path): enable_event_log_command = ( "echo -e 'spark.executor.extraClassPath " "/usr/lib/hadoop-mapreduce/hadoop-openstack.jar\n" "spark.eventLog.enabled true\n" "spark.eventLog.dir " "file://%(path)s' > " "/opt/spark/conf/spark-defaults.conf" % { 'path': path }) remote.execute_command(master, key_path, enable_event_log_command)
def _hdfs_spark_execution(self, master, remote_hdfs, key_path, args, job_bin_url, main_class, dependencies, spark_applications_ids, expected_time, monitor_plugin, collect_period, number_of_jobs, workers_id, data, connector, swift, swift_logdir, container, number_of_attempts): job_exec_id = str(uuid.uuid4())[0:7] self._log("%s | Job execution ID: %s" % (time.strftime("%H:%M:%S"), job_exec_id)) # Defining params local_path = '/tmp/spark-jobs/' + job_exec_id + '/' # remote_path = 'ubuntu@' + master + ':' + local_path job_input_paths, job_output_path, job_params = (hdfs.get_job_params( key_path, remote_hdfs, args)) job_binary_path = hdfs.get_path(job_bin_url) # Create temporary job directories self._log("%s | Create temporary job directories" % (time.strftime("%H:%M:%S"))) self._mkdir(local_path) # Create cluster directories self._log("%s | Creating cluster directories" % (time.strftime("%H:%M:%S"))) remote.execute_command(master, key_path, 'mkdir -p %s' % local_path) # Get job binary from hdfs self._log("%s | Get job binary from hdfs" % (time.strftime("%H:%M:%S"))) remote.copy_from_hdfs(master, key_path, remote_hdfs, job_binary_path, local_path) # Enabling event log on cluster self._log("%s | Enabling event log on cluster" % (time.strftime("%H:%M:%S"))) self._enable_event_log(master, key_path, local_path) # Submit job self._log("%s | Starting job" % (time.strftime("%H:%M:%S"))) local_binary_file = ( local_path + remote.list_directory(key_path, master, local_path)) spark_job = self._submit_job(master, key_path, main_class, dependencies, local_binary_file, args) spark_app_id = spark.get_running_app(master, spark_applications_ids, number_of_attempts) if spark_app_id is None: self._log("%s | Error on submission of application, " "please check the config file" % (time.strftime("%H:%M:%S"))) (output, err) = spark_job.communicate() self.stdout.log(output) self.stderr.log(err) raise ex.ConfigurationError() spark_applications_ids.append(spark_app_id) info_plugin = { "spark_submisson_url": "http://" + master, "expected_time": expected_time, "number_of_jobs": number_of_jobs } self._log("%s | Starting monitor" % (time.strftime("%H:%M:%S"))) monitor.start_monitor(api.monitor_url, spark_app_id, monitor_plugin, info_plugin, collect_period) self._log("%s | Starting controller" % (time.strftime("%H:%M:%S"))) controller.start_controller(api.controller_url, spark_app_id, workers_id, data) (output, err) = spark_job.communicate() self._log("%s | Stopping monitor" % (time.strftime("%H:%M:%S"))) monitor.stop_monitor(api.monitor_url, spark_app_id) self._log("%s | Stopping controller" % (time.strftime("%H:%M:%S"))) controller.stop_controller(api.controller_url, spark_app_id) self.stdout.log(output) self.stderr.log(err) self._log("%s | Copy log from cluster" % (time.strftime("%H:%M:%S"))) event_log_path = local_path + 'eventlog/' self._mkdir(event_log_path) remote_event_log_path = 'ubuntu@%s:%s%s' % (master, local_path, spark_app_id) remote.copy(key_path, remote_event_log_path, event_log_path) self._log("%s | Upload log to Swift" % (time.strftime("%H:%M:%S"))) connector.upload_directory(swift, event_log_path, swift_logdir, container) spark_applications_ids.remove(spark_app_id) self.update_application_state("OK") return 'OK'
def _hdfs_spark_execution(self, master, remote_hdfs, key_path, args, job_bin_url, main_class, dependencies, spark_applications_ids, number_of_attempts): job_exec_id = str(uuid.uuid4())[0:7] self._log("%s | Job execution ID: %s" % (time.strftime("%H:%M:%S"), job_exec_id)) # Defining params local_path = '/tmp/spark-jobs/' + job_exec_id + '/' job_binary_path = hdfs.get_path(job_bin_url) # Create temporary job directories self._log("%s | Create temporary job directories" % time.strftime("%H:%M:%S")) self._mkdir(local_path) # Create cluster directories self._log("%s | Creating cluster directories" % time.strftime("%H:%M:%S")) remote.execute_command(master, key_path, 'mkdir -p %s' % local_path) # Get job binary from hdfs self._log("%s | Get job binary from hdfs" % time.strftime("%H:%M:%S")) remote.copy_from_hdfs(master, key_path, remote_hdfs, job_binary_path, local_path) # Enabling event log on cluster self._log("%s | Enabling event log on cluster" % time.strftime("%H:%M:%S")) self._enable_event_log(master, key_path, local_path) # Submit job self._log("%s | Starting job" % time.strftime("%H:%M:%S")) local_binary_file = ( local_path + remote.list_directory(key_path, master, local_path)) spark_job = self._submit_job(master, key_path, main_class, dependencies, local_binary_file, args) spark_app_id = spark.get_running_app(master, spark_applications_ids, number_of_attempts) if spark_app_id is None: self._log("%s | Error on submission of application, " "please check the config file" % time.strftime("%H:%M:%S")) (output, err) = spark_job.communicate() self.stdout.log(output) self.stderr.log(err) raise ex.ConfigurationError() spark_applications_ids.append(spark_app_id) (output, err) = spark_job.communicate() self.stdout.log(output) self.stderr.log(err) self._log("%s | Copy log from cluster" % (time.strftime("%H:%M:%S"))) event_log_path = local_path + 'eventlog/' self._mkdir(event_log_path) remote_event_log_path = 'ubuntu@%s:%s%s' % (master, local_path, spark_app_id) remote.copy(key_path, remote_event_log_path, event_log_path) spark_applications_ids.remove(spark_app_id) self.update_application_state("OK") return 'OK'