清理hdfs小文件shell脚本

清理hdfs小文件shell脚本

#!/bin/bash
echo "--------------------------------------------------------------------------------------------------------------------"
echo "BASH_VERSION: $BASH_VERSION"
echo "参数说明: "
echo "从外部只传递零个参数时,遍历字典,删除 hdfs 对应日期下的文件目录"
echo "从外部只传递一个参数时,根据指定的 hive 外表,删除 hdfs 对应日期下的文件目录"
echo "从外部只传递两个参数时,第一个参数必须是 hdfs-to-hive 的外表名,第二个必须是YYYY-MM-DD格式的日期! 默认是当天日期减去20天"
echo "--------------------------------------------------------------------------------------------------------------------"

os_name=`uname`
if [ "Darwin" == $os_name ]; then
   # For BSD date:If you are using OS X or FreeBSD, use the following instead because BSD date is different from GNU date
   tmp_date_20days_ago=$(date -j -v-20d +"%Y-%m-%d")
elif [ "Linux" == $os_name ]; then
   #For GNU date:
   tmp_date_20days_ago=$(date --date="20 days ago" +"%Y-%m-%d")
fi

#必须先声明
declare -A small_file_paths
small_file_paths=(
   [hdfs_cc_dm_real]="/dw/cc/prod/dm/"
   [hdfs_cc_sms_processor_real]="/dw/cc/prod/sms_processor/"
   [hdfs_cc_sms_real]="/dw/cc/prod/sms/"
   [hdfs_crm_clients_real]="/dw/crm/prod/crm_clients/data_time="
   [hdfs_crm_contact_records_real]="/dw/crm/prod/crm_contact_records/"
   [hdfs_crm_contacts_real]="/dw/crm/prod/crm_contacts/"
   [hdfs_crm_opportunities_real]="/dw/crm/prod/crm_opportunities/"
   [hdfs_im_leave_message_content_real]="/dw/im/prod/message/"
   [hdfs_im_session_content_real]="/dw/im/prod/sessionContent/"
   [hdfs_im_view_history_real]="/dw/im/prod/viewHistory/"
   [hdfs_cc_cdr_real]="/dw/cc/prod/cdr/"
   [hdfs_ticket_logs_real]="/dw/ticket/prod/ticket/"
   [hdfs_user_center_real]="/dw/usercenter/prod/user/"
   [hdfs_cc_asr_real]="/dw/cc/prod/asr/"
)

