hadoop HA集群搭建(red hat)

来源:互联网 发布:红楼梦解析知乎 编辑:程序博客网 时间:2024/05/22 00:20

(需要注意的是本博主因为配置的问题,以下所有的master切换成root模式下)
官网的参考地址
一、前期准备工作
1、虚拟机的安装和red hat linux的安装(rhel-server-7.0-x86_64-dvd.iso),读者可自行安装。设置一个管理的账号(master),密码(hadoop)
hadoop的版本是(2.6.5)
配置的节点
2、静态ip的设置

[master@node1 ~]$ [master@node1 ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 

注意:ifcfg-eno16777736可能不一样,下面为修改的地方

HWADDR=00:0C:29:70:0B:67TYPE=EthernetBOOTPROTO=staticDEFROUTE=yesPEERDNS=yesPEERROUTES=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPV6_FAILURE_FATAL=noNAME=eno16777736UUID=256a7907-3258-423e-baeb-7192109726e8ONBOOT=yesIPADDR=192.168.146.51NETMASK=255.255.255.0GATEWAY=192.168.146.2DNS1=1.2.4.8

3、关于yum的问题一直没有解决
4、使用winscp工具将hadoop、jdk、Scala等工具包放进虚拟机中
5、配置jdk和hadoop见参考链接

[master@node2 jdk1.8.0_60]$ sudo ln -sf /home/master/soft/jdk1.8.0_60 /opt/jdk1.8[master@node2 hadoop-2.6.5]$ sudo ln -sf /home/master/soft/hadoop-2.6.5 /opt/hadoop-2.6.5
export JAVA_HOME=/opt/jdk1.8export HADOOP_HOME=/opt/hadoop-2.6.5export PATH=$PATH:$JAVA_HOME/bin:$PATH:HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

此处注意:如果在集群上有两个hadoop,则不应该配置环境
6、关闭防火墙

[master@node1 soft]$ sudo systemctl stop firewalld[master@node1 soft]$ sudo systemctl disable firewalldrm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'rm '/etc/systemd/system/basic.target.wants/firewalld.service'

此处添加两个常用的命令

  • 修改文件所有者:
    chown -R master:master hadoop
    master:为文件的所有者,hadoo为修改的文件
netstat -ap|grep 8080

二、hadoop文件的配置
1、修改hdfs.xml文件

<property>  <name>dfs.nameservices</name>  <value>shursulei</value></property>
<property>  <name>dfs.ha.namenodes.shursulei</name>  <value>nn1,nn2</value></property>
<property>  <name>dfs.namenode.rpc-address.shursulei.nn1</name>  <value>node1:8020</value></property><property>  <name>dfs.namenode.rpc-address.shursulei.nn2</name>  <value>node2:8020</value></property>
<property>  <name>dfs.namenode.http-address.shursulei.nn1</name>  <value>node1:50070</value></property><property>  <name>dfs.namenode.http-address.shursulei.nn2</name>  <value>node2:50070</value></property>
<property>  <name>dfs.namenode.shared.edits.dir</name><value>qjournal://node2:8485;node3:8485;node4:8485/shursulei</value></property></configuration>
<property>  <name>dfs.client.failover.proxy.provider.shursulei</name>  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>
<property>  <name>dfs.ha.fencing.methods</name>  <value>sshfence</value></property><property>  <name>dfs.ha.fencing.ssh.private-key-files</name>  <value>/root/.ssh/id_rsa</value></property>
<property>  <name>dfs.journalnode.edits.dir</name>  <value>/opt/jn/data</value></property>
 <property>   <name>dfs.ha.automatic-failover.enabled</name>   <value>true</value> </property>

2、配置core-site.xml文件

  • namenode的入口
<property>  <name>fs.defaultFS</name>  <value>hdfs://shursulei</value></property>
 <property>   <name>ha.zookeeper.quorum</name>   <value>node1:2181,node2:2181,node3:2181</value> </property>
<property>  <name>hadoop.tmp.dir</name>  <value>/opt/hadoop-2.6.5temp</value></property>

3、配置hadoop-env.sh文件

  添加如下的环境变量
export JAVA_HOME=/opt/jdk1.8

4、配置slaves文件

node2node3node4

把hadoop的配置文件复制到其他机器上去

/home/master/soft/hadoop-2.6.5/etc/hadoop[master@node1 hadoop]$ sudo scp ./* master@node4:/home/master/soft/hadoop-2.6.5/etc/hadoop

三、zookeeper的安装和配置(补充上面的配置)
(只需要在node1和node2和node3上 配置)

  • 使用的版本是3.4.10(必须是稳定版本)
  • 解压和设置软链
[master@node1 soft]$ tar -zxvf zookeeper-3.4.10.tar.gz [master@node1 zookeeper-3.4.10]$ sudo ln -sf /home/master/soft/zookeeper-3.4.10 /home/zk
  • 配置文件
在/home/zk/conf的目录下修改文件zoo.cfg[master@node1 conf]$ lsconfiguration.xsl  log4j.properties  zoo_sample.cfg[master@node1 conf]$ cp zoo_sample.cfg zoo.cfg[master@node1 conf]$ lsconfiguration.xsl  log4j.properties  zoo.cfg  zoo_sample.cfg[master@node1 conf]$ vi zoo.cfg 修改的内容:dataDir=/opt/zookpeer     server.1=node1:2888:3888     server.2=node2:2888:3888     server.3=node3:2888:3888

参考链接:zookpeer的配置

  • 配置集群
手动创建文件夹/opt/zookper和文件 myid[root@node1 opt]# mkdir /opt/zookpeer[root@node1 opt]# lshadoop-2.6.5  hadoop-2.6.5temp  jdk1.8  zookpeer[root@node1 opt]# vi myid[root@node1 opt]# cat myid1myid的文件内容为:1(每台内容不一样:node1写1;node2写2;node3写3..)
  • 将zookpeer的文件拷贝到其他的机器中(只需配置node1、node2、node3)
[root@node1 soft]$ sudo scp -r zookeeper-3.4.10 root@node2:/home/master/soft同时在其他的环境中配置软链sudo ln -sf /home/master/soft/zookeeper-3.4.10 /home/zk上面的myid也需要配置
  • 配置环境变量
[root@node1 soft]$ cd /home/zk/bin[root@node1 bin]$ pwd/home/zk/bin*此处把hadoop的配置同时去掉*export JAVA_HOME=/opt/jdk1.8export PATH=$PATH:$JAVA_HOME/binexport PATH=$PATH:/home/zk/bin注意:环境变量有问题没有配置成功[master@node2 bin]$ ./zkServer.sh startZooKeeper JMX enabled by defaultUsing config: /home/master/soft/zookeeper-3.4.10/bin/../conf/zoo.cfgStarting zookeeper ... ./zkServer.sh: line 149: /opt/zookper/zookeeper_servFAILED TO WRITE PID此处启动不了的原因是权限问题[root@node2 ~]# cd /home/master/soft/[root@node2 soft]# lshadoop-2.6.5         jdk1.8.0_60                zookeeper-3.4.10hadoop-2.6.5.tar.gz  jdk-8u60-linux-x64.tar.gz[root@node2 soft]# chmod a+wxr zookeeper-3.4.10/[master@node3 bin]$ ./zkServer.sh start必须在root的模式下[参考链接](http://blog.csdn.net/wangyang1354/article/details/50733805)

四、开始走起
1、 在node2和node3、node4上启动如下命令

[root@node2 sbin]# ./hadoop-daemon.sh start journalnode

2、在任意一台机器上执行格式化命令

[root@node1 bin]# ./hdfs namenode -format

这里写图片描述
查看日志文件:

[root@node1 logs]# tail -n50 hadoop-master-journalnode-node1.log

3、查看元数据文件(初始化)

/opt/hadoop-2.6.5temp/dfs/name/current[root@node1 current]# lsfsimage_0000000000000000000  fsimage_0000000000000000000.md5  seen_txid  VERSION

4、启动namenode(在node1上启动)

[root@node1 sbin]# ./hadoop-daemon.sh start namenode

查看是否启动成功

[root@node1 logs]# tail n50 hadoop-master-namenode-node1.log tail: cannot open ‘n50’ for reading: No such file or directory==> hadoop-master-namenode-node1.log <==2017-05-01 09:28:25,163 INFO org.apache.hadoop.hdfs.StateChange: STATE* Network topology has 0 racks and 0 datanodes2017-05-01 09:28:25,164 INFO org.apache.hadoop.hdfs.StateChange: STATE* UnderReplicatedBlocks has 0 blocks2017-05-01 09:28:25,538 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: NameNode RPC up at: node1/192.168.146.51:80202017-05-01 09:28:25,539 INFO org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Starting services required for standby state2017-05-01 09:28:25,504 INFO org.apache.hadoop.ipc.Server: IPC Server Responder: starting2017-05-01 09:28:25,511 INFO org.apache.hadoop.ipc.Server: IPC Server listener on 8020: starting2017-05-01 09:28:25,589 INFO org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer: Will roll logs on active node at node2/192.168.146.52:8020 every 120 seconds.2017-05-01 09:28:25,653 INFO org.apache.hadoop.hdfs.server.namenode.ha.StandbyCheckpointer: Starting standby checkpoint thread...Checkpointing active NN at http://node2:50070Serving checkpoints at http://node1:50070

5、在没有格式化的namenode上面进行(node2)
将node1上的元数据拷贝到node2上面

[root@node2 bin]# ./hdfs namenode -bootstrapStandby

解释的内容
把刚刚格式化之后的元数据拷贝到另一个namenode上
a、启动刚刚格式化的namenode
b、在没有格式化的namenode上执行:hdfs namenode -bootstrapStandby
c、启动第二个namenode
这里写图片描述
6、首先停止所有的服务

[root@node1 sbin]# ./stop-dfs.sh 一次性全部启动[root@node1 sbin]$ ./start-dfs.sh

此处jps下没有ZKFC
这里写图片描述
解决办法:

[root@node1 bin]$ ./hdfs zkfc -formatZK[root@node1 sbin]$ ./start-dfs.sh

这里写图片描述

此处对ZKFC的 重新的声明

总结:

启动zookeeper:[root@node1 sbin]# zkServer.sh start启动namenode:[root@node1 sbin]# ./hadoop-daemon.sh start namenode启动Journalode:[root@node2 sbin]# ./hadoop-daemon.sh start journalnode启动[root@node1 sbin]$ ./start-dfs.sh要学会看logs解决问题

Hadoop集群异常:两个NameNode全部为StandBy状态
日志显示的错误:

Operation category JOURNAL is not supported in state standby

解决方法(未解决):

http://hadoop.apache.org/docs/r2.6.5/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.htmlhttp://f.dataguru.cn/thread-586724-1-1.htmlhttp://blog.sina.com.cn/s/blog_a07df5fd0102w4f8.htmlhttp://www.tuicool.com/articles/ZbQJZvhttp://blog.csdn.net/s646575997/article/details/51176371http://www.open-open.com/lib/view/open1436855630959.htmlhttp://www.tuicool.com/articles/ZbQJZv

五、测试
1、上传文件

在/opt/hadoop-2.6.5/bin文件下创建文件夹:[root@node1 bin]# ./hdfs dfs -mkdir -p /usr/file上传:[root@node1 bin]# ./hdfs dfs -put /home/master/soft /usr/file
1 0
原创粉丝点击