1 自己写一个存储过程。这个存储过程的目的就是给分区表增加一个分区。
2 新建一个Job,设定每个月某个时刻调用你写的存储过程
这样就能达到你每月自动增加分区的需求。
我们有一批日志数据存储在hdfs上,按天创建目录,如2018-07-31的日志hdfs路径为:/data/logs/gateway/20180731。现在要用hive分析数据,同时要保证这些数据目录不能改变,就需要hive用外表的方式与这些数据进行关联。
示例:
但是,看下文件列表
一共108个待添加的目录,这样一个个添加太累人,有没有批量添加的方法呢?
Hive有个MSCK命令,可以扫描数据分区目录,修复元信息,目录与元信息不一致时,能自动更新。
但是,数据目录必须是Hive习惯路径格式:
同时,建表时指定LOCATION为分区目录的父目录:
这时,用命令
即可自动把所有的数据按dt分区,添加到gateway_analysis中。
由于我们的目录格式不符合,只能用ADD PARTITION的方式了。
为减少工作量,写了个shell脚本,自动添加 /data/logs/gateway 目录下所有的分区目录到gateway_analysis表中:
代码如下:#!/bin/bash
#Author: MOS
#Script name: funPart.sh
#Date &Time: 2012-10-10/12:20:53
#Version: 1.0.1
#Description:
# Disk_Mod(){
#使用if匹配模式,使用for循环判断是否存在,如果有,则取其绝对路径,跳出循环,如果不匹配或文件不存在,跳出函数,返回66
if [[ -n $1 &&$1 =~ "/dev/sd[a-z]" ]]
then local Darray=(ls /dev/sd[a-z])
for i in ${Darray[*]}do
[[ "$i" == "$1" ]] &&Sd=$i && break
done
else
return 66
fi
#当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环
while :do
read -p "Warning!!!This operation will clean $Sd data. Next=y,Quit=n [y|n]: " Choice
case $Choice in
y)
dd if=/dev/zero of=$Sd bs=512 count=1 &>/dev/null &&break || return 67 n)
exit 88
*)
echo "Invalid choice,please choice again."
esac
done
#使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍 echo -e "n\np\n1\n\n+100M\nn\np\n2\n\n+1024M\nw\n"|fdisk /dev/sdb &> /dev/null || return 68 #格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好...此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69
partprobe Part=fdisk -l /dev/$Sd|tail -2|cut -d" " -f1`
for M in ${Part[*]}do
! mke2fs -j $M &>/dev/null &&ErrorPart=$M && return 69
done
return 0
}
#下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。
Disk_Mod $1
Res=$?
[ $Res -eq 0 ] &&exit 0
[ $Res -eq 66 ] &&echo "Error! Invalid input."
[ $Res -eq 67 ] &&echo "Error! Command ->dd <- Faild."
[ $Res -eq 68 ] &&echo "Error! Command ->fdisk <- Faild."
[ $Res -eq 69 ] &&echo "Error! Command ->mke2fs <- Faild."
如果有什么不懂的话可以去看看《Linux就该这么学》这本书,非常适合新手学习Linux。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)