windows本地通過Java API方式監控遠程Yarn

導讀:當我們搭建好遠程Yarn集群環境之後想要對YARN集群進行一些操作時,Yarn官方給出瞭如:web board界面、YARN Commands、Java API、REST API等多種方式。在實際開發中如果想要在Windows本地idea中寫代碼後進行調試對遠程YARN集群進行操作,則需要進行一些環境的配置。接下來本文將討論如何在windows本地使用Java API的方式對遠程Yarn進行監控。

搭建本地hadoop環境

1、下載所需hadoop版本(本例以hadoop-2.7.7 為例子)

windows本地通過Java API方式監控遠程Yarn

2、需下載winutils.exe 和 hadoop.dll

<code>//注:只適用於 2.7.X版本的Hadoop,其他Hadoop版本需自行下載對應版本
鏈接:https://pan.baidu.com/s/1MBuiESixe0i6rgoufoC6JA
提取碼:m36r/<code>

3、把hadoop.dll和winutils.exe複製到解壓後的hadoop文件夾的bin目錄下

windows本地通過Java API方式監控遠程Yarn

4、配置環境變量

<code>//新增系統變量
HADOOP_HOME=D:\\hadoop-2.7.3
//編輯CLASSPATH,主要以追加的形式
CLASSPATH=%HADOOP_HOME%\\bin\\winutils.exe;
//編輯PATH,主要以追加的形式
Path=%HADOOP_HOME%\\bin/<code>

在項目的pom文件中引入依賴

<code><dependency>
<groupid>org.apache.hadoop/<groupid>
<artifactid>hadoop-common/<artifactid>
<version>${hadoop.version}/<version>
/<dependency>
<dependency>
<groupid>org.apache.hadoop/<groupid>
<artifactid>hadoop-yarn-client/<artifactid>
<version>${hadoop.version}/<version>
/<dependency>
<dependency>
<groupid>org.apache.hadoop/<groupid>
<artifactid>hadoop-yarn-api/<artifactid>
<version>${hadoop.version}/<version>
/<dependency>
<dependency>
<groupid>org.apache.hadoop/<groupid>
\t\t\t\t<artifactid>hadoop-client/<artifactid>
\t<version>${hadoop.version}/<version>
/<dependency>/<code>

將遠程yarn集群的yarn-site.xml文件添加到項目resource目錄下

windows本地通過Java API方式監控遠程Yarn

編寫監控程序

這裡舉一個簡單的例子,實現輪詢判斷任務名為“Flink per-job cluster”的Job是否在yarn中運行,且狀態為RUNNING:

<code>import org.apache.hadoop.conf.Configuration;
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.client.api.YarnClient;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.exceptions.YarnException;

import java.io.IOException;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class YarnMonitor {

/**
* 判斷任務名為appName的任務,是否在yarn中運行,狀態為RUNNING
* @return boolean
* @param appName
* @return
*/
public static boolean yarnIsContains(String appName) {
Configuration conf = new YarnConfiguration();
YarnClient yarnClient = YarnClient.createYarnClient();
yarnClient.init(conf);
yarnClient.start();
boolean isContains = false;
List<applicationreport> applications = new ArrayList<applicationreport>();
try {
applications = yarnClient.getApplications(EnumSet.of(YarnApplicationState.RUNNING));
for(ApplicationReport application:applications) {
String name = application.getName();
if(name.equals(appName)) {
System.out.println("ApplicationId ============> "+application.getApplicationId());
System.out.println("name ============> "+application.getName());
System.out.println("queue ============> "+application.getQueue());
System.out.println("queue ============> "+application.getUser());

System.out.println(applications);
isContains = true;
}
}
} catch (YarnException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
yarnClient.stop();
}
return isContains;
}


public static void main(String[] args) throws Exception {
while(true) {
TimeUnit.SECONDS.sleep(3);
boolean yarnIsContains = yarnIsContains("Flink per-job cluster");
System.out.println(yarnIsContains);
}
}

}/<applicationreport>/<applicationreport>/<code>

1、先啟動任務後查看yarn的web board,任務名為“Flink per-job cluster”的Job狀態為Running,正在運行。

windows本地通過Java API方式監控遠程Yarn

2、執行程序,並查看到控制檯輸出結果為true

windows本地通過Java API方式監控遠程Yarn

總結

  • 搭建本地hadoop環境,包括對應版本的hadoop.dll和winutils.exe
  • 項目中引入hadoop-client所需依賴
  • 將遠程yarn-site.xml文件添加到resource目錄下

感謝您的閱讀,如果喜歡本文歡迎關注和轉發,本頭條號將堅持持續分享IT技術知識。對於文章內容有其他想法或意見建議等,歡迎提出共同討論共同進步


分享到:


相關文章: