Hadoop【5】- HDFS的应用

案例:shell定时采集数据至HDFS

上线的网站每天都会产生日志数据, 假如有这样一个需求, 要求凌晨24点操作前一天产生的日志数据, 准时上传至HDFS集群中。

如何实现?实现后能否实现周期性上传数据?如何定时?

分析:

HDFS SHELL:

hadoop fs -put //上传文件

Linux crontab:

crontab -e 0 0 *** /shell/uploadFile2Hdfs.sh //每天凌晨12点执行一次

实现流程

一般日志文件生成的逻辑有业务系统决定, 比如每小时滚动一次, 或者一定大小滚动一次, 避免当个日志文件过大不方便操作。

比如滚动后的文件,命名为access.log.x,其中x为数字。 正在进行写的日志文件叫做access.log。这样的话, 如果日志文件后缀是 1/ 2 /3等数字, 则该文件满足需求可以上传, 就把该文件移动到准备上传的工作区间目录。工作区间目录有文件之后可以使用hadoop fs -put命令将文件上传。

shell代码

export JAVA_HOME=/root/java/jdk1.8.0_251
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:{JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/lib:$PATH

export HADOOP_HOME=/home/David_Wolfowitz/Hadoop/hadoop-3.2.1
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH

#日志文件存放的目录
log_src_dir=/root/logs/log/

#带上传文件存放的目录
log_toupload_dir=/root/logs/toupload/

#日志文件上传到hdfs的根目录
datel=`date -d last-day +%Y_%m_%d`
hdfs_root_dir=/data/clickLog/$datel/

#打印环境变量
echo "env: hadoop_home: $HADOOP_HOME"

# 读取日志文件的目录, 判断是否有需要上传的文件
echo "log_src_dir: $log_src_dir"
ls $log_src_dir | while read fileName
do 
	#echo "hello"
	if [[ "$fileName" == access.log.* ]]; then
		date=`date + %Y_%m_%d_%H_%M_%S`
		echo "moving $log_src_dir$fileName to $log_toupload_dir"xxxxx_click_log_$fileName"$date"
		mv $log_src_dir$fileName $log_toupload_dir"xxxxx_click_log_$fileName"$date
		echo $log_toupload_dir"xxxxx_click_log_$fileName"$date >> $log_toupload_dir"willDoing."$date
	fi
done


ls $log_toupload_dir | grep will | grep -v "_COPY_" | grep -v "_DONE_" | while read line
do 
	#echo 'hello'
	echo "toupload is in file:"$line
	mv $log_toupload_dir$line $log_toupload_dir$line"_COPY_"
	cat $log_toupload_dir$line"_COPY_" | while read line
	do
		echo "puting ... $line to hdfs path ...$hdfs_root_dir"
		hadoop fs -mkdir -p $hdfs_root_dir
		hadoop fs -put $line $hdfs_root_dir
	done
	mv $log_toupload_dir$line"_COPY_" $log_toupload_dir$line"_DONE_"
done

参考资料:

【1】 腾讯课堂-大数据hadoop入门

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值