大数据开发-Hadoop之HDFS高级应用

文章目录

    • HDFS回收站
    • HDFS的安全模式
    • 定时上传数据至HDFS
    • HDFS的高可用和高扩展
    • HDFS写数据过程源码剖析

HDFS回收站

  • HDFS会为每个用户创建一个回收站目录:/user/用户名/.Trash/
  • 回收站中的数据都会有一个默认的保存周期,过期未恢复则会被HDFS自动彻底删除
  • 默认情况下HDFS回收站功能是不开启的,需要修改core-site.xml中的fs.trash.interval属性
# 停止所有服务
[root@hadoop01 hadoop-3.2.0]# sbin/stop-all.sh
Stopping namenodes on [hadoop01]
Last login: Tue Mar  5 14:00:05 CST 2024 on pts/0
Stopping datanodes
Stopping secondary namenodes [hadoop01]
Last login: Tue Mar  5 16:07:06 CST 2024 on pts/0
Stopping nodemanagers
Last login: Tue Mar  5 16:07:10 CST 2024 on pts/0
Stopping resourcemanager
Last login: Tue Mar  5 16:07:14 CST 2024 on pts/0
You have new mail in /var/spool/mail/root
[root@hadoop01 hadoop-3.2.0]# jps
8875 Jps


# 修改core-site.xml
[root@hadoop01 hadoop-3.2.0]# vim etc/hadoop/core-site.xml 

        <property>
            <name>fs.trash.interval</name>
            <!--单位分钟-->
            <value>1440</value>
      </property>


# 同步到其它两台从节点
[root@hadoop01 hadoop-3.2.0]# scp -rq etc/hadoop/core-site.xml hadoop03:/home/soft/hadoop-3.2.0/etc/hadoop/ 
[root@hadoop01 hadoop-3.2.0]# [root@hadoop01 hadoop-3.2.0]# scp -rq etc/hadoop/core-site.xml hadoop02:/home/soft/hadoop-3.2.0/etc/hadoop/ 

# 重启
[root@hadoop01 hadoop-3.2.0]# sbin/start-all.sh
Starting namenodes on [hadoop01]
Last login: Tue Mar  5 16:07:17 CST 2024 on pts/0
Starting datanodes
Last login: Tue Mar  5 16:14:28 CST 2024 on pts/0
Starting secondary namenodes [hadoop01]
Last login: Tue Mar  5 16:14:31 CST 2024 on pts/0
Starting resourcemanager
Last login: Tue Mar  5 16:14:36 CST 2024 on pts/0
Starting nodemanagers
Last login: Tue Mar  5 16:14:43 CST 2024 on pts/0
# 查看进程
[root@hadoop01 hadoop-3.2.0]# jps
9393 SecondaryNameNode
9636 ResourceManager
9958 Jps
9128 NameNode
You have new mail in /var/spool/mail/root
# 查看文件
[root@hadoop01 hadoop-3.2.0]# hdfs dfs -ls /
Found 3 items
-rw-r--r--   2 root    supergroup      22125 2024-03-05 12:59 /NOTICE.txt
-rw-r--r--   2 root    supergroup       1361 2024-03-05 13:00 /README.txt
-rw-r--r--   3 1111612 supergroup       7877 2024-03-05 14:01 /test.md
# 删除文件  提示信息:将README文件移动到了root/.Trash/Current/
[root@hadoop01 hadoop-3.2.0]# hdfs dfs -rm /README.txt
2024-03-05 16:15:44,889 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop01:9000/README.txt' to trash at: hdfs://hadoop01:9000/user/root/.Trash/Current/README.txt


# 如果文件过大超出回收站的容量,可以用下面的命令解决,跳过回收站直接永久性删除
[root@hadoop01 hadoop-3.2.0]# hdfs dfs -rm -skipTrash /test.md
Deleted /test.md

HDFS的安全模式

  • 集群在刚启动的时候HDFS进入安全模式,此时无法执行写操作
  • 查看安全模式:hdfs dfsadmin -safemode get
  • 离开安全模式:hdfs dfsadmin -safemode leave
查看安全模式
[root@hadoop01 hadoop-3.2.0]# hdfs dfsadmin -safemode get
Safe mode is OFF


定时上传数据至HDFS

  1. 获取日志文件的名称
  2. 在HDFS上面使用日期创建目录
  3. 将日志文件上传到创建的HDFS目录中
  4. 考虑脚本重跑补数据的情况
  5. 配置crontab任务

