HIVE实战处理(三)beeline和hive的区别

一、调度脚本

1、通过hive/beeline的方式

一般情况下的hive之间的数据的转换的话,是通过kettle工具执行的,所以也是在调度的时候传入kettle的执行脚本kitchen.sh。
一般操作:
一般生产多使用ETL工具(kettle)进行处理数据的插入

/opt/data-integration/kitchen.sh -file=%%G_PATH_ETL./adm/adm_qltsys/first_page_load_time_1d_delta_daily/main.kjb -param:DT=%%v_t_day. -level=Detailed

前提是kettle里面已经配置好了要连接的数据库
HIVE实战处理(三)beeline和hive的区别_第1张图片
流程的话都是调度kettle脚本执行工作,最基本的也是同kettle连接hive,只是没有暴露数据连接ip以及集群的认证等重要信息。

2、如果是插入数据不能用kettle方式解决的那么生产常常是shell脚本和sql脚本结合使用,并进行调度使用。

二、生产实践

背景:
需求:要吧hive的数导入phoenix里,使用多列多条件的查询方式(用来代替hbase)对外暴露http接口给前端查询。

从hive到外部的数据导出的情况,像phoenix的话是没有必要通过kettle执行插入数据的(应该也是可以用的)。所以要用原生的hive命令执行插入数据。
1、hive方式
1)准备一个test-beeline.sql(从hive表 insert overwrite phoenix表)
2)准备一个调度插入的命令给调度工具

hive -hiveconf STATIS_DAY=%{TOOL_DT} -hiveconf STATIS_HOUR=%diao{TOOL_HOUR} -f %%G_PATH_ETL./adm/exp/test_beeline.sql
#1)%{TOOL_DT}或者${TOOL_DT} 参数的写法根据调度工具的不同写法不同
#2)生产使用的调度
#hive -hiveconf STATIS_DAY=%%v_t_day_exec. -hiveconf STATIS_HOUR=%{TOOL_HOUR} -f %%G_PATH_ETL./adm/exp/test_beeline.sql 

通过 参数- hiveconf的方式传入时间参数
通过 参数 -f 指定要执行的sql语句
如果是直接把执行命令传给调度工具也是可以的。

3)调度下执行脚本
HIVE实战处理(三)beeline和hive的区别_第2张图片
4)报错问题分析
hive 执行一般的hql脚本的时候是正常,如果有什么特殊函数需要加载jar的话,本地如果没有的话就不是很适用了。
原因是hive命令的是会加载本地的hive环境,如果运行节点本地没有指定
jar的时候会报错误。

5)解决方案
在HQL语句中添加指定的JAR
HIVE实战处理(三)beeline和hive的区别_第3张图片
然后使用hive -f方式执行插入数据。
2、beeline/beeline2方式
1)执行上面同样的程序

beeline -u 'jdbc:hive2://hadoop1:10003/acc;principal=hive/[email protected]'  -f  %%G_PATH_ETL./adm/exp/test_beeline.sql
#principal代表集群加了kerberos认证的,连接的时候一并传入。

2)本地测试beeline成功执行带插入数据:
HIVE实战处理(三)beeline和hive的区别_第4张图片
3)成功数据分析
这种方式的连接hive集群的是直接访问hdfs的指定的UDF函数的,对于
beeline方式连接的时候相当于开启了hive的CLI客户端,首先会去本地环境中加载指定的JAR,如果没有的话就去指定的HDFS位置下寻找对应的JAR,
在创建udf函数的时候已经指定了特定的JAR的特定的java主类

CREATE  FUNCTION yanfa.mg_getuuid AS 'cn.migu.hive.udf.GetUUID' USING JAR 'hdfs://ns1/user/hadoop/hive_udf/original-mg-hive-udf-1.0.jar';

你可能感兴趣的:(hive)