1.2.4集群运维测试
HA集群中两个namenode状态的管理命令
[root@mini2 hadoop-2.6.4]# bin/hdfs haadmin Usage: DFSHAAdmin [-ns <nameserviceId>] [-transitionToActive <serviceId> [--forceactive]] [-transitionToStandby <serviceId>] [-failover [--forcefence] [--forceactive] <serviceId> <serviceId>] [-getServiceState <serviceId>] [-checkHealth <serviceId>] [-help <command>] |
示例: 切换nn2为active
bin/hdfs haadmin -transitionToActive nn2--forcemanual
1、Datanode动态上下线
Datanode动态上下线很简单,步骤如下:
a) 准备一台服务器,设置好环境
b) 部署hadoop的安装包,并同步集群配置
c) 联网上线,新datanode会自动加入集群
d) 如果是一次增加大批datanode,还应该做集群负载重均衡
(start-balancer.sh -threshold 8 ##指定磁盘利用率,详情见下节 3)
2、Namenode状态切换管理
使用的命令上hdfs haadmin
可用 hdfs haadmin –help查看所有帮助信息
可以看到,状态操作的命令示例:
查看namenode工作状态
hdfs haadmin -getServiceState nn1 |
将standby状态namenode切换到active
hdfs haadmin –transitionToActive nn1 |
将active状态namenode切换到standby
hdfs haadmin –transitionToStandby nn2 |
3、数据块的balance
启动balancer的命令:
start-balancer.sh -threshold 8
运行之后,会有Balancer进程出现:
上述命令设置了Threshold为8%,那么执行balancer命令的时候,首先统计所有DataNode的磁盘利用率的均值,然后判断如果某一个DataNode的磁盘利用率超过这个均值Threshold,那么将会把这个DataNode的block转移到磁盘利用率低的DataNode,这对于新节点的加入来说十分有用。Threshold的值为1到100之间,不显示的进行参数设置的话,默认是10。
1.2.5 HA下hdfs-api变化
客户端需要nameservice的配置信息,其他不变
/** * 如果访问的是一个ha机制的集群 * 则一定要把core-site.xml和hdfs-site.xml配置文件放在客户端程序的classpath下 * 以让客户端能够理解hdfs://ns1/中 “ns1”是一个ha机制中的namenode对——nameservice * 以及知道ns1下具体的namenode通信地址 * @author * */ public class UploadFile {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://ns1/");
FileSystem fs = FileSystem.get(new URI("hdfs://ns1/"),conf,"hadoop");
fs.copyFromLocalFile(new Path("g:/eclipse-jee-luna-SR1-linux-gtk.tar.gz"), new Path("hdfs://ns1/"));
fs.close();
}
} |