shell 脚本

今天花了一天时间参照师兄和康康的代码终于写好了一个能运行的项目脚本,终于可以用脚本来运行项目了哈哈

特别是复杂的项目,用脚本驱动更能体现优势

见代码

input.sh

 1 #!/bin/bash
 2 set –eu         
 3 current_home=$(readlink -f $(dirname $0))/..  #获取主路径
 4 source $current_home/conf/app.conf     #关联其他脚本
 5 source $current_home/scripts/app.rc
 6 function usage() { 
 7 echo "Usage: $0" >&2   #重定向为标准错误
 8 exit $1
 9 }
10 cur_date=$(date +%Y%m%d) 
11 while getopts "h" opt; do
12 case $opt in
13 h) uage 0;;
14 ?) echo "Invalid option: -$OPTARG" >&2; usage 1;; 
15 esac
16 done
17 shift $((OPTIND-1))
18 #pre_date=$(date -d "$cur_date -1 day" + %Y%m%d)  
19 input_dir=$current_home/scripts/input  
20 input=$input_dir/input.sh 
21 echo "$(getdate) > BEGIN Build Input" 2>&1 #重定向为标准输出
22 echo "$(getdate) > STAR Build Input" 2>&1
23 sh $input $cur_date  #运行该目录下的脚本
24 echo "$(getdate) > FINISH Build Input" 2>&1
25 echo "$(getdate) > END Build Input" 2>&1

input/input.sh

 1 #!/bin/bash
 2 #set -eu
 3 current_home=$(readlink -f $(dirname $0))/../..
 4 source $current_home/conf/app.conf
 5 source $current_home/scripts/app.rc
 6 function usage() {
 7 echo "Usage: $0" >&2
 8 exit $1
 9 }
10 class=/ClassPath/
11 job_name=$(basename ${0%.sh})
12 job_conf=$(get_job_conf $0)
13 libjars=$exec_jar
14 force=true
15 cur_date=$1
16 #pre_date=$(date -d "$cur_date -1 day" +%Y%m%d)
17 inputdata=/InPutDateDir/
18 outputdata=$app_prefix/out
19 busy_file=$outputdata.busy
20 done_file=$outputdata.done
21 $force && hrm $done_file && hrm $busy_file
22 hexist $busy_file || hexist $done_file && exit
23 htouch $busy_file
24 hrmr $outputdata
25 hjar $exec_jar $class $inputdata $outputdata #运行—>hadoop jar
26 htouch $done_file

app.conf 设置变量

 1 export JAVA_HOME="/home/yunti/java-current"
 2 # hadoop conf
 3 hadoop_home=/home/yunti/hadoop-current
 4 hadoop_exec=$hadoop_home/bin/hadoop
 5 hadoop_exec_conf=$HOME/hadoop/conf
 6 # libjar conf
 7 exec_jar=$current_home/jar/snapshot.jar
 8 # io conf
 9 app_prefix=/HDFSHome/
10 #local path conf
11 log_dir=$current_home/log

