logo资料库

Yarn获取Application列表编码.docx

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
1、 新建 maven 工程 2、 编写代码,以 java Application 运行没有问题。 package Yarn.Yarn; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintStream; import java.io.PrintWriter; import java.nio.charset.Charset; import java.text.DecimalFormat; import java.util.EnumSet; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapred.JobClient; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.JobID; import org.apache.hadoop.mapred.TaskReport; import org.apache.hadoop.mapred.JobStatus; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationReport; import org.apache.hadoop.yarn.api.records.YarnApplicationState; import org.apache.hadoop.yarn.api.records.impl.pb.ApplicationReportPBImpl; import org.apache.hadoop.yarn.client.api.YarnClient; import org.apache.hadoop.yarn.client.cli.ApplicationCLI; import org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.util.ConverterUtils; public class YarnAppManager { private YarnClient client; protected PrintStream sysout = System.out; private static final String APPLICATIONS_PATTERN = "%30s\t%20s\t%20s\t%10s\t%10s\t%18s\t%18s\t%15s\t%35s" + System.getProperty("line.separator"); public static void main(String[] args) { // TODO Auto-generated method stub try { YarnAppManager app = new YarnAppManager(); app.testAppState(); } catch (Exception ex) { ex.printStackTrace(); }
} private void getJobState(){ Configuration conf = new Configuration(); client = YarnClient.createYarnClient(); client.init(conf); client.start(); } private void testAppState() throws YarnException, IOException, InterruptedException, ClassNotFoundException { Configuration conf = new Configuration(); client = YarnClient.createYarnClient(); client.init(conf); client.start(); EnumSet EnumSet.noneOf(YarnApplicationState.class); if (appStates.isEmpty()) { appStates = appStates.add(YarnApplicationState.RUNNING); appStates.add(YarnApplicationState.ACCEPTED); appStates.add(YarnApplicationState.SUBMITTED); } List appsReport = client.getApplications(appStates); PrintWriter writer = new PrintWriter(new OutputStreamWriter(sysout, Charset.forName("UTF-8"))); for (ApplicationReport appReport : appsReport) { ApplicationReportPBImpl app = (ApplicationReportPBImpl) appReport; DecimalFormat formatter = new DecimalFormat("###.##%"); String progress = formatter.format(appReport.getProgress()); writer.printf(APPLICATIONS_PATTERN, appReport.getApplicationId(), appReport.getName(), appReport.getQueue(), appReport.getApplicationType(), appReport.getUser(), appReport.getFinalApplicationStatus(), progress, appReport.getYarnApplicationState(), appReport.getOriginalTrackingUrl()); } writer.flush(); for (ApplicationReport appReport : appsReport) { String type = appReport.getApplicationType(); if(type.equalsIgnoreCase("spark")){ continue; }
getStatusByAppId(appReport); } } private void getStatusByAppId(ApplicationReport app){ String user = app.getUser(); ApplicationId id = app.getApplicationId(); String appId = app.getApplicationId().toString(); System.out.println(appId); } private void killApplication(String applicationId) throws YarnException, IOException{ ApplicationId appId = ConverterUtils.toApplicationId(applicationId); ApplicationReport try { appReport = null; appReport = client.getApplicationReport(appId); } catch (ApplicationNotFoundException e) { sysout.println("Application with id '" + applicationId + "' doesn't exist in RM."); throw e; } if (appReport.getYarnApplicationState() == YarnApplicationState.FINISHED || appReport.getYarnApplicationState() == YarnApplicationState.KILLED || appReport.getYarnApplicationState() == YarnApplicationState.FAILED) { sysout.println("Application " + applicationId + " has already finished "); } else { sysout.println("Killing application " + applicationId); client.killApplication(appId); } } private void getAppState() throws Exception { String[] args = { "-list" }; ApplicationCLI.main(args); } } 3、 使用 maven 打包 jar 包,在 linux 下的 yarn jar 中运行,因此不需要将引用 jar 包打包到 jar 包中。 4.0.0 YarnManager Yarn 0.0.1-SNAPSHOT jar Yarn http://maven.apache.org UTF-8 junit junit 3.8.1 test org.apache.hadoop hadoop-mapreduce-client-core 2.3.0 org.apache.hadoop hadoop-mapreduce-client-jobclient 2.3.0 org.apache.hadoop hadoop-hdfs 2.3.0 org.apache.hadoop hadoop-common 2.3.0 jdk.tools
jdk.tools 1.6 system C:/Program Files/Java/jdk1.8.0_73/lib/tools.jar org.apache.hadoop hadoop-yarn-common 2.3.0 org.apache.hadoop hadoop-yarn-client 2.3.0 org.apache.hadoop hadoop-yarn-server-resourcemanager 2.3.0 org.apache.maven.plugins maven-jar-plugin YarnManager.Yarn.YarnAppManager 需要制定 main 函数的类,为新建 Maven 工程时的类名。新建 maven 工程时的名称为: YarnManager.Yarn.YarnAppManager。 4、 使用 maven package 打包过程中会提示,编译器使用的是 JRE 而不是 JDK,修改 eclipse 的编译器,修改 Window—>Preferences—>Java-->Install JREs-->Add,添加本机的 JDK。打 包能够正常完成。
5、 运行 eclipse 中,以 java application 运行 main 函数,会出现停滞状态,无法继续运行。 可以运行,但是会慢,jdk 没有 jre 运行快。 6、工程右键 Build Path-->Configure Build Path-->edit-->Install JREs 选 择 jdk,点击 ok。即可出现执行结果。
7、查询 Job 信息 // JobClient jobClient = new JobClient(new JobConf(conf)); JobStatus[] jobs = jobClient.getAllJobs(); JobStatus[] jobs = jobClient.jobsToComplete(); for(JobStatus job : jobs){ JobID id = job.getJobID(); TaskReport[] maps = jobClient.getMapTaskReports(id); System.out.println(maps.length); TaskReport[] reduces = jobClient.getReduceTaskReports(id); System.out.println(reduces.length); } 8、 上传至 linux 环境运行 jar 包 Yarn jar Yarn.jar
分享到:
收藏