以下是一个使用Shell脚本实现上述步骤的示例:
#!/bin/bash
# 解压tar包
tar -xf your_tar_file.tar.gz
# 获取上周六到本周五的日期范围
start_date=$(date -d "last Saturday" "+%Y-%m-%d")
end_date=$(date -d "this Friday" "+%Y-%m-%d")
# 合并所有日期下的数据文件
merged_file="merged_data.txt"
for folder in your_tar_file/*/; do
folder_date=$(basename "$folder")
# 检查文件夹日期是否在指定范围内
if [[ "$folder_date" > "$start_date" && "$folder_date" < "$end_date" ]]; then
cat "$folder"/*.txt >> "$merged_file"
fi
done
# 读取OK文件中的个数
ok_file_count=$(grep -c "" your_tar_file/OK)
# 检查数据量是否正常
merged_file_count=$(grep -c "" "$merged_file")
if [ "$ok_file_count" -eq "$merged_file_count" ]; then
# 分流数据文件
for file in your_tar_file/*/*.txt; do
file_size=$(stat -c%s "$file")
# 判断文件大小
if [ "$file_size" -gt 10485760 ]; then
# 大于10M,上传到HDFS
hdfs dfs -put "$file" /path/on/hdfs/
else
# 小于等于10M,上传到HBase
hbase put your_hbase_table "$file" column_family:data "$file"
fi
done
else
echo "数据量异常!"
fi
请注意,上述示例假设您的tar包已经存在,并且其中的数据文件夹和OK文件都位于your_tar_file
目录下。您需要将your_tar_file.tar.gz
替换为您的tar包的实际路径,并根据实际情况修改文件路径、HDFS路径和HBase相关的命令。
在此示例中,我们使用日期范围条件筛选出符合要求的文件夹,并将它们下的数据文件合并到一个文件中。然后,我们读取OK文件中的行数(即文件个数),并检查合并后的数据文件中的行数是否与OK文件中的行数相同。如果相同,则对所有数据文件进行分流,大于10M的文件上传到HDFS,小于等于10M的文件上传到HBase。如果数据量异常,则输出相应提示。
请根据您的具体需求和环境进行适当调整。
希望对您有所帮助!如果您还有其他问题,请随时提问。