首页 > 其他分享 >大数据实训第十七天笔记

大数据实训第十七天笔记

时间:2024-07-22 10:58:07浏览次数:14  
标签:dfs 笔记 zk yarn 第十七 实训 监听器 namenode 节点

ZooKeeper的api的使用Hadoop的HA模式

初始化ZooKeeper客户端

与HDFS和Hive的链接类似,但是Zookeeper中引入了监听器的机制,关于监听器的使用,会在后面提到

// 初始化zk的客户端
    @Before
    public void init() throws IOException {

        //zk集群的地址
        String connectString = "bigdata04:2181,bigdata05:2181,bigdata06:2181";

        //zk的会话超时时间(单位:毫秒)
        int sessionTimeout = 2000;


        //创建zk客户端对象
        //使用匿名内部类实训Watcher接口
         zk = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
            //重写process方法,该方法为监听器的回调方法
            //当监听器被注册时 回调函数处于异步状态
            //当监听器被触发时 回调函数开始执行
            @Override
            public void process(WatchedEvent watchedEvent) {
                System.out.println("-------------获取监听数据--------------");
                try {
                    List<String> childrenNodeList = zk.getChildren("/", true);

                    //进行遍历
                    for (String item :childrenNodeList){
                        System.out.println("监听器获取了"+item);
                    }
                } catch (KeeperException e) {
                    throw new RuntimeException(e);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        });
    }

创建节点

//创建节点
    @Test
    public void createNode() throws InterruptedException, KeeperException {

        //节点的路径
        String path = "/node1_api";

        //节点中储存的数据
        byte[] dataBytes="abc".getBytes();

        //设置节点的访问权限列表
        //OPEN_ACL_UNSAFE: 表示使用完全开放的ACL权限 允许客户端对节点进行读写操作
        ArrayList<ACL> aclList = ZooDefs.Ids.OPEN_ACL_UNSAFE;

        //创建持久非顺序节点
        CreateMode createMode =CreateMode.PERSISTENT;

        //创建持久非顺序节点
        String node1 = zk.create(path, dataBytes, aclList, createMode);

        System.out.println(node1);

//        //创建持久顺序节点
//        String node2 = zk.create("/node2_api", "DEF".getBytes(), aclList, CreateMode.PERSISTENT_SEQUENTIAL);
//        System.out.println(node2);


//        //临时节点只在当前会话有效,会随着java代码的结束会话而结束
//        //创建临时非顺序节点
//        String node3 = zk.create("/node3_api", "123".getBytes(), aclList, CreateMode.EPHEMERAL);
//        System.out.println(node3);

//        //创建临时顺序节点
//        String node4 = zk.create("/node4_api", "123".getBytes(), aclList, CreateMode.EPHEMERAL_SEQUENTIAL);
//        System.out.println(node4);

    }

创建了持久非顺序节点
在这里插入图片描述
创建了持久顺序节点
在这里插入图片描述
idea命令行已经打印了node3临时非顺序节点
在这里插入图片描述
但是因为java代码的会话已经关闭,所以查不到临时节点
在这里插入图片描述

查询节点

不使用监听器

不使用监听器,效果与zookeeper命令行一致

ls -s /
 //查询节点的子节点 不设置监听器
    @Test
    public void getChildNode() throws InterruptedException, KeeperException {

        //设置查询的起始节点
        String path="/";

        //是否设置监听器
        boolean watcher=false;

        //查询根节点的所有子节点
        List<String> childrenNodeList = zk.getChildren(path, watcher);

        for (String item:childrenNodeList){
            System.out.println(item);
        }
    }

在这里插入图片描述

使用监听器

使用监听器会在线程阻塞后自动保持监听器的监听状态,默认调用init中的监听器

//查询节点中的子节点,设置监听器
    @Test
    public void getChildNodeWithWatcher() throws InterruptedException, KeeperException {

        List<String> childrenNodeList = zk.getChildren("/", true);

        for (String item:childrenNodeList){
            System.out.println(item);
        }

        //为了保持监听器的监听 需要阻塞当前的线程直到当前的监听器生效
        Thread.sleep(Long.MAX_VALUE);
    }

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Hadoop的HA模式配置

安装配置

