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

news/2024/11/27 19:07:43/

       这篇博客是一个结合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"="" ]
thenyesterday=`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

http://www.ppmy.cn/news/19328.html

相关文章

Issues with peer dependencies found

问题背景: 今天安装一些依赖,报了这个错误 Issues with peer dependencies found 那么这个错误是什么意思呢? WARN  Issues with peer dependencies found . └─┬ typescript-eslint/eslint-plugin ├── ✕ missing peer typescrip…

十二、创建和管理表

文章目录一、基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 数据类型及数据库操作二、创建表三、查看表结构3.1 使用 SHOW COLUMNS 语句查看3.2 使用 DESCRIBE 语句查看3.3 查看表详细结构语句 SHOW CREATE TABLE四、修改表结构4.1 添加新字段和修改字段定义4.2 修改字…

基于Andriod的智慧校园卡系统的设计与实现

目录 1.课题研究立项依据 2.文献综述 3.课题研究的基本内容及预期目标或成果 4.课题的研究方案 5.研究进度安排 6.主要参考文献 1.课题研究立项依据 随着信息技术的不断发展,数字化、智能化校园的提出与教育现代化建设的不断推进,智能卡技术的不断发展进步,国内各高校都在…

【蓝桥云课】进制

对于任意数制RRR的数nnn,都可以表达为n∑i0kaiRia0R0a1R1a2R2...akRkn\sum_{i0}^{k}a_{i}R^{i} a_{0}R^{0}a_{1}R^{1}a_{2}R^{2}...a_{k}R^{k}ni0∑k​ai​Ria0​R0a1​R1a2​R2...ak​Rk 一、十进制转RRR进制 方法:十进制数除RRR取余,余数…

二叉树专题汇总

二叉树的前中后序遍历day11|144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历_奈川直子的博客-CSDN博客 二叉树的层序遍历 翻转二叉树 对称二叉树 day12|层序遍历合集、226.翻转二叉树、101.对称二叉树_奈川直子的博客-CSDN博客 N叉树最大深度 完全二叉树节点…

spring Xml方式实现DI

spring中的Bean的管理: Bean(汉译咖啡豆). 又称JAVABean.其实就是JAVA程序程序中的一个个对象,所以Bean的管理其实就是spring对于JAVA程序中的对象的管理 管理的内容是什么 1 .对象的创建 IOC IOC 叫做控制反转,就是Spring给我们创建对象,然后我们直接用,不用自己NEW,前面已经…

9.Java数组知识大全

文章目录前言一、数组介绍二、数组的定义域静态初始化三、数组元素访问数组地址中的小拓展:四、数组遍历1.获取数组里面的元素2.把数据存储到数组中3.遍历数组的最快方式4.遍历数组并求和5.统计个数6.变化数据五、数组动态初始化1.数组默认初始化值的规律2.数组动态初始化和静态…

零基础学JavaWeb开发(二十三)之 springmvc入门到精通(3)

5、springspringmvcmybatis整合 5.1、项目技术需求分析 1.使用ssmlayui技术开发 对用户表数据实现增删改查 采用前后端分离架构模式 5.2、SSM环境的整合之提供增删改查 整合数据库表结构 CREATE TABLE mayikt_users (id int NOT NULL AUTO_INCREMENT,name varchar(255) CH…