is_valid_date() {
   if [ ${#date_20days_ago} == 10 ];then
      echo "$date_20days_ago 格式正确。必须生成合适的日期,以避免操作错误!"
   else
      echo "$date_20days_ago 格式错误,程序退出!必须生成合适的日期,以避免操作错误!"
      exit 11
   fi
}

if [ $# == 0 ]; then
    date_20days_ago=$tmp_date_20days_ago
    # 检查
    is_valid_date
    for key in $(echo ${!small_file_paths[*]})
    do
        path="${small_file_paths[$key]}${date_20days_ago}"
        echo "清理 Hadoop 上的小文件目录:$key : $path"
        hadoop fs -rm -r $path
    done
elif [ $# == 1 ]; then
   hive_ext_tbl=$1
   date_20days_ago=$tmp_date_20days_ago
   is_valid_date
   path="${small_file_paths["${hive_ext_tbl}"]}${date_20days_ago}"
   echo "===>> 1个参数. 当前hive 外表: $hive_ext_tbl, 清除的 hdfs 文件目录是: $path"
   # hadoop fs -rm -r $path
elif [ $# == 2 ]; then
   hive_ext_tbl=$1
   if [[ $(date "+%Y-%m-%d" -d "$2") == "$2" ]]; then
      echo "Date $2 is valid and matches the format (YYYY-MM-DD)"
      date_20days_ago=$2
      is_valid_date
      path="${small_file_paths["${hive_ext_tbl}"]}${date_20days_ago}"
      echo "===>> 1个参数. 当前hive 外表: $hive_ext_tbl, 清除的 hdfs 文件目录是: $path"
      # hadoop fs -rm -r $path
   else
      echo "Date $2 not matches the format (YYYY-MM-DD)!"
      exit 11
   fi
fi

if test $? -ne 0
then
exit 11
fi

原文地址:https://www.cnblogs.com/myblog1900/p/11539963.html

时间: 2024-10-03 22:49:33

清理hdfs小文件shell脚本的相关文章

大数据技术之_05_Hadoop学习_04_MapReduce_Hadoop企业优化(重中之重)+HDFS小文件优化方法+MapReduce扩展案例+倒排索引案例(多job串联)+TopN案例+找博客共同粉丝案例+常见错误及解决方案

第6章 Hadoop企业优化(重中之重)6.1 MapReduce 跑的慢的原因6.2 MapReduce优化方法6.2.1 数据输入6.2.2 Map阶段6.2.3 Reduce阶段6.2.4 I/O传输6.2.5 数据倾斜问题6.2.6 常用的调优参数6.3 HDFS小文件优化方法6.3.1 HDFS小文件弊端6.3.2 HDFS小文件解决方案第7章 MapReduce扩展案例7.1 倒排索引案例(多job串联)7.2 TopN案例7.3 找博客共同粉丝案例第8章 常见错误及解决方案 第6章

生成文件shell脚本以及说明(一)

生成文件shell脚本以及说明: #!/bin/sh file1=$(date +%Y%m%d%H%M%S) #定义变量获取当前时间 ALM_TYPE=BOSS4ZC #定义变量 INSTANCE_ID=62100408#定义变量 STATUS=MAJOR#定义变量 ALM_INFO=Mysql备用主机宕机10.**.62.**,请及时处理.#定义变量 ALM_TIME=$(date +'%Y-%m-%d %H:%M:%S')#定义变量 file2=$INSTANCE_ID.#定义变量 file

HDFS小文件物理空间占用验证

项目环境中遇到的小文件较多,起初除了NAMENODE的内存外,还是比较担心文件物理空间的占用.于是就看一下,小文件是如何占用物理空间的: 前提:HDFS块大小为64MB 文件副本总共3份 1.  批量生成小文件(均20M) 2.  记录测试前DFS空间使用情况 目前,DFS空间已经使用50.04GB 3.  向HIVE中LOAD一个文件testaa 4.  再次查看DFS空间使用情况 5. 查看文件testaa所在的块占用的空间情况 Total size可以看出:占用物理空间为20MB 6. 再

HDFS 小文件处理——应用程序实现

在真实环境中,处理日志的时候,会有很多小的碎文件,但是文件总量又是很大.普通的应用程序用来处理已经很麻烦了,或者说处理不了,这个时候需要对小文件进行一些特殊的处理——合并. 在这通过编写java应用程序实现文件的合并并上传到HDFS.整体的处理思路是,从本地加载琐碎的小文件并写到HDFS中. package study.smallfile.javaapp; import java.io.File; import java.io.FileInputStream; import java.io.IO

HDFS小文件合并问题的优化:copyMerge的改进

1.问题分析 用fsck命令统计 查看HDFS上在某一天日志的大小,分块情况以及平均的块大小,即 [[email protected] jar]$ hadoop fsck /wcc/da/kafka/report/2015-01-11 DEPRECATED: Use of this script to execute hdfs command is deprecated. Instead use the hdfs command for it. 15/01/13 18:57:23 WARN ut

每次读取指定目录、指定数量的文件shell脚本

#!/bin/sh PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin LANG=zh_CN.GB18030 export PATH LANG ANALYZER_HOME=$(cd "$(dirname "$0")"; pwd) cd $ANALYZER_HOME declare -a fileArr echo $1", "$2 function listDirFil

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件

shell脚本每隔2s获取某个进程的cpu和mem数据并保存到csv文件 shell脚本如下echo "%CPU,%MEM" > cpu_test.csvpid=1 #Can be change by yourselfwhile true do top -bn1 -n 1 -p $pid | tail -1 | awk '{ print $9,$10 }' | sed 's/ /,/' >> cpu_test.csv sleep 2 #delay timedone 脚

shell 脚本编程基础篇

一级标题 二级标题 1.编程基础 Linus:Talk is cheap, show me the code 程序组成 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结构:数据在计算机中的类型和组织方式 面向过程语言 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如 果出现了情况B,做什么处理 问题规模小,可以步骤化,按部就班处理 以指令为中心,数据服务于指令 C,shell 面向对象语言 一种认识世界.分析世界的方法论.将万事万物抽象为各

Hadoop小文件问题及解决方案

1.概述 小文件是指文件size小于HDFS上block大小的文件.这样的文件会给hadoop的扩展性和性能带来严重问题.首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1千万个小文件,每个文件占用一个block,则NameNode大约需要2G空间.如果存储一亿个文件,则NameNode需要20G空间.这样NameNode内存容量严重制约了集群的扩展.其次,访问大量小文件速度远远小于访问几个大文件.HDFS最初是为流式访问大文件开发的