准备三台克隆的虚拟机,其中包含安装好的Hadoop与jdk
安装ZooKeeper
配置hosts文件与profile文件
配置三台虚拟机之间进行免密登录
部分内容参考:
Hadoop分布式安装
在正常的Hadoop安装中,需要将以下文件内容变更
core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

		<!-- hdfs地址,ha中是连接到nameservice -->
		<property>
			<name>fs.defaultFS</name>
			<value>hdfs://mycluster</value>
		</property>
		
		<!-- 指定hadoop数据的存储目录 -->
		<property>
			<name>hadoop.tmp.dir</name>
			<value>/opt/softs/hadoop3.1.3/data</value>
		</property>
		
		<!-- 故障转移 -->
		<property>
			<name>ha.zookeeper.quorum</name>
			<value>bigdata07:2181,bigdata08:2181,bigdata09:2181</value>
		</property>
		
		
		<!-- 解决HDFS web页面上删除、创建文件权限不足的问题 -->
		<property>
			<name>hadoop.http.staticuser.user</name>
			<value>root</value>
		</property>

		<property>
			<name>hadoop.proxyuser.root.hosts</name>
			<value>*</value>
		</property>
		
		<property>
			<name>hadoop.proxyuser.root.groups</name>
			<value>*</value>
		</property>
		
</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <!-- 为namenode集群定义一个services name -->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>

  <!-- nameservice包含哪些namenode,为各个namenode起名 -->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>

  <!-- 名称为nn1的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>bigdata07:8020</value>
  </property>

  <!-- 名称为nn2的namenode的rpc地址和端口号,rpc用来和datanode通讯  -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>bigdata08:8020</value>
  </property>


  <!-- 名称为nn1的namenode的http地址和端口号,web客户端 -->
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>bigdata07:50070</value>
  </property>

  <!-- 名称为nn2的namenode的http地址和端口号,web客户端 -->
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>bigdata08:50070</value>
  </property>


  <!-- namenode间用于共享编辑日志的journal节点列表 -->	
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://bigdata07:8485;bigdata08:8485;bigdata09:8485/mycluster</value>
  </property>
  
  
  <!-- journalnode 上用于存放edits日志的目录 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/softs/hadoop3.1.3/data/dfs/jn</value>
  </property>

  <!-- 客户端连接可用状态的NameNode所用的代理类 -->
  <property>
    <name>dfs.client.failover.proxy.provider.ns1</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>

 <!--sshfence:防止namenode脑裂,当脑裂时,会自动通过ssh到old-active将其杀掉,将standby切换为active  -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>


  <!--ssh密钥文件路径-->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
  </property>

  <!-- 故障转移设置为ture -->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>

</configuration>

mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <!--指定mapreduce运行在yarn框架上-->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <!--设置mapreduce的历史服务器安装在bigdata007节点上-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>bigdata07:10020</value>
    </property>


	<!--设置历史服务器的web页面地址和端口号-->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>bigdata07:19888</value>
    </property>

</configuration>

yarn-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <!-- 配置yarn的默认混洗方式,选择为mapreduce的默认混洗算法 -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

  <!-- 是否启用日志聚集功能 -->
  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>

  <!-- 是配置聚集的日志在HDFS上最多保存多长时间 -->
  <property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>106800</value>
  </property>

  <!--  启用resourcemanager的ha功能 -->
  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
  </property>

  <!--  为resourcemanage ha集群起个id -->
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yarn-cluster</value>
  </property>

  <!--  指定resourcemanger ha有哪些节点名 -->
  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
  </property>

  <!--  指定第一个节点的所在节点 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>bigdata08</value>
  </property>

  <!--  指定第二个节点所在机器 -->
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>bigdata09</value>
  </property>

  <!-- 指定resourcemanger ha所用的zookeeper节点 -->
  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>bigdata07:2181,bigdata08:2181,bigdata09:2181</value>
  </property>

 <!-- 开启Recovery后,ResourceManger会将应用的状态等信息保存到yarn.resourcemanager.store.class配置的存储介质中,重启后会load这些信息,并且NodeManger会将还在运行的container信息同步到ResourceManager,整个过程不影响作业的正常运行。 -->
  <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
  </property>

 <!-- 指定yarn.resourcemanager.store.class的存储介质(HA集群只支持ZKRMStateStore) -->
  <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  </property>

</configuration>

在安装流程中,再额外添加的profile配置项

export HADOOP_CONF_DIR=/opt/softs/hadoop3.1.3/etc/hadoop/
export HADOOP_CLASSPATH=`hadoop classpath`

初始化

启动ZooKeeper集群
在这里插入图片描述
在各个节点启动journalnode

hadoop-daemon.sh start journalnode

在这里插入图片描述
在bigdata07中初始化namenode节点

hdfs namenode -format

在这里插入图片描述
在bigdata07执行NameNode的启动

hadoop-daemon.sh start namenode

在这里插入图片描述

在另外一个NameNode节点(bigdata08)上同步元数据信息 然后再启动NameNode
同步元数据

hdfs namenode -bootstrapStandby

在这里插入图片描述

启动NameNode(在bigdata08中)

hadoop-daemon.sh start namenode

在这里插入图片描述

在bigdata07上执行zk的初始化

hdfs zkfc -formatZK

