shell调用spark不执行JAVA_crontab shell调用spark

对于熟悉Scala开发的人来说,对于spark-sql的使用,直接jar包中写入代码处理就能轻松实现动态语句的执行。

但是对于我,不打算学习Scala和Java语言,但是又想定时执行时间推延的周期、定时任务,该肿么办?

spark-sql CLI几个参数,完全满足我等非专业人员。

CLI options:

-d,--define          Variable subsitution to apply to hive

commands. e.g. -d A=B or --define A=B

--database     Specify the database to use

-e         SQL from command line

-f                    SQL from files

-H,--help                        Print help information

--hiveconf   Use value for given property

--hivevar         Variable subsitution to apply to hive

commands. e.g. --hivevar A=B

-i                    Initialization SQL file

-S,--silent                      Silent mode in interactive shell

-v,--verbose                     Verbose mode (echo executed SQL to the

console)

###########################

-e 可以在命令中带sql语句,但是明显不适合大量的sql。小量语句可以考虑。

-f sql文件,只要把sql写入文件,直接批量提交,全部语句一次性任务,如果周期变化了,怎么办?

--hiveconf 主角登场,可以把参数带入sql语句中替换,在shell中赋值,实现动态sql。

测试前提:预先pcp2表是存在的,这里不错复杂判断表格是否存在后再查询。

###########################################################

测试一:

#简单替换SQL中的参数 -hiveconf 把2个参数替代sql文件里面的动态参数

spark-sql -S -hiveconf table_name='pcp2' -hiveconf row_limit='10' -f /opt/hadoop/sql/spark-test.sql

#########################

--这个SQL文件中,查询的表名字,返回的条目数,由外部输入。

spark-test.sql  内容如下:

show tables;

select * from ${hiveconf:table_name} limit ${hiveconf:row_limit};

插图1

84280385_1

#########################

[root@snn sql]# spark-sql -S -hiveconf table_name='pcp2' -hiveconf row_limit='10' -f /opt/hadoop/sql/spark-test.sql

15/12/18 11:41:59 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.

15/12/18 11:42:09 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.

SET hive.support.sql11.reserved.keywords=false

15/12/18 11:43:23 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

SET spark.sql.hive.version=1.2.1

SET spark.sql.hive.version=1.2.1

15/12/18 11:43:39 WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

external_2000w  false

external_2000w_new      false

external_bz2_tbl_6005   false

external_tar_gz_tbl_6005        false

external_tbl_6005       false

hive_user_info  false

pcp     false

pcp2    false

sqoop_test      false

tbl_6005        false

test_table_16538        false

test_table_16539        false

浙江    杭州    300

浙江    宁波    150

浙江    温州    200

浙江    嘉兴    100

江苏    南京    270

江苏    苏州    299

江苏    某市    200

江苏    某某市  100

[root@snn sql]#

###########################################################

测试二:

#shell外部传入参数SQL执行。

/bin/bash ./spark-parameter.sh pcp2 10

#################

spark-parameter.sh  内容如下:

#!/bin/bash

sh_table_name=$1

sh_row_limit=$2

$SPARK_HOME/bin/spark-sql -S -hiveconf table_name=$sh_table_name -hiveconf row_limit=$sh_row_limit -f /opt/hadoop/sql/spark-test.sql

插图2

84280385_2

#########################

[root@snn sql]# /bin/bash ./spark-parameter.sh pcp2 10

15/12/18 11:52:32 WARN Utils: Service 'SparkUI' could not bind on port 4040. Attempting port 4041.

15/12/18 11:52:43 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.

SET hive.support.sql11.reserved.keywords=false

15/12/18 11:53:52 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

SET spark.sql.hive.version=1.2.1

SET spark.sql.hive.version=1.2.1

15/12/18 11:54:09 WARN YarnScheduler: Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

external_2000w  false

external_2000w_new      false

external_bz2_tbl_6005   false

external_tar_gz_tbl_6005        false

external_tbl_6005       false

hive_user_info  false

pcp     false

pcp2    false

sqoop_test      false

tbl_6005        false

test_table_16538        false

test_table_16539        false

浙江    杭州    300

浙江    宁波    150

浙江    温州    200

浙江    嘉兴    100

江苏    南京    270

江苏    苏州    299

江苏    某市    200

江苏    某某市  100

[root@snn sql]#

###########################################################

测试三:

#小量SQL测试需要,固定2个参数,可以根据需要调整一下。

