hadoop集群-zookper高可用

版权声明:转载请标明来源 https://blog.csdn.net/jy882821/article/details/86353423
  1. 文档地址: 百度网盘
    提取码:169f
    WPS 2019文档,内附详细安装过程

    Linux安装路径及备份恢复都可在这里恢复

    如何将原来的系统导入到virtualbox中

    准备linux 准备一张centos的盘 Redhat:https://www.redhat.com/en

    Ubuntu:https://www.ubuntu.com/download/desktop
    Centos:https://www.centos.org/

    安装包:CentOS-6.10-x86_64-minimal.iso 将光盘插入到光驱中;

    安装linux

    用户名:root 密码:123456

    关机: Halt -n Init 0

    备份–快照

    硬盘空间够用的话,有事木事就备份一下;

    上网 上网方式:
    https://jingyan.baidu.com/article/9f7e7ec04f73c66f28155484.html 现状
    真实机(宿主机)可以上外网 虚拟机可以上外网;(但是真实机与虚拟机网络不通) 虚拟机即能上外网又能真实机互通; 修改网卡,防火墙
    网卡

    Mac地址;网卡的身份证;12位16进制组成;

    操作命令如下:

    进入到配置网卡的目录 cd /etc/sysconfig/network-scripts/

    查看指定文件的内容;

    eth0:第一块网卡,直接复制一下就可以 less ifcfg-eth0

    列出当前目录下面有哪些文件夹和文件夹;dos:dir Ls

    #将网卡1,复制一份变成网卡2 cp ifcfg-eth0 ifcfg-eth1

    编辑网卡2; vi ifcfg-eth1

    查看模式(默认的),编辑模式,命令模式;

    如果想修改,按下i;就可以编辑;(编辑模式)

    退出:保存(按下esc键松了,g4再按下:x),或者(按下esc键,再按下:wq!):不保存:(按下esc键,:q!)

    将网络服务重启; service network restart

    查看ip ifconfig

    Ifcfg-eth1的内容; DEVICE=eth1 TYPE=Ethernet
    UUID=e8d5353d-aa82-4804-8d1e-0683b3ece70b

    把no变成yes,就可以随机启动 ONBOOT=yes NM_CONTROLLED=yes

    动态获取ip BOOTPROTO=dhcp HWADDR=08:00:27:2F:C1:40 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no

    NAME=“System eth0” 静态IP DEVICE=eth1 TYPE=Ethernet
    UUID=e8d5353d-aa82-4804-8d1e-0683b3ece70b

    把no变成yes,就可以随机启动 ONBOOT=yes NM_CONTROLLED=yes

    静态ip BOOTPROTO=static HWADDR=08:00:27:2F:C1:40 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no

    NAME=“System eth0”

    配置一下IP;先换成动态的,再换成静态的; IPADDR=192.168.56.101

    防火墙 临时修改

    永久修改

    check config Chkconfig

    查询所有的随机启动程序 Chkcnofig

    根目录

    一个软件有三部分组成: Windows Java linux
    可执行文件:bin Exe,msi,bat,cmd 和操作系统相关 *.sh 配置文件:conf xml Properties Xml
    json Conf(etc目录) 库(工具) dll jar包 *.so
    Windows和java一样,都是把一个软件的三部分放到了一个目录中 Bin:可执行文件;建议把所有软件的可执行文件都放到此目录中
    Boot:引导文件;启动的时候可以找到linux系统 Dev:设备;dvd,usb; Etc:配置文件
    Home:每一个用户在创建的时候会有一个home目录;(建议用户把自已的文件放到home目录下面) Lib:库
    lib64:64位操作系统的库 lost+found: Media:多媒体;片;光盘里面的内容
    Mnt:挂载;插u盘,手动挂载一下;(快捷方式) Opt:用户安装的系统都搁到此目录下面;c:/program file;
    Proc:进程的相关信息 Root:root用户的home目录 Sbin:多个bin文件组合到一起;批量可执行文件
    Selinux:linux自带的安全管理组件(一般禁用) Srv: sys
    Tmp:临时文件;(重启Linux,如果硬盘空间不够,会优先删除此目录下面所有的文件;不安全) Usr:和opt类似
    Var:变量,哪些文件经常发生变化,放到此目录;如日志(log4j2)

    硬盘分区

    统一将软件安装到/data目录;

    修改的是/etc/fstab文件

    重启 备份

    yum yum源 自动下载rpm包(最新的) 自动验证rpm是否完整 自动安装, 自动测试 自动运行 安装yum-程序
    命令上传

    lrzsz yum -y install lrzsz

    上传-y:如果文件已经存存,-y表示覆盖 rz -y

    sz文件名 Sz -y

    编辑器 vi–编辑器 查看模式 Ctrl+f:翻下页 Ctrl+b:翻上页 输入数字,然后输入大写的G;
    直接输入大写的G是最后一行; 按下两下d;删除当前行 Shift+0以段落为单位进行切换; Home键,end键
    按下回车键,一次一行 编辑模式 按下i进入到编辑模式 按下esc:从编辑模式进入到查看模式;
    :wq!(保存退出),:x(保存退出),:q!(不保存退出) 命令模式;在查看模式下面直接输入:就会进入到命令模式; :set
    nu打回车,就看到了行号 搜索:查找;/关键字;按下n,找下一个,按下大写的n(shift+n)(找上一个)

    vim–编辑器 Vi和vim完全一样,只不过vim有色儿;(颜色)

    安装–wget 下载工具;wget;windows版本的迅雷

    检查wget如何使用 wget --help

    -y:相当一路下一步 yum -y install wget

    wget url;在浏览器中弹出一个下载框 wget https://dldir1.qq.com/qqfile/qq/QQ9.0.8/24207/QQ9.0.8.24207.exe

    断点续传 wget https://dldir1.qq.com/qqfile/qq/QQ9.0.8/24207/QQ9.0.8.24207.exe -c

    备份 每当有需要改变或者增加新的程序,或者配置文件时多备份 以上单独一台虚拟机的基础标配 hadoop–集群标配
    多台虚拟机–标配 创建虚拟机

    赶紧要看一下,新复制出来的新电脑是不是可以上网; 要保证新复制出来的电脑,MAC地址不一样(网卡的身份证);先关机

    重新配置一下网络(参照初始安装linux如何配置网络)

    重启两次 Xshell必备

    标准配置 保证网络畅通 虚拟机之间相互通畅

    真实机与虚拟机之间畅通

    修改主机名

    修改hosts文件(离线版dns); linux的hosts文件

    Windows的hosts文件

    免密钥

    上锁;锁和钥匙 ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa

    是把钥匙放到另外一个文件中(给邻居) cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    把这个文件变成600; chmod 600 ~/.ssh/authorized_keys

    把A的钥匙给了B,A可以登陆B

    做备份

    四台虚拟机

    集群搭建 JDK Hadoop集群 主机名 Node-1 Node-2 Node-3 Node-4 Namenode ✔
    Datanode ✔ ✔ ✔ secondnamenode ✔ Resourcemanager ✔
    nodemanager ✔ ✔ ✔ 先安装jdk; 先将jdk上传到node-1上,
    将node-1上的jdk分别在node-2,node-3,node-4搁一份

    将jdk的rpm手动上传到node-2,node-3,node-4;

    本地的网络相当的慢;

    利用服务器的网络来传输内容;

    scp -r(递归) 文件或者文件夹的名字 用户名@主机名(ip):目标服务器的路径 scp -r jdk-8u192-linux-x64.rpm root@node-2:/root

    简写;用户名可以省略(默认是当前的用户名)

    pwd:在源机器上,一定要进入到最终的目录; 在目标服务器上,最终目录一定要存在;

    在源机器上目录是:root; 如果目标机器上木有root目录,建议先创建好(一定要注意) scp -r jdk-8u192-linux-x64.rpm node-3:pwd

    第三种写法 scp jdk-8u192-linux-x64.rpm node-4:$PWD

    hadoop 先配置好一台服务器(node-1) 查看jdk安装路径 Witch javac / whereis
    javac

    Jdk装到哪了?

    环境变量在哪配置 全局的系统变量

    先将hadoop上传到node-1上;都放到了/data/hadoop/下面
    配置文件:(etc/hadoop/hadoop-env.sh)

    export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export
    HDFS_SECONDARYNAMENODE_USER=root export
    YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root

    配置文件(etc/hadoop/core-site.xml) <?xml version=“1.0”
    encoding=“UTF-8”?> <?xml-stylesheet type=“text/xsl”
    href=“configuration.xsl”?>

    fs.defaultFS
    hdfs://node-1:9000

    hadoop.tmp.dir
    /data/hadoop/data/hadoop-${user.name}

    配置文件(etc/hadoop/hdfs-site.xml) <?xml version=“1.0”
    encoding=“UTF-8”?> <?xml-stylesheet type=“text/xsl”
    href=“configuration.xsl”?>

    dfs.replication
    2

    <!-- 权限检查 -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    
    <!-- namenode的访问地址;http协议,网页访问 -->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>node-1:9870</value>
    </property>
    <!-- secondary的访问地址;http协议,网页访问 -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node-2:9868</value>
    </property>
    
    <!-- dfs.namenode.name.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改 		file://${hadoop.tmp.dir}/dfs/name
    
    	dfs.datanode.data.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改
    	file://${hadoop.tmp.dir}/dfs/data
     --> </configuration>
    

    配置文件(etc/hadoop/mapred-site.xml) <?xml version="1.0"?>

    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>


    mapreduce.framework.name yarn


      mapreduce.map.memory.mb   200
      mapreduce.map.java.opts
      -Xmx200M
      mapreduce.reduce.memory.mb   200
      mapreduce.reduce.java.opts
      -Xmx200M

    配置文件(etc/hadoop/yarn-site.xml) <?xml version="1.0"?>

    yarn.nodemanager.aux-services
    mapreduce_shuffle


    yarn.nodemanager.env-whitelist
    JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME

    <!-- resourcemanager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node-1</value>
    </property> </configuration>
    

    配置文件(etc/hadoop/workers);(放的是datanode,每一个datanode默认都有一个nodemanager)
    node-2 node-3 node-4

    将配置好的hadoop分发到node-2,node-3,node-4上面;用scp

    一定是在hadoop软件(框架)所在的目录下面 /data/hadoop

    在node-1执行此命令,将hadoop拷贝到node-2 scp -r hadoop/ node-2:$PWD

    拷贝到node-3上 scp -r hadoop/ node-3:pwd

    拷贝到node-4上 scp -r hadoop/ node-4:/data/hadoop

    在namenode上执行hadoop的启动命令;(node-1)

    格式化,只操作一次,要格式化的时候要慎重 bin/hdfs namenode -format

    启动dfs sbin/start-dfs.sh

    启动yarn sbin/start-yarn.sh

    访问 Node-1:9870

    日志 如果启动报错,看日志

    在namenode的内容

    在datanode存储的数据;(木有加密)

    zookeeper高可用 内容: 分布式有缺点: 只有大哥和二哥,如果都挂了呢?
    Namenod挂了,seconnamenode都不能自动接棒 Namenode和secondnamenode都挂了,没有三哥;
    Zookeeper: Zookeeper:动物园管理员 作用:(多台服务器)
    把多台服务器中的硬盘当成一块使用,如果没有hadoop或者hadoop自己本身运行的时候也需要存储数据
    每台服务器都要装zookeeper;自己有一个选举的机制(如:选班长) 投票: 选leader;
    Leader挂了;剩下的人自己选择 如果leader活了,当成小弟,跟着leader走
    自己主动检测leader挂了,自动切换(通知所有人)

    官网(http://zookeeper.apache.org/)

    实战 Zookeeper 单机版本 Windows 版本
    直接解压此文件”zookeeper-3.4.13.tar.gz”,最好别放在中文目录中 去掉版本号 标准目录

    Bin:可执行文件 Conf:配置文件 Contrib:第三方提供的jar包 Dist-maven:使用maven打包的发布版本
    Docs:文档 Lib:jar 包 Src:源码 核心的jar包:zookeeper-3.4.13.jar
    Readme.md(读我) 配置文件(conf/zoo_sample.cfg复制一份为zoo.cfg)

    服务器启动 双击 bin/zkServer.cmd

    启动成功

    启动命令

    客户端启动

    客户端常用命令:把zookeeper理解为 linux 上的文件系统 也有文件和文件夹,(文件夹上可以存储内容)

    创建一个目录/文件(在这叫路径);

    create:目录/文件,数据 create /hw test

    查看/表示根路径和linux很像 Ls 路径

    修改 Set 路径 值

    查看内容 Get 路径

    删除(路径) rmr /hw

    创建一个子目录; Create 路径 值

    路径必须得存在; create /a/b test_2

    create s:(永久性节点)e:(临时性节点); 临时文件 Create -s /s a Create -e /e b

    存储位置

    Linux版本

    一定要将zookeeper的tar包传到服务器上,

    解压tar包 tar -xzvf zookeeper-3.4.13.tar.gz

    改名 mv zookeeper-3.4.13/ zookeeper

    配置文件:(conf/zoo_sample.cfg到zoo.cfg);

    一定要注意我的当前目录 cp zoo_sample.cfg zoo.cfg

    启动 bin/zkServer.sh start

    查看是否启动 Jps bin/zkServer.sh status !ps ps aux|grep pwd

    查看日志(zookeeper.out)

    启动客户端 bin/zkCli.sh 退出客户端: Quit/ctrl+d

    Zookeeper多级版本 Node-1 Node-2 Node-3 Node-4 zk ✔ ✔ ✔

    先装好一个(不能完全装完) 修改配置文件(conf/zoo.cfg);

    The number of milliseconds of each tick tickTime=2000

    The number of ticks that the initial

    synchronization phase can take initLimit=10

    The number of ticks that can pass between

    sending a request and getting an acknowledgement syncLimit=5

    the directory where the snapshot is stored.

    do not use /tmp for storage, /tmp here is just

    example sakes. dataDir=/data/zookeeper/data/

    the port at which the clients will connect clientPort=2181

    the maximum number of client connections.

    increase this if you need to handle more clients

    #maxClientCnxns=60

    Be sure to read the maintenance section of the

    administrator guide before turning on autopurge.

    http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

    The number of snapshots to retain in dataDir

    #autopurge.snapRetainCount=3

    Purge task interval in hours

    Set to “0” to disable auto purge feature

    #autopurge.purgeInterval=1

    集群的配置

    server.随机起(zk自己识别的名字)=主机名:端口1:端口2 server.1=node-1:2888:3888 server.2=node-2:2888:3888 server.3=node-3:2888:3888

    将zookeeper从node-1同步到node-2,和node-3;

    一定要在/data/zookeeper下面;当前目录下面得有zookeeper scp -r zookeeper/ node-2:pwd scp -r zookeeper/ node-3:pwd

    一定要在 zoo.cfg配置文件中data目录下面创建一个myid;myid文件中填写的是zookeeper自己为服务器起的别名

    三台服务器一块启动 zokeeper

    重启 bin/zkServer.sh restart

    查看状态 bin/zkServer.sh status

    客户端使用和单机版一样

    在三个zookeeper任意一台操作,会自动的同步到其它服务器上; 都是框架来和zookeeper交互

    高可用–hight avaible

    参照网址:
    http://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html 一定要让zookeeper正常工作 Node-1 Node-2 Node-3 Node-4 Namenode ✔ ✔
    Datanode ✔ ✔ ✔ Resourcemanager ✔ ✔ Zookeeper ✔ ✔ ✔
    Journalnode ✔ ✔ ✔ Journal node:hadoop负责与zookeeper进行沟通;
    Zkfc:zookeeper failover controller;大哥挂了自动切换;

    配置文件 Hadoop-evn.sh

    定义一些变量 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root

    export YARN_RESOURCEMANAGER_USER=root export
    YARN_NODEMANAGER_USER=root export HDFS_JOURNALNODE_USER=root export
    HDFS_ZKFC_USER=root

    Core-site.xml <?xml version="1.0" encoding="UTF-8"?>

    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>


    fs.defaultFS
    hdfs://jh

    hadoop.tmp.dir
    /data/hadoop/data/hadoop-${user.name}

    <!-- 告诉hadoop,zookeeper放哪了 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>node-1:2181,node-2:2181,node-3:2181</value>
    </property> </configuration>
    

    Hdfs-site.xml <?xml version="1.0" encoding="UTF-8"?>

    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>


    dfs.replication
    2

    <!-- 权限检查 -->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    
    <!-- dfs.namenode.name.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改 		file://${hadoop.tmp.dir}/dfs/name
    
    	dfs.datanode.data.dir:namenode的目录放的路径在hadoop.tmp.dir之上做了修改
    	file://${hadoop.tmp.dir}/dfs/data
     -->
    <!-- 为nameservice起一个别名
        董事会
     -->
    <property>
        <name>dfs.nameservices</name>
        <value>jh</value>
    </property>
    
    <!-- 董事会的成员 -->
    <property>
        <name>dfs.ha.namenodes.jh</name>
        <value>nn1,nn2</value>
    </property>
    <!-- 配置每一个攻事会成员
        每一个配置的时候得有rpc(底层),http(上层==网页)
     -->
    <property>
        <name>dfs.namenode.rpc-address.jh.nn1</name>
        <value>node-1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.jh.nn1</name>
        <value>node-1:9870</value>
    </property>
    
    <!-- 第二个成员 -->
    <property>
        <name>dfs.namenode.rpc-address.jh.nn2</name>
        <value>node-2:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.jh.nn2</name>
        <value>node-2:9870</value>
    </property>
    
    <!-- journalnode:负责hadoop与zk进行沟通 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node-2:8485;node-3:8485;node-4:8485/jh</value>
    </property>
    
    <!-- 哪个类决定了自动切换
        哪个namenode是活着的(active)
     -->
    <property>
        <name>dfs.client.failover.proxy.provider.jh</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    
    <!-- journal的存储位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/data/hadoop/data/journal/</value>
    </property>
    
    <!-- 大哥挂了,自动切换到二哥上
        启动故障转移
     -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    
    <!-- (ssh免密码登录) -->
    <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> </configuration>
    

    将配置文件传递到其他的服务器上 文件所在的目录打包发送

    一定要注意,此命令的基础是在hadoop的目录下面 scp -r etc/ node-2:pwd scp -r etc/ node-3:pwd scp -r etc/ node-4:pwd

    启动hadoop 删除/data/hadoop/data 下所有文件 Journalnode
    在node-2,node-3,node-4三个服务器上启动journalnode服务器,执行以下命令
    sbin/hadoop-daemon.sh start journalnode bin/hdfs --daemon start
    journalnode

    启动namenode 格式化namenode ,在其中任何一台namenode上格式化(我是在 node-1 上做得格式化)
    bin/hdfs namenode -format

    把刚才格式化后的元数据拷贝到另外一个namenode上(将node-拷贝到node-2)

    一定要进入到/data/hadoop/data中 scp -r hadoop-root/ node-2:pwd

    启动刚刚格式化的namenode:(node-1) sbin/hadoop-daemon.sh start namenode
    bin/hdfs --daemon start namenode

    在没有格式化的namenode上执行:(node-2) bin/hdfs namenode -bootstrapStandby

    启动第二个namenode(node-2) sbin/hadoop-daemon.sh start namenode bin/hdfs
    –daemon start namenode

    在其中一个节点上初始化zkfc(node-1)(一定要启动zookeeper) bin/hdfs zkfc -formatZK

    重新启动hdfs

    sbin/stop-dfs.sh sbin/start-dfs.sh

    测试 停止active的namenode,自动切换 Kill -9 bin/hdfs --daemon stop namenode

    高可用的yarn 参照网址:
    http://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
    配置文件 <?xml version="1.0"?>

    yarn.nodemanager.aux-services
    mapreduce_shuffle


    yarn.nodemanager.env-whitelist
    JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME

    <!-- yarn开启ha -->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!-- yarn董事会的名字 -->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>jh-yarn</value>
    </property>
    <!-- 董事会列表 -->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- hostname,webapp-->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node-1</value>
    </property>
     <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>node-1:8088</value>
    </property>
    <!-- 第二台 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node-2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>node-2:8088</value>
    </property>
    <!-- zookeeper -->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node-1:2181,node-2:2181,node-3:2181</value>
    </property> </configuration>
    

    启动yarn sbin/start-yarn.sh

    Yarn相关的命令

    检查一下当前所在的节点,resource是active还是standby yarn rmadmin -getServiceState rm1

    配置成功后 一旦配置成功以后,都是使用以下命令 sbin/stop-all.sh sbin/start-all.sh

    Hadoop 往zookeeper都写了啥

猜你喜欢

转载自blog.csdn.net/jy882821/article/details/86353423