大数据开发-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" = "" ]
thenyestoday=`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 {@Overridepublic String hello(String name) {System.out.println("我被调用了...");return "hello" + name;}/*** 获取接口版本号* @param s* @param l* @return* @throws IOException*/@Overridepublic long getProtocolVersion(String s, long l) throws IOException {return versionID;}@Overridepublic 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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数智驱动“坐商”变“行商”,安通控股迈向综合物流服务新高度

在全球经济增长放缓的大环境下&#xff0c;集装箱运输市场也面临供需双弱的新挑战。 国内内贸集装箱物流企业TOP3——安通控股股份有限公司&#xff08;以下简称“安通控股”&#xff09;激流勇进&#xff0c;积极推进营销理念从“业务操作型”向“客户营销型”转变、从传统的…

机器学习-启航

文章目录 原理分析机器学习的两种典型任务机器学习分类总结数据机器学习分类解读简单复杂 原理分析 马克思主义哲学-规律篇 规律客观存在&#xff0c;万事万物皆有规律。 机器学习则是多维角度拆解分析复杂事实数据&#xff0c;发现复杂事实背后的规律&#xff0c;然后将规律用…

C++小记 -链表

链表 文章目录 链表链表基础理论链表的类型单链表双链表循环链表 链表的存储方式链表的定义链表的操作添加节点删除节点 性能分析构建链表删除节点&#xff08;内存泄漏的坑&#xff09;1.直接移除2.使用虚拟头结点3.delete指针后&#xff0c;要将指针置为NULL&#xff01;&…

STM32第九课:ADC单通道模数转换

一、ADC简介 ADC是Analog-to-DigitalConverter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 STM32f103 系列有3个ADC&#xff0c;精度为12位&#xf…

Linux中线程的实现,线程的接口相关函数pthread_create、pthread_join、pthread_exit

目录 一.线程的概念 二.操作系统中线程的实现 三.Linux中线程的实现 四.进程与线程的区别 五.线程的接口相关函数 5.1 pthread_create 5.2 pthread_join 5.3 pthread_exit 六.代码演示 七.如何解决上述问题&#xff1f; 方案1. 方案2. 方案3. 一.线程的概念 进程是…

使用 Docker 部署 Stirling-PDF 多功能 PDF 工具

1&#xff09;Stirling-PDF 介绍 大家应该都有过这样的经历&#xff0c;面对一堆 PDF 文档&#xff0c;或者需要合并几个 PDF&#xff0c;或者需要将一份 PDF 文件拆分&#xff0c;又或者需要调整 PDF 中的页面顺序&#xff0c;找到的线上工具 要么广告满天飞&#xff0c;要么 …

小程序API能力集成指南——画布API汇总(四)

CanvasContext canvas 组件的绘图上下文。 方法如下&#xff08;3&#xff09;&#xff1a; scale CanvasContext.scale CanvasContext.scale(number scaleWidth, number scaleHeight) 功能描述 在调用后&#xff0c;之后创建的路径其横纵坐标会被缩放。多次调用倍数会相…

Flutter性能优化

性能分析工具 &#xff08;1&#xff09;performance overlay 开启performance overlay后&#xff0c;Flutter APP上将显示一个展示一个浮层&#xff0c;浮层中会实时展示当前的UI线程及Raster线程的运行情况。如果都是蓝色竖条&#xff0c;说明界面运行流畅&#xff0c;否则则…

【CSP考点回顾】前缀和数组

一、一维数组前缀和 前缀和算法是一种用于处理数组的技术&#xff0c;它可以快速计算任何连续子数组的和。适合在多次查询中需要求解多个范围和的情况。使用前缀和算法可以将每次求和的时间复杂度从 O(n) 降低到 O(1)。 前缀和的思想是创建一个新数组 A r r Arr Arr&#xff0…

递增三元组(第九届蓝桥杯)

文章目录 题目原题链接思路分析二分做法1二分做法2双指针做法前缀和解法 题目 原题链接 递增三元组 思路分析 由时间复杂度可知需要至少优化到 O ( n l o g n ) O(nlogn) O(nlogn)才行 而纯暴力枚举三个数组的话&#xff1a; O ( n 3 ) O(n^3) O(n3) 可以考虑将b[]作为标志&…

RabbitMQ 交换器

RabbitMQ 交换器 官方例子 http://www.rabbitmq.com/getstarted.html direct 如上图所示&#xff0c;两个队列绑定到了direct交换器上&#xff0c;第一个队列绑定的 binding key 为 orange &#xff0c;第二个队列有两个绑定&#xff0c;分别是 black 和 green 。 如上图所示…

基础小白快速入门web前端开发技术------>web概述

Web概述 我们在编程的学习中&#xff0c;随着学习的深入&#xff0c;我们会理解到WEB这个东西&#xff0c;那么 web究竟是个啥&#xff0c;到底该咋用&#xff1f; web&#xff0c;是网站的英文意思&#xff0c;又被称作“下一代Web3.0&#xff0c;互联网”&#xff0c;是在We…

vue在线查看pdf文件

1.引入组件 npm install --save vue-pdf2、pdf组件页面模板 <template><div class"scrollBox" ><el-dialog :visible.sync"open" :top"1" width"50%" append-to-body><div slot"title"><el…

混沌工程-经典案例分享

目录 前言 案例 1、强弱依赖不合理 2、预案不生效 3、异常数据不兼容 4、监控体系缺陷 5、系统缺整体架构设计 总结 前言 我们公司从启动混沌工程到现在已经几乎覆盖了线上的所有核心业务&#xff0c;先后进行过2000次演练共挖掘出120个漏洞。这些漏洞有些得了及时修复…

DevEco Studio编译时候自动生成js、js.map文件导致项目无法运行

这算是开发工具的bug吧&#xff0c;估计后期能修复。 解决办法&#xff0c;手动删除.js、.js.map文件即可&#xff1b; 文件太多&#xff0c;删除很麻烦&#xff0c;有个大佬写了个插件&#xff0c;可一键删除&#xff1a;ArkCompilerSupport DevEco Studio 运行项目有时会自动…

二叉树进阶leetcode

606. 根据二叉树创建字符串 要点&#xff1a;前序遍历&#xff0c;当左子树为空时&#xff0c;右结点有数字时要给左边加括号 class Solution { public:string tree2str(TreeNode* root) {string s;//创建一个字符串if(rootnullptr){return s;}sto_string(root->val);//保存…

网络、网络协议模型、UDP编程——计算机网络——day01

今天来到了网络编程&#xff0c;主要讲了网络、网络协议模型以及UDP编程 网络 网络主要是进行&#xff1a;数据传输和数据共享 网络协议模型 OSI协议模型应用层 实际发送的数据表示层 发送的数据是否加密会话层 是否建立会话连接传…

调研图基础模型(Graph Foundation Models)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 图基础模型&#xff08;Graph Foundation Models&#xff0c;简称 GFMs&#xff09; 是一种经过预训练的图大模型&#xff0c;旨在处理不同领域的图数据和任务。让我们详细探讨一下这个概念。 Github …

uniapp让输入框保持聚焦状态,不会失去焦点

使用场景&#xff1a;当输入框还有发送按钮的时候&#xff0c;点击发送希望软键盘不消失&#xff0c;还可以继续输入&#xff0c;或者避免因输入图片标签造成的屏闪问题 多次尝试后发现一个很实用的方法&#xff0c;适用input输入框和editor输入框 解决办法&#xff1a;把cli…

AXI4总线解析

一、读地址 AWVALID和AWREADY同时为高时&#xff0c;在这个上升沿&#xff0c;图中黄线&#xff0c;将接下来的数据写入地址40000000中。 在