hadoop2.x hdfs完全分布式 HA 搭建
官网链接 hadoop配置文件主页:http://hadoop.apache.org/docs/r2.5.2/ HDFS hapdoop HA全分布配置:http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html 总结步骤: 准备工作: 1. 配置java环境变量 可以在/etc/profile 或者在/root/.bash_profile中进行配置 2. 配置免密码登录 特别是namenode之间可以相互免密码登录 3. 准备zookeeper a)三台zookeeper:hadoop1,hadoop2,hadoop3 b)编辑zoo.cfg配置文件 修改dataDir=/opt/zookeeper //可自定义文件位置 server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888 在dataDir目录中创建一个myid的文件,文件内容为1,2,3 (1,2,3分别为上面的server.后数字) HADOOP配置文件 1. 在hadoop-env.sh中配置java_home export JAVA_HOME=/usr/java/jdk1.7.0_79 2. 配置slaves:放datanode的主机映射名 例: node2 node3 node4 3. 配置hdfs-site.xml <configuration> <!-- 配置服务名 --> <property> <name>dfs.nameservices</name> <value>xiaobing</value> </property> <!-- 配置权限关闭 可以使其他用户可以进行访问 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- 给namenode命名 --> <property> <name>dfs.ha.namenodes.xiaobing</name> <value>nn1,nn2</value> </property> <!-- 为第一个namenode建立rpc 数据通信协议 --> <property> <name>dfs.namenode.rpc-address.xiaobing.nn1</name> <value>node1:8020</value> </property> <!-- 为第二个namenode建立rpc 数据通信协议 --> <property> <name>dfs.namenode.rpc-address.xiaobing.nn2</name> <value>node4:8020</value> </property> <!-- 为第一个namenode建立http协议 --> <property> <name>dfs.namenode.http-address.xiaobing.nn1</name> <value>node1:50070</value> </property> <!-- 为第二个namenode建立http协议 --> <property> <name>dfs.namenode.http-address.xiaobing.nn2</name> <value>node4:50070</value> </property> <!-- 配置journalnode的主机名端口,随便起个文件名 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node2:8485;node3:8485;node4:8485/abcdir</value> </property> <!-- 配置failover机制 --> <property> <name>dfs.client.failover.proxy.provider.xiaobing</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 配置本地私钥,使failover controller 可以ssh namenode进行检查 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_dsa</value> </property> <!-- 设置自动接管 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration> 4.配置core-site.xml <configuration> <!-- 配置访问服务名 --> <property> <name>fs.defaultFS</name> <value>hdfs://xiaobing</value> </property> <!-- 配置nomenode的fsimage文件生成文件位置 --> <property> <name>hadoop.tmp.dir</name> <value>/home/data</value> </property> <!-- 配置journalnode的edits文件存放路径 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/jn/data</value> </property> <!-- 配置zookeeper的主机名 端口 --> <property> <name>ha.zookeeper.quorum</name> <value>node1:2181,node2:2181,node3:2181</value> </property> </configuration> 5.启动所有的zookeeper zkServer.sh start 6.启动所有JournalNode: hadoop-daemon.sh start journalnode 7.在其中任意一个namenode上格式化:hdfs namenode -format 8.把刚刚格式化之后的元数据拷贝到另外一个namenode上 a)启动刚刚格式化的namenode b)在任一没有格式化的namenode上执行:hdfs namenode -bootstrapStandby c)启动第二个namenode 9.在其中一个namenode上初始化zkfc:hdfs zkfc -formatZK 10.停止上面节点:stop-dfs.sh 11.全面启动:start-dfs.sh