清理hdfs数据脚本

清理脚本

#!/bin/bash

# 设置要清理的基础目录和保留天数
BASE_DIR="/apps/hbase/data/data"
DAYS_TO_KEEP=90
LOG_FILE="/var/log/hbase_datepart_cleanup.log"
# 根据实际情况修改
TEST="test"


# 获取当前时间戳减去90天的时间戳,并转换为日期格式
CUTOFF_DATE=$(date -d "-$DAYS_TO_KEEP days" +%Y%m%d)

# 查找并删除超过90天的符合条件的目录
hdfs dfs -ls -R $BASE_DIR | grep '^d' | while read -r line; do
    DIR_NAME=$(echo "$line" | awk '{print $8}')

    # 检查目录名是否符合模式 ${TEST}_[任意字符]_hd/日期
    if [[ "$DIR_NAME" =~ ^$BASE_DIR/${TEST}_[a-zA-Z0-9]+_hd/[0-9]{8}$ ]]; then
        DIR_DATE=$(basename "$DIR_NAME")

        # 如果目录日期小于截止日期,则删除该目录
        if [ "$DIR_DATE" -lt "$CUTOFF_DATE" ]; then
            echo "Deleting directory: $DIR_NAME" | tee -a $LOG_FILE
            sudo -u hbase hdfs dfs -rm -r -skipTrash "$DIR_NAME"
        else
            echo "Skipping recent directory: $DIR_NAME" | tee -a $LOG_FILE
        fi
    fi
done

sudo -u hdfs hdfs balancer
为了编写一个HDFSHadoop Distributed File System)数据清理脚本,你需要使用HDFS客户端库以及华为云 OBS (Object Storage Service) 的 Python SDK。以下是一个基础的步骤概述: 1. **安装必要的库**: - `hadoop` 或 `hdfs3` 库用于与 HDFS 交互。 - `huaweicloud-sdk-obs` 库用于与 OBS 进行操作。 ```python pip install hdfs3 pip install huaweicloud-sdk-obs ``` 2. **设置环境变量**: - 如果使用的是 HDFS,确保 `JAVA_HOME` 和 `HADOOP_HOME` 已设置。 - 对于华为云 OBS,可能需要创建访问密钥并将其存储为环境变量或配置文件。 3. **连接到HDFS**: 使用 `hdfs3`,你可以创建一个连接到 HDFS 的客户端。 ```python from hdfs3 import HDFileSystem hdfs = HDFileSystem(host='your_hdfs_host', port=webhdfs_port, user='your_username') ``` 4. **获取目录内容**: 获取指定路径下的文件列表,包括它们的修改时间。 ```python dir_path = '/path/to/your/data' files = hdfs.ls(dir_path) file_list = {f: hdfs.get_file_info(f)['modification_time'] for f in files} ``` 5. **过滤旧文件**: 根据日期选择90天前的文件。 ```python import datetime old_files = [f for f, mod_time in file_list.items() if (datetime.datetime.now() - mod_time).days >= 90] ``` 6. **上传文件到OBS**: 使用 `huaweicloud-sdk-obs` 将文件上传到 OBS 桶。 ```python from huaweicloudsdkobs.v5.obs_client import ObsClient from huaweicloudsdkobs.v5.model import UploadFileRequest obs_client = ObsClient( endpoint="your_observatory_endpoint", access_key_id="your_access_key_id", secret_access_key="your_secret_access_key", ) bucket_name = 'your_bucket_name' for old_file in old_files: with open(hdfs.path(old_file), "rb") as data: req = UploadFileRequest(bucket_name=bucket_name, object_name=old_file, content=data.read()) obs_client.upload_file(req) ``` 7. **删除HDFS中的旧文件**: 删除已上传到 OBS 的文件。 ```python for old_file in old_files: hdfs.remove(old_file) ``` 8. **处理异常**: 考虑到可能出现的网络错误、权限问题等,确保适当添加异常处理代码。 9. **执行周期性任务**: 可能还需要安排这个脚本作为一个定期任务运行,例如通过 cronjob 或者其他调度工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值