在这里插入图片描述
配置zookeeper的操作用户为root
并将新配置同步到其他虚拟机上

export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root

在这里插入图片描述
启动dfs与yarn

start-dfs.sh

在这里插入图片描述

start-yarn.sh

在这里插入图片描述
在外部Windows中添加主机配置
在这里插入图片描述
根据配置查找对应的网页服务
在这里插入图片描述

标签:dfs,笔记,zk,yarn,第十七,实训,监听器,namenode,节点
From: https://blog.csdn.net/jungle_guy/article/details/140343589

相关文章

  • 新笔记本到手要怎么验机?怎么确定是全新机?
    原文地址(更多方法/更多科技互联网新闻):新买的笔记本电脑需要做什么?怎么确定是全新机?怎么确定笔记本电脑是全新机?确定笔记本电脑是否为全新机,可以通过以下几个步骤和细节来判断:外观检查(记得拍视频)1.确认包装盒无破损,封条完整,未被开封。2.检查笔记本表面是否有指纹、划......
  • zyx青岛实训day07 7/16 (yum仓库)
    一,复习高级指令find-name按名称搜索,支持通配符-typed|f-sizeKMG+3M,-3M,3Mddif=/dev/zeroof=文件路径bs=300Mcount=1-mtime+3-3touch文件名-m-d"最后修改时间"-execrm-rf{}\;find/-size+3M|xargsrm-rftreeyum-yinstalltree——将文......
  • 算法学习(算法笔记胡凡)
    目录考生排序递归问题数塔问题回文字符串棋盘覆盖问题盒分形自然数分解之最大积自然数分解之方案数01串STL练习迭代器的使用考生排序https://sunnywhy.com/sfbj/4/1/92结构体的使用,sort函数的使用递归问题数塔问题https://sunnywhy.com/sfbj/4/3/116动态规划问题dp例如给......
  • 工业互联网平台应用实训室解决方案
    引言随着工业4.0时代的到来和信息技术的高速发展,工业互联网已成为推动产业升级的重要力量。唯众作为领先的工业互联网解决方案提供商,推出了《工业互联网平台应用实训室解决方案》,旨在通过构建高度仿真的实训环境,帮助学生全面掌握工业互联网技术,为未来的职业生涯奠定坚实基......
  • 2024年技校大数据实验室建设及大数据实训平台整体解决方案
    随着信息技术的迅猛发展,大数据已成为推动产业升级和社会进步的重要力量。为适应市场需求,培养高素质的大数据技术人才,技校作为职业教育的重要阵地,亟需加强大数据实验室的建设与实训平台的打造。本方案旨在提出一套全面、可行的2024年技校大数据实验室建设及大数据实训平台整......
  • XR实时云渲染:助力虚拟仿真实训教学呈现
    近年来以5G、云计算、大数据、物联网、人工智能、虚拟现实/增强现实为代表的新兴技术迅速发展加速创新,日益融入经济社会发展各领域全过程,世界主要国家和地区纷纷加快数字化转型战略布局。虚拟仿真系统是一种能模拟现实世界或虚拟世界的计算机程序。在现实环境中,它模拟了各种行为......
  • 离散化笔记汇总
    火烧赤壁题目背景曹操平定北方以后,公元208年,率领大军南下,进攻刘表。他的人马还没有到荆州,刘表已经病死。他的儿子刘琮听到曹军声势浩大,吓破了胆,先派人求降了。孙权任命周瑜为都督,拨给他三万水军,叫他同刘备协力抵抗曹操。隆冬的十一月,天气突然回暖,刮起了东南风。没想到东吴......
  • STM32学习笔记
    DAY1一、嵌入式的概述国内定义:嵌入式就是以应用为中心,以计算机技术为基础,软硬件可裁剪,适用于对于体积、可靠性、功耗、性能等方面有严格要求的专用计算机系统,要求嵌入式开发人员对嵌入式知识体系有清晰的认知。更简单的说,处理桌面PC和服务器之外,所有的控制类设备都是嵌......
  • 阅读笔记《CCSP认证官方指南》第2版
    按需自助服务:允许客户自主扩展计算和存储,而不需要或很少需要提供商的介入或提前沟通。这项服务是实时生效的。入侵检测分析人员必须理解组织在做什么、为什么做、如何做以及在哪里做,以便更好地理解外部攻击的性质和强度,并相应地调整安全基线。云计算平台的标志性特性:弹性、简单......
  • 数据结构——李超线段树 学习笔记
    数据结构——李超线段树学习笔记维护直线考虑线段树维护区间最优线段。其中,最优线段指的是,在区间\([l,r]\)中,中点\(mid\)处最优的线段。我们称一个线段在单点更优/最优,显然,是指此处的函数值更大。我们下面称一个线段在区间内更优/最优,是指在中点处的比较。......