about云开发

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2825|回复: 5

[心得体会] 大数据shell执行与代码执行效率比较

[复制链接]

666

主题

315

听众

293

收听

版主

Rank: 7Rank: 7Rank: 7

积分
6539

活跃会员热心会员推广达人宣传达人突出贡献优秀版主论坛元老

发表于 2018-3-20 19:23:43 | 显示全部楼层 |阅读模式
在开发中,一般来讲,我们都是通过代码开发,比如Java,Scala等来写mapreduce,spark编程等。然后如果使用shell编程来实现,效率会更高。很多企业为了效率,都采用这个方法。

0

主题

5

听众

0

收听

高级会员

Rank: 4

积分
2756
发表于 2018-3-21 10:01:56 | 显示全部楼层
就一句话?后面木有了?

666

主题

315

听众

293

收听

版主

Rank: 7Rank: 7Rank: 7

积分
6539

活跃会员热心会员推广达人宣传达人突出贡献优秀版主论坛元老

 楼主| 发表于 2018-3-21 10:18:40 | 显示全部楼层
suzjst 发表于 2018-3-21 10:01
就一句话?后面木有了?

这是1分钟小知识。有问题,可以回帖交流。
发表于 2018-3-21 15:52:05 | 显示全部楼层
比如hive使用shell
[Bash shell] 纯文本查看 复制代码
#!/bin/bash
#######################################
#
# args format: ./test.sh tablename date
# dateformat: yyyymmdd
# 当参数只有表名,没有日期时,为全量加载
#######################################

source /etc/profile
#默认的SQL目录存放路径
sqlhome=/home/hadoop/shell/hive/sql
#数据库名称
db=safe
table=""

#获取日期参数
dt=$( date +"%Y%m%d" )
yesterday=$(date -d "1 days ago $dt " +%Y%m%d)

file0=$(basename $0)

file=${file0%.*}

echo "args number : $# "

if [ $# -eq 2 ] ; then
  dt=$2
  yesterday=$(date -d "1 days ago $dt " +%Y%m%d)
  
  table=$1
  hivefile=$sqlhome"/"$table".sql"
#  echo "hivefile: $hivefile "
  if [ ! -e $hivefile ] ; then
    echo "++++++++++++++ file not exist!! [$hivefile] +++++++++++++"
    exit 1
  fi
elif [ $# -eq 1 ] ; then
   
  dt=$( date +"%Y%m%d" )
  yesterday=$(date -d "1 days ago $dt " +%Y%m%d)
 
  table=$1
  hivefile=$sqlhome"/"$table".sql"
  
  if [ ! -e $hivefile ] ; then
    echo "++++++++++++++ file not exist!! [$hivefile] +++++++++++++"
    exit 1
  fi
else
  echo " +++++++++++++ command format error!! +++++++++++++ "
  exit 1
fi

#运行hive的开始时间--时分秒
time1=`date "+%Y%m%d %T"`
start_time=$(date -d "$time1" +%s)

#hive --hiveconf table=$db.$table --hiveconf dt=$yesterday -f $hivefile
/opt/spark2.12/bin/spark-sql --hiveconf table=$db.$table --hiveconf dt=$yesterday -f $hivefile

result=$?

rt=$(date +"%Y%m%d %T")
#运行hive的结束时间
time2=`date "+%Y%m%d %T"`
end_time=$(date -d "$time2" +%s)

if [ $result -ne 0 ] ; then
  failfile=$file"-"$dt.fail
  cd ~/log/fail
  rm -rf $failfile
  touch $failfile
  echo "$rt $file step error!! " >> ~/log/$file.log
  exit 1
else
  sucfile=$file"-"$dt.suc
  cd ~/log/success
  rm -rf $sucfile
  touch $sucfile
  a=`expr $end_time - $start_time`
  echo "$rt  $0  step complete!!   elapsed time [ $a ] econd " >> ~/log/$file.log
fi

0

主题

5

听众

0

收听

高级会员

Rank: 4

积分
2756
发表于 2018-3-22 09:25:10 | 显示全部楼层
明白了!感谢两位版主!

0

主题

2

听众

0

收听

注册会员

Rank: 2

积分
165
发表于 2018-3-29 12:32:58 | 显示全部楼层
shell脚本不熟,如果要用脚本的话,我会用Python来实现。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /3 下一条

QQ|小黑屋|about云开发-学问论坛|社区 ( 京ICP备12023829号

GMT+8, 2018-12-16 03:07 , Processed in 0.503501 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2 Licensed

快速回复 返回顶部 返回列表