• HDFS 高可用分布式环境搭建


    HDFS 高可用分布式环境搭建

    作者:Grey

    原文地址:

    博客园:HDFS 高可用分布式环境搭建

    CSDN:HDFS 高可用分布式环境搭建

    首先,一定要先完成分布式环境搭建 并验证成功

    然后在 node01 上执行stop-dfs.sh

    重新规划每个节点的职责

    hostNNJNNDNZKFCZK
    node01
    node02
    node03
    node04

    修改node01~node04节点上的配置文件

    vi $HADOOP_HOME/etc/hadoop/core-site.xml
    
    • 1

    内的配置信息修改为:

    <property><name>fs.defaultFSname><value>hdfs://myclustervalue>
    
    property>
    
    <property><name>ha.zookeeper.quorumname><value>node02:2181,node03:2181,node04:2181value>
    
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    然后修改node01~node04上的如下配置文件

    执行vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml

    内的配置信息修改为:

    <property>
        <name>dfs.replicationname>
        <value>2value>
    property>
    <property>
        <name>dfs.namenode.name.dirname>
        <value>/var/bigdata/hadoop/ha/dfs/namevalue>
    property>
    <property>
        <name>dfs.datanode.data.dirname><value>/var/bigdata/hadoop/ha/dfs/datavalue>
    property>
    
    <property>
        <name>dfs.nameservicesname>
        <value>myclustervalue>
    property>
    <property>
        <name>dfs.ha.namenodes.myclustername>
        <value>nn1,nn2value>
    property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1name>
        <value>node01:8020value>
    property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2name>
        <value>node02:8020value>
    property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1name>
        <value>node01:50070value>
    property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2name>
        <value>node02:50070value>
    property>
    
    <property>
        <name>dfs.namenode.shared.edits.dirname>
        <value>qjournal://node01:8485;node02:8485;node03:8485/myclustervalue>
    property>
    <property>
        <name>dfs.journalnode.edits.dirname>
        <value>/var/bigdata/hadoop/ha/dfs/jnvalue>
    property>
    
    <property>
        <name>dfs.client.failover.proxy.provider.myclustername>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
    property>
    <property>
        <name>dfs.ha.fencing.methodsname>
        <value>sshfencevalue>
    property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-filesname>
        <value>/root/.ssh/id_dsavalue>
    property>
    
    <property>
        <name>dfs.ha.automatic-failover.enabledname>
        <value>truevalue>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    安装 zookeeper

    zookeeper 下载地址

    zookeeper安装包上传到 node02,node03,node04 的/opt/bigdata目录下

    在 node02 , node03 , node04 下执行cd /opt/bigdata

    解压tar xf zookeeper-3.4.6.tar.gz

    重命名mv zookeeper-3.4.6 zookeeper

    修改 node02 ,node03 ,node04 上的 zookeeper 配置文件:

    首先cd /opt/bigdata/zookeeper/conf/

    执行cp zoo_sample.cfg zoo.cfg

    执行vi zoo.cfg

    配置如下配置项

    修改如下配置dataDir=/var/bigdata/hadoop/zk

    新增如下配置:

    server.1=node02:2888:3888
    server.2=node03:2888:3888
    server.3=node04:2888:3888
    
    • 1
    • 2
    • 3

    保存

    然后在 node02 上,执行:

    mkdir /var/bigdata/hadoop/zk
    
    echo 1 > /var/bigdata/hadoop/zk/myid
    
    • 1
    • 2
    • 3

    在 node03 上,执行:

    mkdir /var/bigdata/hadoop/zk
    
    echo 2 > /var/bigdata/hadoop/zk/myid
    
    • 1
    • 2
    • 3

    在 node04 上,执行:

    mkdir /var/bigdata/hadoop/zk
    
    echo 3 > /var/bigdata/hadoop/zk/myid
    
    • 1
    • 2
    • 3

    在 node02,node03,node04 下配置环境变量

    执行vi /etc/profile

    新增如下配置

    export ZOOKEEPER_HOME=/opt/bigdata/zookeeper
    
    • 1

    追加到 PATH 中

    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
    
    • 1

    执行source /etc/profile

    启动顺序:

    在 node02,node03,node04 上分别启动 zookeeper

    执行zkServer.sh start

    在 node01,node02,node03 上分别启动 journalnode

    执行hadoop-daemon.sh start journalnode

    选择一个 NN 做格式化,注:只有第一次搭建做,以后不用做

    我们选择 node02,在 node02 上执行hdfs namenode -format

    启动这个格式化的 NN ,以备另外一台同步

    在 node02 上执行hadoop-daemon.sh start namenode

    格式化 zk, 注:只有第一次搭建做,以后不用做

    在 node01 上执行hdfs zkfc -formatZK

    验证 zk 是否格式化成功,在 node04 上执行zkCli.sh

    打开 zk 客户端

    执行ls /
    输出

    [zookeeper, hadoop-ha]
    
    • 1

    显示了新建的 hadoop-ha 目录,验证成功

    在 node01 上执行start-dfs.sh

    启动成功

    测试,在 node01 上,执行如下命令,

    hdfs dfs -mkdir /bigdata
    
    hdfs dfs -mkdir -p /user/root
    
    hdfs dfs -put hadoop-2.6.5.tar.gz /user/root
    
    • 1
    • 2
    • 3
    • 4
    • 5

    打开浏览器

    通过:http://node01:50070/explorer.html#/user/root>

    可以看到上传的文件

    接下来,我们切换我们用 root 搭建的HDFS 用 god 这个用户来启动

    首先,停止 hdfs

    在 node01 上,执行stop-dfs.sh

    node01~node04上都执行:

    添加用户useradd god

    修改密码passwd god

    密码可以自定义。

    将资源和用户绑定:

    chown -R god /opt/bigdata/hadoop
    
    chown -R god /var/bigdata/hadoop
    
    • 1
    • 2
    • 3

    node01~node04都切换成 god 用户,在node01~node04上都执行su god

    使用 god 用户执行如下命令ssh localhost

    分别输入 yes 以及 god 的密码

    node01~node04

    执行:

    cd /home/god/.ssh
    
    ssh-keygen -t dsa -P '' -f ./id_dsa
    
    • 1
    • 2
    • 3

    然后在node01~node04上执行如下四条语句(每个节点都要执行这四条语句)

    ssh-copy-id -i id_dsa node01
    
    输入yes,god密码
    
    ssh-copy-id -i id_dsa node02
    
    输入yes,god密码
    
    ssh-copy-id -i id_dsa node03
    
    输入yes,god密码
    
    ssh-copy-id -i id_dsa node04
    
    输入yes,god密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    修改 node01~node04 中 hdfs-site.xml 的配置

    在 node01~node04 上执行vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml

    将如下配置:

    <property><name>dfs.ha.fencing.ssh.private-key-filesname><value>/root/.ssh/id_dsavalue>
    property>
    
    • 1
    • 2
    • 3
    • 4

    修改为:

    <property><name>dfs.ha.fencing.ssh.private-key-filesname><value>/home/god/.ssh/id_dsavalue>
    property>
    
    • 1
    • 2
    • 3
    • 4

    完成如上配置,就可以使用 god 用户启动 hdfs 了

    在 node01 上,使用 god 用户执行start-dfs.sh

    验证:

    在 node01 上执行:

    su god
    
    hdfs dfs -mkdir  /temp
    
    hdfs dfs -chown god:ooxx /temp
    
    hdfs dfs -chmod 775 /temp
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查看控制台:

    http://node01:50070/explorer.html#/

    目录创建成功

    PermissionOwnerGroupSizeReplicationBlock SizeName
    drwxrwx—godooxx0 B00 Btemp

    且组 ooxx 拥有所有权限

    我们再新建一个用户 good ,并且将 good 加入 ooxx 这个组,good 这个用户就可以正常上传文件到/temp目录下了

    在 node01 上执行:

    su root
    
    useradd good
    
    passwd good
    
    • 1
    • 2
    • 3
    • 4
    • 5

    设置good的密码。

    然后添加组:

    groupadd ooxx
    
    • 1

    将 good 这个用户添加进入 ooxx 这个组

    usermod -a -G ooxx good
    
    • 1

    然后执行:

    su god
    
    • 1

    在 god 用户下执行:

    hdfs dfsadmin -refreshUserToGroupsMappings
    
    • 1

    然后切换 good 用户

    su good
    
    cd /home/good
    
    touch good.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后执行:

    vi good.txt
    
    • 1

    随意输入一些内容,保存

    最后执行

    hdfs dfs -put good.txt /temp
    
    • 1

    更新成功。

  • 相关阅读:
    2023测试工程师做哪些准备,才能从众人中脱颖而出,不看后悔10年
    SimpleChannelInboundHandler使用总结
    浏览器IndexedDB模块损坏及解决办法
    【C++】C++基础知识(七)---指针
    CV算法工程师的LLM日志(1)微调技术——即插即用的neft-Tune【原理&&代码】
    深入剖析Kubernetes
    pytest unittest temp path单元测试创建临时文件
    vue前端 页面样式强制覆盖
    优化SOCKS5的方法
    Codeforces Round 901 (Div. 2) | JorbanS
  • 原文地址:https://blog.csdn.net/hotonyhui/article/details/126754282