贴一段Shell脚本,以便日后参考。

 1 #! /bin/bash
 2
 3 ICMS_PATH=$(cd $(dirname $0); pwd)
 4 DEPLOY_PATH=$(cd $(dirname $ICMS_PATH); pwd)
 5 JAR_FILE=$DEPLOY_PATH‘/dailydata-1.0-SNAPSHOT.jar‘
 6 INI_FILE=$DEPLOY_PATH‘/cnedmp_etl.ini‘
 7 LOG_FILE=$DEPLOY_PATH‘/shellrun.log‘
 8 CODING=‘GB2312‘
 9
10 if [ $# -ne 1 ]; then
11     logging INFO "Ussage: $0 <source file path>"
12     exit 1
13 fi
14
15 #Funtion for Log
16 function logging(){
17     logTime=$(date +"%Y-%m-%d %T")
18     echo "$logTime $1 $2"
19 }
20 source $INI_FILE
21 PASSWORD=`yarn jar $JAR_FILE com.hypers.etl.file.specialFileProcess.BlowFish`
22 SRC_DIR=$1
23 logging INFO "Going to process all the source file under path: $SRC_DIR"
24 cd $SRC_DIR
25 partition=$(echo $SRC_DIR | awk -F/  ‘{print $(NF-1)}‘)
26 logging INFO "The partition is $partition"
27 filelist=$(ls $dir)
28 logging INFO "Will handle $filelist under path $SRC_DIR"
29 logging INFO "-----------------------------"
30
31 for filename in $filelist
32 do
33
34 logging INFO "---------------------------"
35 logging INFO "handling file $filename ..."
36
37 PRE_LOCATION=`mysql -h$HOSTNAME -u$USERNAME -p$PASSWORD $DBNAME  <<EOF 2> /dev/null | tail -n +2
38 SELECT Pre_Location from $CONFNAME where File_Name=‘$filename‘;
39 EOF`
40 year=$(echo $partition | cut -b 1-4)
41 PRE_LOCATION=$PRE_LOCATION/$year
42 logging INFO "get pre file location $PRE_LOCATION for $filename"
43
44 TARG_LOCATION=`mysql -h$HOSTNAME -u$USERNAME -p$PASSWORD $DBNAME  <<EOF 2> /dev/null | tail -n +2
45 SELECT Target_Location from $CONFNAME where File_Name=‘$filename‘;
46 EOF`
47 TARG_LOCATION=$TARG_LOCATION/$partition
48 logging INFO "get target file location $TARG_LOCATION for $filename"
49
50 TARG_TABLE_NAME=`mysql -h$HOSTNAME -u$USERNAME -p$PASSWORD $DBNAME  <<EOF 2> /dev/null | tail -n +2
51 SELECT Trg_Table_Name from $CONFNAME where File_Name=‘$filename‘;
52 EOF`
53 logging INFO "get target table name $TARG_TABLE_NAME for $filename"
54
55 hdfs dfs -mkdir -p $PRE_LOCATION && logging INFO "Created $PRE_LOCATION succesfully"
56 hdfs dfs -mkdir -p $TARG_LOCATION && logging INFO "Created $TARG_LOCATION succesfully"
57
58 hdfs dfs -put  $filename $PRE_LOCATION && logging INFO "Put $filename onto hdfs prelocation $PRE_LOCATION"
59
60 yarn jar $JAR_FILE com.hypers.etl.file.mr.CLIDriver -i ${PRE_LOCATION}‘/‘${filename} -o ${TARG_LOCATION} -e ${CODING} -d ${partition} -s ‘,‘
61
62 logging INFO "alter table $TARG_TABLE_NAME to add partition"
63 #sudo su hdfs -c"beeline -u jdbc:hive2://${HOSTNAME}:10000/cnedmp -n hdfs -p $HIVE_SERVER2_PASSWORD -e "alter table $TARG_TABLE_NAME add partition  dt = ‘${partition}‘  location ‘${TARG_LOCATION}‘;" "
64
65 done
时间: 2024-12-31 10:37:06

贴一段Shell脚本,以便日后参考。的相关文章

再贴一段shell,以供参考

1 #! /bin/bash 2 DEPLOY_PATH=$(cd "$(dirname "$0")"; pwd) 3 INI_FILE=$DEPLOY_PATH'/cnedmp_etl.ini' 4 . $INI_FILE 5 BASE_PATH=$(cd "$(dirname "$DEPLOY_PATH")"; pwd) 6 MAIN_PATH=$(cd "$(dirname "$BASE_PATH&q

shell脚本开头说明参考

#Name : test.sh #Author : huangyue #Mail : 775408829@qq.com #Created time : 2015-9-8 ; Last alter time : 2015-10-06 ; #!/bin/bash/

一段shell脚本

//根据入参增加nginx反向代理#!/bin/bash#set -x log_path="./proc/logs/shellExecute.log"log_path_back="./proc/logs/shellExecute.log1"nginxBasePath="/home/netnumen/ems/ums-server/utils/nginx/nginx-1.4.7"nginxConfPath="${nginxBasePath}

下载Google官方/CM Android源代码自动重新开始的Shell脚本

国内由于某种原因,下载CM或Google官方的Android源代码总容易中断.总看着机器,一中断就重新执行repo sync还太麻烦,所以我特意编写了一段shell脚本(download.sh).通过获取shell最后返回的状态码来决定是否再次执行repo sync命令. #!/bin/bash echo "======start repo sync======" repo sync # 第一次下载android源代码 while [ $? != 0 ]; do echo "

利用shell脚本统计代码行数

刚毕业那会儿有一次去一家台湾公司面试,问我写过多少行代码.从没想过这个问题,粗略算了算,随口说道:大概几十万行吧.最近整理资料,看着eclipse左边满满的列表,想起了这个事.倒底总共有多少行代码?--这事如果在windows下要么找工具,要么编程序.又想到linux里的命令统计很方便,于是打算用个命令来完成.可分析来分析去,恐怕一行命令是搞不定的--又涉及递归查找,又涉及指定文件类型,又涉及对文件全路径进行操作.最终还是用了一段shell脚本才达到目的. #!/bin/bash declare

Shell脚本通过参数传递调用指定函数

我们在写一些功能性脚本的时候,往往会把操作相似或者参数类似行为接近的函数放在同一个shell脚本中,这样管理方便,维护简单,也很清晰.对于这种情况,通常的办法是,在shell脚本中定义所有用到的函数,然后在正文代码中用case语句读入输入的命令函数参数来调用指定的相应函数.这样就达到一个shell脚本使用的强大功能. 下面以一个简单的例子来说明.一个计算器提供了加减乘除的功能: #!/bin/bash usage="Usage: `basename $0` (add|sub|mul|div|al

编写Shell脚本的最佳实践

前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这个东西不算是正经的编程语言,他更像是一个工具,用来杂糅不同的程序供我们调用.因此很多人在写的时候也是想到哪里写到哪里,基本上都像是一段超长的main函数,不忍直视.同时,由于历史原因,shell有很多不同的版本,而且也有很多有相同功能的命令需要我们进行取舍,以至于代码的规范很难统一. 考虑到上面的这些原

编写Shell脚本的最佳实践,规范二

需要养成的习惯如下: 代码有注释 #!/bin/bash # Written by steven # Name: mysqldump.sh # Version: v1.0 # Parameters : 无 # Function: mysqldump备份mysql # Create Date: 2016-08-27 缩进有规矩 编码要统一 在写脚本的时候尽量使用UTF-8编码 太长要分行 巧用heredocs 学会查路径 script_dir=$(cd $(dirname $0) && pw

Java面试12|Linux及Shell脚本

1.关于awk命令的面试题 (1)最近登录的5个帐号 last -n 5 | awk -F ':'(指定域分割符号) '{print $1}' -n表示number,有多少行需要显示.读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域.默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推. (2)用awk统计文本行数 awk '{count