使用Java程序来获得某个集群的NameNode或DataNode的相关信息
来源:互联网 发布:centos 安装中文包 编辑:程序博客网 时间:2024/05/16 03:21
http://www.aboutyun.com/thread-18336-1-1.html
软件版本:hadoop2.2,JDK1.7,Intellij idea14
0. 配置Configuration
如果需要使用Java程序来获得某个集群的NameNode或DataNode的相关信息,那么Configuration需要如下配置:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
/**
* 获得配置的Configuration
*
* @return
*/
public
static
Configuration getConf() {
if
(conf ==
null
) {
conf =
new
Configuration();
conf.setBoolean(
"mapreduce.app-submission.cross-platform"
,
true
);
// 配置使用跨平台提交任务
conf.set(
"fs.defaultFS"
,
"hdfs://"
+ namenode +
":8020"
);// 指定namenode
conf.set(
"mapreduce.framework.name"
,
"yarn"
);
// 指定使用yarn框架
conf.set(
"yarn.resourcemanager.address"
, resourcenode +
":8032"
);
// 指定resourcemanager
conf.set(
"yarn.resourcemanager.scheduler.address"
, schedulernode +
":8030"
);
// 指定资源分配器
conf.set(
"mapreduce.jobhistory.address"
, jobhistorynode +
":10020"
);
// 指定historyserver
}
return
conf;
}
1. 针对Hadoop集群(不管有没有配置HA),获得DataNode相关信息;
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
/**
* 获取子节点
* @return
*/
public
static
DatanodeInfo getDATANODE() {
if
(DATANODE==
null
) {
try
{
DatanodeInfo[] live = ((DistributedFileSystem) getFS()).getDataNodeStats(HdfsConstants.DatanodeReportType.LIVE);
if
(live.length<
1
){
log.error(
"获取live子节点失败!"
);
}
DATANODE=live[
0
];
}
catch
(IOException e){
log.warn(
"获取live子节点异常!\n"
+e.getMessage());
}
}
return
DATANODE;
}
2. 针对 配置了HA的Hadoop集群,获得Active NameNode的代码:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package
org.apache.hadoop.hdfs.tools;
import
org.apache.hadoop.conf.Configuration;
import
org.apache.hadoop.fs.CommonConfigurationKeys;
import
org.apache.hadoop.ha.HAServiceProtocol;
import
org.apache.hadoop.ha.HAServiceStatus;
import
org.apache.hadoop.ha.HAServiceTarget;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
java.io.IOException;
/**
* 动态获得Active NameNode
* 针对HA集群
* Created by fansy on 2016/3/29.
*/
public
class
DFSHAAdminUtils
extends
DFSHAAdmin {
private
Logger log = LoggerFactory.getLogger(DFSHAAdminUtils.
class
);
private
int
rpcTimeoutForChecks = -
1
;
private
String nnidStr;
private
static
String activeNameNodeHostAndPort=
null
;
public
DFSHAAdminUtils(){}
public
DFSHAAdminUtils(Configuration conf,String nnidStr){
super
.setConf(conf);
if
(conf !=
null
) {
rpcTimeoutForChecks = conf.getInt(
CommonConfigurationKeys.HA_FC_CLI_CHECK_TIMEOUT_KEY,
CommonConfigurationKeys.HA_FC_CLI_CHECK_TIMEOUT_DEFAULT);
}
this
.nnidStr= nnidStr;
}
public
String getActiveNameNode(){
String[] nnids = nnidStr.split(
","
,-
1
);
HAServiceProtocol proto =
null
;
HAServiceTarget haServiceTarget=
null
;
HAServiceStatus state=
null
;
try
{
for
(String nnid : nnids){
haServiceTarget = resolveTarget(nnid);
proto = haServiceTarget.getProxy(
getConf(), rpcTimeoutForChecks);
state = proto.getServiceStatus();
if
(state.getState().ordinal()==HAServiceProtocol.HAServiceState.ACTIVE.ordinal()) {
log.info(
"Active NameNode:{}"
,
haServiceTarget.getAddress().getHostName() +
":"
+ haServiceTarget.getAddress().getPort());
return
haServiceTarget.getAddress().getHostName()+
":"
+haServiceTarget.getAddress().getPort();
}
}
}
catch
(IOException e){
log.error(
"获取Active NameNode异常!"
);
}
return
null
;
}
}
其中,DFSHAAdmin是Hadoop自带的,同时,这里的实现也是参考了其内部的实现;
0 0
- 使用Java程序来获得某个集群的NameNode或DataNode的相关信息
- Hadoop获得集群NameNode和DataNode状态
- HDFS的namenode和datanode
- 利用JAVA中的反射机制获得某个类的信息
- 在启动HDFS时,针对集群中namenode无法识别datanode的问题的解决方法
- 【那些遇到的坑】—hadoop完全分布式集群搭建namenode找不到datanode,总显示0
- namenode上对Datanode的表征和管理--Datanode*系列
- namenode,datanode,client三者的关系
- hadoop datanode 连接namenode的问题
- datanode与namenode的通信原理
- Hadoop的namenode datanode无法启动
- HDFS的关键组件:NameNode/ DataNode
- 对DataNode和namenode的理解--hadoop
- NameNode、SecendNameNode和DataNode的工作机制
- Hadoop的NameNode与SecondaryNameNode,DataNode
- 使用Java开发和信息安全相关的程序(CA)
- 使用Java开发和信息安全相关的程序(CA)
- hadoop2.0的DataNode与NameNode交互机制相关代码分析
- iOS UITextField实时监听获取输入内容,中文状态去除预输入拼音
- cell的init会调用内部的initWithStyle,ui控件init最终会调用initWithFrame
- Android热修复:Andfix和Hotfix,两种方案的比较与实现
- In-memory Computing with SAP HANA读书笔记 - 第一章:Basic concepts of in-memory
- ios 中角度问题
- 使用Java程序来获得某个集群的NameNode或DataNode的相关信息
- 【SSH网上商城项目实战11】查询和删除商品功能的实现
- jquery判断浏览器类型的代码
- iOS开发遇到Could not find Developer Disk Image解决方法
- UUID组成
- android webview与js交互(动态添加js)
- jeecg01
- JS中工厂方法和构造函数创建的对象的关系
- iOS - SDWebImage的原理以及使用流程