#方便crontab自动触发shell,shell可以浮动生成日期后缀。

/bin/bash ./spark-autoparameter.sh pcp2 10

##############

spark-autoparameter.sh 内容如下:(注意shell文件中*星号这个通配符,后面引用需要引号,否则做文件匹配)

#!/bin/bash

sh_table_name=$1

sh_row_limit=$2

#seconds from 1970-01-01

date_seconds=`date +%s`

echo $date_seconds

sh_table_date=`expr $date_seconds / 86400`

echo $sh_table_date

#Statment_create

creat_sql="create table ${sh_table_name}_$sh_table_date as select * from ${sh_table_name} limit ${sh_row_limit};"

echo "${creat_sql}"

$SPARK_HOME/bin/spark-sql -e "${creat_sql}"

插图3

84280385_3

#########################

[root@snn sql]# /bin/bash ./spark-autoparameter.sh pcp2 10

1450413019

16787

create table pcp2_16787 as select * from pcp2 limit 10;

15/12/18 12:30:45 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.

SET hive.support.sql11.reserved.keywords=false

15/12/18 12:31:54 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

SET spark.sql.hive.version=1.2.1

SET spark.sql.hive.version=1.2.1

Time taken: 21.701 seconds

[root@snn sql]#

##############  检查新表是否生成?

[root@snn sql]# spark-sql

15/12/18 12:33:06 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.

SET hive.support.sql11.reserved.keywords=false

15/12/18 12:34:13 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

SET spark.sql.hive.version=1.2.1

SET spark.sql.hive.version=1.2.1

spark-sql> select * from pcp2_16787;

浙江    杭州    300

浙江    宁波    150

浙江    温州    200

浙江    嘉兴    100

江苏    南京    270

江苏    苏州    299

江苏    某市    200

江苏    某某市  100

Time taken: 19.368 seconds, Fetched 8 row(s)

spark-sql>

###########################################################

测试四:

#方便crontab自动触发shell,shell可以浮动生成日期后缀。

#代码量很大,-e 不适合处理时,可以shell调用sql文件

/bin/bash ./spark-autoparameter_sql_file.sh pcp2

## spark-autoparameter_sql_file.sh ,如下:

#!/bin/bash

sh_table_name=$1

#seconds from 1970-01-01

date_seconds=`date +%s`

echo $date_seconds

sh_table_date=`expr $date_seconds / 86400`

echo $sh_table_date

#Statment_create

$SPARK_HOME/bin/spark-sql -S -hiveconf table_name="another_${sh_table_name}_${sh_table_date}" -hiveconf org_table_name="${sh_table_name}" -f /opt/hadoop/sql/spark-create.sql

##需要执行的sql语句集合,如下:

spark-create.sql

create table ${hiveconf:table_name} as select * from ${hiveconf:org_table_name};

show tables;

插图4

84280385_4

#########################

[root@snn sql]# vi spark-autoparameter_sql_file.sh

[root@snn sql]# /bin/bash ./spark-autoparameter_sql_file.sh pcp2

1450414909

16787

15/12/18 13:02:15 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.

SET hive.support.sql11.reserved.keywords=false

15/12/18 13:03:23 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

SET spark.sql.hive.version=1.2.1

SET spark.sql.hive.version=1.2.1

another_pcp2_16787      false             -------------生成的表

external_2000w  false

external_2000w_new      false

external_bz2_tbl_6005   false

external_tar_gz_tbl_6005        false

external_tbl_6005       false

hive_user_info  false

pcp     false

pcp2    false

pcp2_16787      false

sqoop_test      false

tbl_6005        false

test_table_16538        false

test_table_16539        false

[root@snn sql]#

##############  检查新表

[root@snn sql]# spark-sql

15/12/18 13:07:03 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.

SET hive.support.sql11.reserved.keywords=false

15/12/18 13:08:12 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

SET spark.sql.hive.version=1.2.1

SET spark.sql.hive.version=1.2.1

spark-sql> select * from another_pcp2_16787;

浙江    杭州    300

浙江    宁波    150

浙江    温州    200

浙江    嘉兴    100

江苏    南京    270

江苏    苏州    299

江苏    某市    200

江苏    某某市  100

Time taken: 18.441 seconds, Fetched 8 row(s)

Spark-sql>

至此,圆满完成简单的shell和spark-sql结合,只要根据需要修改sql文件里面的内容,在crontab -e中加入需要的环境变量或者脚本即可实现自动化。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值