hdfs HA配置整理
三台机器,每台机器1G内存,1个核,20G硬盘
配置有点菜,将就着练习用吧
core-site.xml
<configuration>
<!-- uri的权限用于确定文件系统的主机、端口等 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://my-xiaohai</value>
</property>
<!-- 其他临时目录的基础 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/bigdata/hadoop-2.7.5/data/tmp</value>
</property>
<!-- 以分钟为单位的垃圾回收时间24*60*3 -->
<property>
<name>fs.trash.interval</name>
<value>4320</value>
</property>
<!-- zk集群 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>Master:2181,Slave1:2181,Slave2:2181</value>
</property>
<!-- 用于浏览hdfs web UI的用户 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>luohaifang</value>
</property>
<!-- -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- -->
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<!-- -->
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<!-- -->
<property>
<name>hadoop.proxyuser.hue.hosts</name>
<value>*</value>
</property>
<!-- -->
<property>
<name>hadoop.proxyuser.hue.groups</name>
<value>*</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<!-- 用逗号分隔的名称服务列表 -->
<property>
<name>dfs.nameservices</name>
<value>my-xiaohai</value>
</property>
<!-- 使用“mycluster”作为nameservice ID,并且希望使用“nn1”和“nn2”作为namenode的单独ID,那么您需要配置一个属性dfs.ha.namenode .mycluster,以及它的值“nn1,nn2” -->
<property>
<name>dfs.ha.namenodes.my-xiaohai</name>
<value>nn1,nn2</value>
</property>
<!-- NameNode要监听的辅助端口列表,以逗号分隔。这允许向客户端公开多个NN地址。特别是,它用于在不同的端口上强制执行不同的SASL级别。空列表表示辅助端口被禁用,分别配置两个高可用节点,包括rpc和http
RPC是基于TCP/IP协议的,RPC(远程服务调用).8020是namenode节点active状态下的端口号 -->
<property>
<name>dfs.namenode.rpc-address.my-xiaohai.nn1</name>
<value>Master:8020</value>
</property>
<!-- -->
<property>
<name>dfs.namenode.rpc-address.my-xiaohai.nn2</name>
<value>Slave1:8020</value>
</property>
<!-- HTTP服务是基于HTTP协议的,50070是访问hadoop集群文件系统的web端口 -->
<property>
<name>dfs.namenode.http-address.my-xiaohai.nn1</name>
<value>Master:50070</value>
</property>
<!-- -->
<property>
<name>dfs.namenode.http-address.my-xiaohai.nn2</name>
<value>Slave1:50070</value>
</property>
<!-- HA集群中多个namenode之间共享存储上的一个目录。该目录将由活动服务器写入,由备用服务器读取,以保持名称空间的同步。这个目录不需要在上面的dfs.namenode.edit .dir中列出。在非ha集群中,它应该是空的 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://Master:8485;Slave1:8485;Slave2:8485/my-xiaohai</value>
</property>
<!-- 存储日志编辑文件的目录 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/bigdata/hadoop-2.7.5/data/jn</value>
</property>
<!-- 当活跃的namenode挂掉时,通过这个方式把备用的namenode启起来 -->
<property>
<name>dfs.client.failover.proxy.provider.my-xiaohai</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- HDFS的HA功能的防脑裂方法。保证NN中仅一个是Active的,如果2者都是Active的,新的会把旧的强制Kill -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 秘钥存在的文件,当其中一个namenode挂掉时,启动另外一个namenode,需要免密连接 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 故障转移启动,开启自动故障转移 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 文件副本数 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 访问namenode的hdfs使用50070端口,访问datanode的webhdfs使用50075端口。访问文件、文件夹信息使用namenode的IP和50070端口,访问文件内容或者进行打开、上传、修改、下载等操作使用datanode的IP和50075端口。要想不区分端口,直接使用namenode的IP和端口进行所有的webhdfs操作,就需要在所有的datanode上都设置hefs-site.xml中的dfs.webhdfs.enabled为true -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
hdfs启动
1、先启动每台机器的JournalNode
./hadoop-daemon.sh start journalnode
2、格式化hdfs
hdfs namenode -format
3、启动第一台NameNode
./hadoop-daemon.sh start namenode
4、启动第二台NameNode
hdfs namenode -bootstrapStandby
5、启动ZK
./zkServer.sh start
6、格式化ZKFC
hdfs zkfc -formatZK
7、启动hdfs的其他进程
./start-dfs.sh