HDFS 高可用分布式环境搭建

作者:Grey

原文地址:

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

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

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

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

重新规划每个节点的职责

host NN JNN DN ZKFC ZK
node01
node02
node03
node04

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

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

<configuration></configuration>内的配置信息修改为:

<property>

​    <name>fs.defaultFS</name>    

​    <value>hdfs://mycluster</value>

</property>

<property>

​    <name>ha.zookeeper.quorum</name>

​    <value>node02:2181,node03:2181,node04:2181</value>

</property>

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

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

<configuration></configuration>内的配置信息修改为:

<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
​ <value>/var/bigdata/hadoop/ha/dfs/data</value>
</property>
<!-- 以下是 一对多,逻辑到物理节点的映射 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>node02:50070</value>
</property>
<!-- 以下是JN在哪里启动,数据存那个磁盘 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/bigdata/hadoop/ha/dfs/jn</value>
</property>
<!-- HA角色切换的代理类和实现方法,我们用的ssh免密 -->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</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_dsa</value>
</property>
<!-- 开启自动化: 启动zkfc: -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

安装 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

保存

然后在 node02 上,执行:

mkdir /var/bigdata/hadoop/zk

echo 1 > /var/bigdata/hadoop/zk/myid

在 node03 上,执行:

mkdir /var/bigdata/hadoop/zk

echo 2 > /var/bigdata/hadoop/zk/myid

在 node04 上,执行:

mkdir /var/bigdata/hadoop/zk

echo 3 > /var/bigdata/hadoop/zk/myid

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

执行vi /etc/profile

新增如下配置

export ZOOKEEPER_HOME=/opt/bigdata/zookeeper

追加到 PATH 中

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

执行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]

显示了新建的 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

打开浏览器

通过: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

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

然后在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密码

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

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

将如下配置:

<property>
​ <name>dfs.ha.fencing.ssh.private-key-files</name>
​ <value>/root/.ssh/id_dsa</value>
</property>

修改为:

<property>
​ <name>dfs.ha.fencing.ssh.private-key-files</name>
​ <value>/home/god/.ssh/id_dsa</value>
</property>

完成如上配置,就可以使用 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

查看控制台:

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

目录创建成功

Permission Owner Group Size Replication Block Size Name
drwxrwx--- god ooxx 0 B 0 0 B temp

且组 ooxx 拥有所有权限

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

在 node01 上执行:

su root

useradd good

passwd good

设置good的密码。

然后添加组:

groupadd ooxx

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

usermod -a -G ooxx good

然后执行:

su god

在 god 用户下执行:

hdfs dfsadmin -refreshUserToGroupsMappings

然后切换 good 用户

su good

cd /home/good

touch good.txt

然后执行:

vi good.txt

随意输入一些内容,保存

最后执行

hdfs dfs -put good.txt /temp

更新成功。

HDFS 高可用分布式环境搭建的更多相关文章

  1. 从头开始搭建一个Spring boot+ActiveMQ高可用分布式环境

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  2. Hbase 完全分布式 高可用 集群搭建

    1.准备 Hadoop 版本:2.7.7 ZooKeeper 版本:3.4.14 Hbase 版本:2.0.5 四台主机: s0, s1, s2, s3 搭建目标如下: HMaster:s0,s1(备 ...

  3. Hadoop框架:HDFS高可用环境配置

    本文源码:GitHub·点这里 || GitEE·点这里 一.HDFS高可用 1.基础描述 在单点或者少数节点故障的情况下,集群还可以正常的提供服务,HDFS高可用机制可以通过配置Active/Sta ...

  4. 【转】Hadoop HDFS分布式环境搭建

    原文地址  http://blog.sina.com.cn/s/blog_7060fb5a0101cson.html Hadoop HDFS分布式环境搭建 最近选择给大家介绍Hadoop HDFS系统 ...

  5. 大数据:Hadoop(JDK安装、HDFS伪分布式环境搭建、HDFS 的shell操作)

    所有的内容都来源与 Hadoop 官方文档 一.Hadoop 伪分布式安装步骤 1)JDK安装 解压:tar -zxvf jdk-7u79-linux-x64.tar.gz -C ~/app 添加到系 ...

  6. HDFS 伪分布式环境搭建

    HDFS 伪分布式环境搭建 作者:Grey 原文地址: 博客园:HDFS 伪分布式环境搭建 CSDN:HDFS 伪分布式环境搭建 相关软件版本 Hadoop 2.6.5 CentOS 7 Oracle ...

  7. HDFS 分布式环境搭建

    HDFS 分布式环境搭建 作者:Grey 原文地址: 博客园:HDFS 分布式环境搭建 CSDN:HDFS 分布式环境搭建 准备四个Linux实例 每个实例对应的 host 和 ip 地址如下 nod ...

  8. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.服务器环境 主机名 IP 用户名 密码 安装目录 master188 192.168.29.188 hadoop hadoop /home/ha ...

  9. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

随机推荐

  1. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  2. 关闭windows更新、设置自启动、提高开发机性能

    做Java开发的朋友都知道,每次开机启动一堆的软件和工具,包括未写完的文档,是非常花时间的,加上一桌面的快捷方式,往往不是那么容易直接找到.windows的自动更新往往在凌晨自动启动,导致很多软件被异 ...

  3. Multiparty Cardinality Testing for Threshold Private Set-2021:解读

    本文记录阅读该论文的笔记. 本文基于阈值加法同态加密方案提出了一个新的允许\(N\)方检查其输入集的交集是否大于\(n-t\)的IPSI方案,该协议的通信复杂度为\(O(Nt^2)\). 注意:\(N ...

  4. 在docker中打开redis 客户端 cli

    首先交互方式进入redis容器 docker exec -it redis /bin/bash 随后运行客户端 redis-cli

  5. Autograd: 自动求导

    Pytorch中神经网络包中最核心的是autograd包,我们先来简单地学习它,然后训练我们第一个神经网络. autograd包为所有在tensor上的运算提供了自动求导的支持,这是一个逐步运行的框架 ...

  6. HashSet 添加/遍历元素源码分析

    HashSet 类图 HashSet 简单说明 HashSet 实现了 Set 接口 HashSet 底层实际上是由 HashMap 实现的 public HashSet() { map = new ...

  7. 综合案例_文件搜索和FileFilter过滤器的原理和使用

    文件搜索 需求 : 遍历D:\aaa文件夹,及 aaa 文件夹的子文件夹并且只要.java结尾的文件 分析: 1.目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录 2.遍历目录时,获取的子文件 ...

  8. Lambda表达式的无参数无返回值的练习和Lambda表达式有参数有返回值的练习

    使用Lambda(无参无返回) 说明:给定一个厨师(Cook)接口,内含唯一的抽象方法makeFood,且无参数.无返回值.如下: public interface Cook{ public abst ...

  9. 关于 Python 的 import

    好久以前就被 Python 的相对与绝对导入所困扰.去年粗浅探究后自以为完全理解,近来又因 sys.path[0] 和 os.getcwd() 的不一致而刷新了认知... Python 官方文档 5. ...

  10. webapi <Message>已拒绝为此请求授权。</Message>

    webapi <Message>已拒绝为此请求授权.</Message> 原有的调用base.OnAuthorization(actionContext); 换成下面这个 // ...