上传脚本

#!/bin/bash
# 获取昨天的日期
yestoday=$1
if [ "$yestoday" = "" ]
then
	yestoday=`date +%Y_%m_%d --date="1 days ago"`
fi
# 拼接日志文件路径信息
logPath=/home/log/access_${yestoday}.log
hdfsPath=/log/${yestoday//_/}
#在HDFS上面创建目录
hdfs dfs -mkdir -p ${hdfsPath}
#数据上传
hdfs dfs -put ${logPath} ${hdfsPath}

执行脚本

# 执行脚本跑昨天的数据
[root@hadoop01 shell]# sh -x uploadLogData.sh 
+ yestoday=
+ '[' '' = '' ']'
++ date +%Y_%m_%d '--date=1 days ago'
+ yestoday=2024_03_05
+ logPath=/home/log/access_2024_03_05.log
+ hdfsPath=/log/20240305
+ hdfs dfs -mkdir -p /log/20240305
+ hdfs dfs -put /home/log/access_2024_03_05.log /log/20240305


# 执行脚本跑指定日期的数据
[root@hadoop01 shell]# sh -x uploadLogData.sh 2024_01_05
+ yestoday=2024_01_05
+ '[' 2024_01_05 = '' ']'
+ logPath=/home/log/access_2024_01_05.log
+ hdfsPath=/log/20240105
+ hdfs dfs -mkdir -p /log/20240105
+ hdfs dfs -put /home/log/access_2024_01_05.log /log/20240105

查看
[root@hadoop01 shell]# hdfs dfs -ls /log/20240305
Found 1 items
-rw-r--r--   2 root supergroup         21 2024-03-06 09:40 /log/20240305/access_2024_03_05.log

[root@hadoop01 shell]# hdfs dfs -ls /log/20240105
Found 1 items
-rw-r--r--   2 root supergroup         21 2024-03-06 09:45 /log/20240105/access_2024_01_05.log

配置crontab任务

# 定时上传数据 上传日志放在uploadData.log里面
[root@hadoop01 shell]# vim /etc/crontab 
0 1 * * * root sh /home/shell/uploadLogData.sh >> /home/shell/uploadData.log

HDFS的高可用和高扩展

针对我们目前这个一主两从的集群,前面做过分析

  • 高可用(HA):NameNode主要负责接收用户的操作请求,所有的读写请求都会经过它,存在单点故障,对于这个情况而言需要部署多节点NameNode,但是只有一个NameNode是Active状态,其它的是StandBy状态;ActiveNameNode负责所有的客户端操作,StandByNameNode用来同步Ann的状态消息,以提供快速故障恢复能力;启动HA的时候不能启动SecondaryNameNode。

u=3934329141,3215606283&fm=253&fmt=auto&app=138&f=JPEG

  • 高扩展:HDFS适合存储大文件,原因在于NameNode存储的文件的索引(元数据信息),文件实际存储在DataNode上,所以不管是大文件还是小文件,在NameNode上所在的索引内存是一定的;如果NameNode内存不够用,官方提供了Federation机制

u=1944919687,3843119085&fm=253&fmt=auto&app=138&f=JPG

HDFS写数据过程源码剖析

RPC原理分析

  • 一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议
  • 采用client/server模式,请求程序就是一个client,服务提供的程序就是一个server
  • Hadoop的整个体系结构就是构建在RPC之上的,客户端和NameNode通信、DataNode和NameNode之间的通信都是通过RPC协议来实现

这个调用过程是跨主机,跨进程的

RPC接口分析

  • ClientProtocol:HDFS客户端(FileSystem)与NameNode通信的接口
  • DatanodeProtocal:DataNode和NameNode通信的接口,通过心跳机制,DataNode定时上报自己当前节点的状态信息
  • NamenodeProtocol:SecondaryNameNode与NameNode通信的接口,负责合并事务日志信息

案例分析

# server   
public static void main(String[] args) throws IOException {
        Configuration conf = new Configuration();
        // 创建RPC server构建器
        RPC.Builder builder = new RPC.Builder(conf);
        builder.setBindAddress("127.0.0.1")
                .setPort(8099)
                .setProtocol(MyProtocol.class)
                .setInstance(new MyProtocolImpl());


        RPC.Server server = builder.build();
        server.start();
        System.out.println("server started");
    }
# client    
public static void main(String[] args) throws IOException {
        InetSocketAddress addr = new InetSocketAddress("127.0.0.1", 8099);
        Configuration con = new Configuration();
        // 获取RPC代理
        MyProtocol proxy = RPC.getProxy(MyProtocol.class, MyProtocol.versionID, addr, con);
        String result = proxy.hello("this is my client");
        System.out.println("client result:" + result);
    }
/**
 * 自定义RPC接口
 */
public interface MyProtocol extends VersionedProtocol {

    long versionID = 123456;

    String hello(String name);


}
public class MyProtocolImpl implements MyProtocol {
    @Override
    public String hello(String name) {
        System.out.println("我被调用了...");
        return "hello" + name;
    }

    /**
     * 获取接口版本号
     * @param s
     * @param l
     * @return
     * @throws IOException
     */
    @Override
    public long getProtocolVersion(String s, long l) throws IOException {
        return versionID;
    }

    @Override
    public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {
        return new ProtocolSignature();
    }
}

image-20240306133230512

IOException {
return versionID;
}

@Override
public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException {
    return new ProtocolSignature();
}

}