hadoop.rc  hadoop指令

  1 # Hadoop resource file #运行hadoop指令 “$@”输入的全部指令
  2 function hadoop() {
  3 if [ -n "$hadoop_exec_conf" ]; then
  4 $hadoop_exec --config $hadoop_exec_conf "$@"
  5 else
  6 $hadoop_exec "$@"
  7 fi
  8 }
  9 function hput() {
 10 hadoop fs -put "$@"
 11 }
 12 function hget() {
 13 hadoop fs -get "$@"
 14 }
 15 function hcat() {
 16 hadoop fs -cat "$@"
 17 }
 18 function hls() {
 19 hadoop fs -ls "$@"
 20 }
 21 function htext() {
 22 hadoop fs -text "$@"
 23 }
 24 function hgetmerge() {
 25 hadoop fs -getmerge "$@"
 26 }
 27 function htouch() {
 28 hadoop fs -touchz "$@" >/dev/null 2>&1
 29 return 0
 30 }
 31 function hexist() {
 32 hadoop fs -test -e "$@"
 33 }
 34 function hrmr() {
 35 if hexist "$@"; then
 36 hadoop fs -rmr "$@" >/dev/null 2>&1
 37 fi
 38 }
 39 function hrm() {
 40 if hexist "$@"; then
 41 hadoop fs -rm "$@" >/dev/null 2>&1
 42 fi
 43 }
 44 function hmv() {
 45 hadoop fs -mv "$@"
 46 }
 47 function hmkdir() {
 48 hadoop fs -mkdir "$@"
 49 }
 50 
 51 function hcp() {
 52 hadoop fs -cp "$@" >/dev/null 2>&1
 53 }
 54 function hsetrep() {
 55 hadoop fs -setrep "$@" >/dev/null 2>&1
 56 }
 57 function hdfs_part_num() {
 58 if hexist "$@"; then
 59 hadoop fs -ls "$@" | grep 'part-' | wc -l
 60 fi
 61 }
 62 function hdfs_size() {
 63 if hexist "$@"; then
 64 hadoop fs -dus "$@" | grep "$@" | awk '{print $2;}'
 65 fi
 66 }
 67 function hdfs_time() {
 68 if hexist "$@"; then
 69 hadoop fs -ls "$@" | grep "$@" | awk '{print $6","$7}'
 70 fi
 71 }
 72 function hdfs_check() {
 73 path=$1
 74 num_parts=$2
 75 min_size=$3
 76 parts=$(hadoop fs -ls $path | grep 'part-' | wc -l)
 77 size=$(hadoop fs -dus $path | awk '{print $2}')
 78 if [[ $parts == $num_parts && $size -ge $min_size || 
 79 min_size == 0 ]]; then
 80 return 0
 81 else
 82 return 1
 83 fi
 84 }
 85 function get_counter() {
 86 cat $1 | grep 'INFO mapred.JobClient: ' | 
 87 sed 's/.*INFO mapred.JobClient: //' > $2
 88 }
 89 function hjar() {
 90 local tag_file=$log_dir/${job_name/: /.}.$cur_date.tag
 91 local log_file=$log_dir/${job_name/: /.}.$cur_date.log
 92 local counter_file=$log_dir/${job_name/: /.}.$cur_date.cnt
 93 touch $tag_file
 94 hadoop jar "$@" 2>&1 | tee $log_file
 95 local status=${PIPESTATUS[0]}
 96 get_counter $log_file $counter_file
 97 return $status
 98 }
 99 function hdistcp() {
100 hadoop distcp "$@"
101 }
102 function hstat() {
103 hadoop fs -stat "$@" >/dev/null 2>&1
104 }
105 function dist_pull() {
106 if [ $# -lt 2 ]; then
107 echo "$(getdate) > invalid number of argument"
108 return 1
109 fi
110 local src=$1
111 local dest=$2
112 local log_dir=${dest}_distcp_logs
113 if [ $# -gt 2 ]; then
114 log_dir=$3
115 fi
116 hexist $log_dir && hrmr $log_dir
117 hdistcp -Dmapred.map.child.java.opts="-Djava.system.class.loader=org.apache.hadoop.mapred.DeAppClassLoader -Xmx200m" 
118 -libjars $hadoop_jar -i -overwrite -delete -m $distcp_map_num -log $log_dir $src $dest
119 local ret=$?
120 if [ $ret == 0 ]
121 then
122 hadoop fs -chmod -R +r $dest
123 fi
124 return $ret
125 }
View Code

build.sh 编译生成项目

1 ##build.sh
2 #!bin/bash 
3 
4 mvn clean package 
5 rm -f jar/*.jar 
6 cp target/*.jar jar/snapshot.jar
原文地址:https://www.cnblogs.com/gray035/p/3823089.html