【Hadoop】HDFS+Shell实践(定时上传数据至HDFS)
- 创业
- 2025-08-20 12:27:01

这篇博客是一个结合HDFS的Shell练习,相对简单。现有需求:每天1:00需要从系统上传一份昨天的日志文件到HDFS,日志文件的格式为access_2023_01_01.log,HDFS目录格式为20230101。这个需求是相对简单的,分为以下几个步骤:
获取昨天的日期 获取日期使用date命令,因为要获取昨天的日期,因此添加参数--date="1 day ago";为格式化日期格式,因此添加参数+"%Y_%m_%d"。完整命令为:date --date="1 day ago" +"%Y_%m_%d"在HDFS上面使用昨天的日期创建目录 hdfs dfs -mkdir -p ${hdfsPath},其中hdfsPath代表格式化的HDFS目录地址。将昨天的日志文件上传到刚创建的HDFS目录中 hdfs dfs -put ${logPath} ${hdfsPath},其中logPath代表日志文件的地址。要考虑到补数据的情况 yesterday=$1这行代码意味着可以直接在shell命令行中执行sh test.sh 2023_01_01类似的命令,去补2023年1月1日的日志文件。配置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【Hadoop】HDFS+Shell实践(定时上传数据至HDFS)由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【Hadoop】HDFS+Shell实践(定时上传数据至HDFS)”