![image-20240306133230512](https://img-blog.csdnimg.cn/img_convert/4dea2d4c8a5b114d260eb999bd17c7fe.png)





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/433171.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用友-UFIDA-NC saveDoc.ajax 存在任意文件上传漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

【投稿优惠|优质会议】【主题广范|见刊快】2024年艺术设计与公共管理国际学术会议(ICADPM 2024)

【投稿优惠|优质会议】【主题广范|见刊快】2024年艺术设计与公共管理国际学术会议(ICADPM 2024) 2024 International Conference Art and Design and Public Management 一、【会议简介】 会议主题为“艺术设计与公共管理的融合与创新”&#xff0c;将涵盖多个子主题&#xff…

罐区自动防爆气象站的功能优势

TH-FBCQX1(FB01)罐区自动防爆气象站在现代工业安全中扮演着至关重要的角色。其独特的设计和强大的功能确保了罐区在易燃易爆环境中的安全&#xff0c;同时提供了精准的气象数据&#xff0c;为企业提供了有力的决策支持。以下是罐区自动防爆气象站的主要功能优势&#xff1a; 防…

2024年Java社招面试题,字节跳动算法工程师面试总

前言 Spring让我们可以更快&#xff0c;更轻松&#xff0c;更安全地进行Java编程。Spring对速度&#xff0c;简单性和生产率的关注使其成为世界上最受欢迎的Java框架。 像阿里巴巴&#xff0c;亚马逊&#xff0c;谷歌&#xff0c;微软等在内的所有科技巨头对Spring都有很大的…

ubuntu_定制文件系统[2]-清理日志log

1.问题现象 系统长时间运行, 产生大量的系统日志 ubuntu/debian 系统日志如下 /var/log$ du -sh * 31M syslog # syslog日志 61M syslog.1 2.5G journal/ # systemd service日志 当日志文件过大, 硬盘空间占用100%时, 导致各种异常 命令按tab补全无响应服务/进程启动异常服务…

一文搞懂所有常见数据结构

一&#xff0c;概念 计算机只能处理0和1&#xff0c;计算机能把0和1转换成电路中的信号来计算&#xff0c;这个就是计算机的本质。 bit 比特 bit就是计算对数据存储的最小单元&#xff0c;只有两个值0和1&#xff0c;简写为b。 - byte 字节 8个bit1个byte字节&#xff08;8位一…

「经验」在博途中 是否可以在 LAD与STL 语言之间进行切换

用惯了STEP7&#xff0c;准确来说是SIMATIC Manager进行编程开发的同学&#xff0c;在转战TIA portal后&#xff0c;通常会经历一段“晦涩”的过度期&#xff0c;包括指令库的微小变动、工作界面的大改等等。 又比如&#xff1a;“在博途中&#xff0c;怎么快速切换LAD与STL语…

小白跟做江科大51单片机之AT24C02数据存储

1.导入Delay、key、LCD1602相关文件 2.控制逻辑 以I2C去写入&#xff0c;用AT24C02包装好&#xff0c;main调用即可 3.编写I2C代码 看着这六个状态编 图1 开和关 图2 发送一个字节 图3 接收一个字节 图4 接收和发送应答 #include <REGX52.H> sbit I2C_SCL P2^1; sbi…

纹波和噪声有啥区别?看完不会你打我!

大家好&#xff0c;我是砖一。 今天给大家分享一下电源纹波和电源噪声都是在电源输出中出现的信号波动&#xff0c;但两者存在明显的区别。 一&#xff0c;纹波 电源纹波是指电源输出时&#xff0c;叠加在稳定的直流电源上的交流成分。这种波动主要是由于电源自身的开关、PW…

羊大师揭秘羊奶的魔力,滋养与美容的双重奇迹

羊大师揭秘羊奶的魔力&#xff0c;滋养与美容的双重奇迹 羊奶在滋养与美容方面确实有着双重奇迹般的效果。首先&#xff0c;从滋养的角度来看&#xff0c;羊奶富含优质蛋白质、矿物质和维生素&#xff0c;这些营养物质对于维持人体正常生理功能、促进生长发育和增强免疫力都至…

UR机器人装箱姿态

1.官网手册上并没有给出该打包位姿 2.一般厂家发回来的机器人都会有这个打包程序 可以运行这个程序&#xff0c;如果有的话。 3.打包点位 如果没有这个这个&#xff0c;也可以直接按下面点位来&#xff0c;都是差不多的点位&#xff0c;可以放到包装箱中的 这个是UR10的 这个…

什么是企业数字化转型?传统企业开始走下坡路必看篇!

今天的话题有点变化&#xff0c;但这个内容确实会让很多人不爽&#xff01; 但耐心看下去还是有一定收获&#xff0c;为什么今天会说到传统企业&#xff1f; 我做内容营销也有很多年了&#xff0c;今天就说说自己遇到的很多企业都会面临的一些问题&#xff0c;以及该如何应对&…

【学习笔记】计算机视觉深度学习网络模型

这是本人学习计算机视觉CV领域深度学习模型的学习的一点点学习笔记&#xff0c;很多片子没有完成&#xff0c;可以作为学习的参考~

鸿蒙next标签栏无法自动更新,解决懒加载问题

1.问题描述&#xff1a; 在开发鸿蒙时&#xff0c;我们会遇到这样一个局面&#xff0c;在Entry组件修饰下的根组件跳转至其他Component修饰的组件时只能在组件初始的时候加载一次&#xff0c;其余情况默认原先的加载状况以至于用户无法实时获取正确的信息。 2.问题过程 2.1 …

bind方法

bind 方法与 call 和 apply 不同&#xff0c;它不会立即执行函数&#xff0c;而是返回一个新的函数&#xff0c;并将指定的对象作为新函数中的 this 值。bind 方法在实际使用中常用于创建一个指定上下文的函数&#xff0c;以便稍后调用。 // bind方法 const bookEW book.bind…

(C语言)深入理解指针1基础

指针是C语言中的一个难点&#xff0c;但如果真正理解了指针&#xff0c;其实没有很难&#xff0c;本篇文章介绍了指针的基础知识&#xff0c;后面还会继续更行指针的内容。感谢支持。 目录 1. 内存和地址 1.1 内存 1.2 究竟该如何理解编址 2. 指针变量和地址 2.1 取地址操…

智能指纹密码储物柜的设计

目 录 摘 要 II Abstract III 引 言 1 1 总体方案设计 3 1.1 设计要求 3 1.2 方案比较与论证 3 2 硬件介绍和设计 5 2.1 单片机及最小系统 5 2.2 液晶显示模块 6 2.3 按键控制部分电路 7 2.4 指纹模块 8 2.5 继电器模块 9 3 系统软件设计 10 3.1 系统程序工作分析 10 3.2 主程…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+OSD动态字符叠加,提供1套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI接收图像缩放应用本方案的SDI接收纯verilog图像缩放纯verilog多路视频拼接应用本方案的SDI接收HLS图像缩放HLS多路视频拼接应用本方案的SDI接收HLS多路视频融合叠加应用…

maven archetype 项目原型

拓展阅读 maven 包管理平台-01-maven 入门介绍 Maven、Gradle、Ant、Ivy、Bazel 和 SBT 的详细对比表格 maven 包管理平台-02-windows 安装配置 mac 安装配置 maven 包管理平台-03-maven project maven 项目的创建入门 maven 包管理平台-04-maven archetype 项目原型 ma…

c++ primer学习笔记(二)

目录 第三章 一、命名空间的using声明 二、标准库的string类型 1、string对象的定义和初始化 2、string对象的读写 3、string对象的操作 4、string对象中字符的处理 三、标准库的vector类型 1、vector对象的定义和初始化 2、vector对象的操作 四、迭代器简介 1、简…