当前位置: 首页 > news >正文

【Hadoop】HDFS+Shell实践(定时上传数据至HDFS)

       这篇博客是一个结合HDFS的Shell练习,相对简单。现有需求:每天1:00需要从系统上传一份昨天的日志文件到HDFS,日志文件的格式为access_2023_01_01.log,HDFS目录格式为20230101。这个需求是相对简单的,分为以下几个步骤:

  1. 获取昨天的日期
           获取日期使用date命令,因为要获取昨天的日期,因此添加参数--date="1 day ago";为格式化日期格式,因此添加参数+"%Y_%m_%d"。完整命令为:date --date="1 day ago" +"%Y_%m_%d"
  2. 在HDFS上面使用昨天的日期创建目录
           hdfs dfs -mkdir -p ${hdfsPath},其中hdfsPath代表格式化的HDFS目录地址。
  3. 将昨天的日志文件上传到刚创建的HDFS目录中
           hdfs dfs -put ${logPath} ${hdfsPath},其中logPath代表日志文件的地址。
  4. 要考虑到补数据的情况
           yesterday=$1这行代码意味着可以直接在shell命令行中执行sh test.sh 2023_01_01类似的命令,去补2023年1月1日的日志文件。
  5. 配置crontab任务
           crontab -l命令显示当前的定时任务,crontab -e命令配置定时任务。按照需求要在每天1:00定时执行该任务,因此配置为:0 1 * * * sh /test.sh,具体配置规则见【linux】shell基本语法。

完整代码如下:

       在shell脚本中向yesterday变量赋值时使用反引号(``),因为需要解析反引号中的字符命令并执行得出结果。. /etc/profile这行命令是为了加载环境变量,因为直接使用了hdfs命令,正常情况下应该是bin/hdfs

#!bin/bash
# 加载环境变量
. /etc/profile
# 获取日期
yesterday=$1
if [ "$yesterday"="" ]
then
	yesterday=`date --date="1 day ago" +"%Y_%m_%d"`
fi
logPath=/data/log/access_${yesterday}.log
hdfsPath=/log/${yesterday//_/}
hdfs dfs -mkdir -p ${hdfsPath}
hdfs dfs -put ${logPath} ${hdfsPath}

执行结果:/log/20230123/access_2023_01_23.log文件即为上传的日志文件。

[root@bigData01 log]# hdfs dfs -ls -R /
drwxr-xr-x   - root supergroup          0 2023-01-24 20:20 /log
drwxr-xr-x   - root supergroup          0 2023-01-24 20:33 /log/20230123
-rw-r--r--   1 root supergroup         11 2023-01-24 20:33 /log/20230123/access_2023_01_23.log
-rw-r--r--   1 root supergroup       1361 2023-01-24 11:03 /readme.txt
drwxr-xr-x   - root supergroup          0 2023-01-18 10:52 /test
drwx------   - root supergroup          0 2023-01-24 11:03 /user
drwx------   - root supergroup          0 2023-01-24 11:03 /user/root
drwx------   - root supergroup          0 2023-01-24 11:03 /user/root/.Trash
drwx------   - root supergroup          0 2023-01-24 20:24 /user/root/.Trash/Current
drwx------   - root supergroup          0 2023-01-24 20:24 /user/root/.Trash/Current/log
drwx------   - root supergroup          0 2023-01-24 20:24 /user/root/.Trash/Current/log/20230123
-rw-r--r--   1 root supergroup         11 2023-01-24 20:21 /user/root/.Trash/Current/log/20230123/access_2023_01_23.log
-rw-r--r--   1 root supergroup       1361 2023-01-24 11:19 /user/root/.Trash/Current/readme.txt1674531666745
-rw-r--r--   3 123  supergroup         13 2023-01-18 23:10 /win11.txt

相关文章:

  • 约数个数及约数之和知识点(含公式)
  • 仿牛客论坛项目
  • Linux——进程间通信
  • 《深入浅出计算机组成原理》学习笔记 Day9
  • 2023年新年烟花代码(背景音乐完整版)
  • STM32编写OLED显示屏驱动
  • 【操作系统】—— Windows常用快捷键(带你快速了解)
  • 【数据结构之二叉树系列】二叉树的基本知识
  • 04 |「链表」简析
  • Spring笔记上(基于XML配置)
  • 十六进制转八进制+超大数据处理(蓝桥杯基础练习C/C++)
  • 线性代数[向量]
  • 请求体类型全解
  • Linux嵌入式开发——文件系统结构
  • 【操作系统】——主流的操作系统(带你快速了解)
  • ffmpeg 批处理截取片头片尾
  • 3.3 Dodgson算法
  • 第七层:多态
  • TCP为什么是三次握手和四次挥手以及可能出现的问题
  • 软件工程 黄金点游戏
  • https://app.hackthebox.com/machines/Inject
  • Spring —— Spring简单的读取和存储对象 Ⅱ
  • 渗透测试之冰蝎实战
  • Mybatis、TKMybatis对比
  • Microsoft Office 2019(2022年10月批量许可版)图文教程
  • 《谷粒商城基础篇》分布式基础环境搭建
  • 哈希表题目:砖墙
  • Vue 3.0 选项 生命周期钩子
  • 【车载嵌入式开发】AutoSar架构入门介绍篇
  • 【计算机视觉 | 目标检测】DETR风格的目标检测框架解读