HPL/SQL安装使用说明一、HPL/SQL简介1.1.HPL/SQL是什么HPL/SQL全称为Procedural SQL on Hadoop,为Hive提供了存储过程的支持扩展,并且在未来的Hive的版本(2.0)中,会将该模块集成到Hive产品中。
该解决方案不仅支持Hive,还支持SparkSQL,甚至是RDBMS中使用类似于Oracle PL/SQL的功能,这将极大的方便数据开发者的工作,Hive中很多之前比较难实现的功能,现在可以很方便的实现,比如自定义变量、基于一个结果集的游标、循环等等。
1.2.部署架构待补充。
1.3.环境说明需要事先完成Hive的安装部署,详细参见《Hive安装使用说明》。
二、HPL/SQL安装2.1. 下载从官网(/download)上下载最新的稳定版本地址,并上传到服务器上。
本安装示例采用的版本为hplsql-0.3.13.tar.gz。
2.2. 解压并配置环境变量解压安装文件到/opt目录$ tar-zxvf hplsql-0.3.13.tar.gz -C /opt$ ln-s /opt/hplsql-0.3.13 /opt/hplsql修改环境变量$ sudo vi /etc/profile修改如下内容export HPLSQL_HOME=/opt/hplsqlexportPATH="$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$HPLSQL_HOME/bi n :$PATH":wq启用配置$ source/etc/profile2.3. 修改配置文件$ cd$HPLSQL_HOME$ vi hplsql-site.xml修改以下内容的值<configuration><!--默认连接--><property><name>hplsql.conn.default</name><value>hive2conn</value><description>The default connection profile</description></property><!--...--><!--Hive连接配置--><property><name>hplsql.conn.hive2conn</name><value>org.apache.hive.jdbc.HiveDriver;jdbc:hive2://hdfs1:10000</value><description>HiveServer2 JDBC connection</description></property><!--Hive连接初始化语句--><property><name>hplsql.conn.init.hive2conn</name><value>set =default;set hive.execution.engine=mr;use default;</value><description>Statements for execute after connection to thedatabase</description></property><!--...--></configuration>备注:数据库连接部分,因hqlsql采用“;”作为分割符号,因此无法采用Hive 的ZooKeeper高可用集群,后续需要调整hqlsql源码进行处理。
$ vi hplsql修改内容如下:#!/bin/bashexport"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/*"export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/lib/native/*" export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/etc/hadoop"export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/mapreduce/*" export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/mapreduce/lib/* "export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/common/*" export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/common/lib/*"export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/hdfs/*" export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/hdfs/lib/*"export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/yarn/*" export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hadoop/share/hadoop/yarn/lib/*"export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hive/lib/*"export"HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/hive/conf"export HADOOP_OPTS="$HADOOP_OPTS-Djava.library.path=/usr/lib/hadoop/lib/native"SCRIPTPATH=${0%/*}java -cp$SCRIPTPATH:$HADOOP_CLASSPATH:$SCRIPTPATH/hplsql-0.3.13.jar:$SCRIPTPATH/antl r-runtime-4.5.jar $HADOOP_OPTS org.apache.hive.hplsql.Hplsql "$@"2.4. 验证hplsql -e "CURRENT_DATE+1"hplsql -e "SELECT * FROM users LIMIT 10"或者执行文件hplsql -f script.sql三、函数及存储过程使用3.1. 基础语法存储过程定义[ALTER|CREATE[OR REPLACE]|REPLACE]PROCEDURE| PROC procedure_name [parameters][AS|IS]Bodyparameters:([IN|OUT|INOUT|IN OUT] name data_type,...)|(name [IN|OUT|INOUT|IN OUT] data_type,...)body:statement| expression |BEGIN statements END函数定义ALTER|CREATE[OR REPLACE]|REPLACE FUNCTION function_name ([parameters]) RETURNS|RETURN data_type[AS|IS]body3.2. 存储过程示例声明存储过程$ vi up_test.sqlCREATE PROCEDURE UP_TEST(IN name STRING,OUT result STRING)BEGINSET result='Hello, '|| name ||'!';END;调用存储过程$ vi call.sql--引用存储过程INCLUDE up_test.sql--变量声明DECLARE str STRING;--调用存储过程CALL UP_TEST('lmz', str);--打印结果PRINT str;执行语句$ hqlsql -f call.sql3.3. 函数示例定义函数$ vi fn_test.sqlCREATE FUNCTION FN_TEST(name STRING)RETURN STRINGbeginRETURN'Hello, '|| name ||'!';end;调用函数vi call.sqlINCLUDE fn_test.sqlprint FN_TEST('lmz');执行语句$ hqlsql -f call.sql四、使用关系型数据库4.1. 配置外部数据库拷贝DB2驱动到/opt/hive/lib目录下,也可以拷贝到其他目录下,具体参见2.3章节中$HADOOP_CLASSPATH变量的配置目录。
修改hplsql-site.xml中的配置<configuration><!--...--><property><name>hplsql.conn.db2conn</name><value>com.ibm.db2.jcc.DB2Driver;jdbc:db2://10.68.37.23:50000/HBADB;db2admin;db2admin</value><description>IBM DB2 connection</description></property><!--...--></configuration>备注:HQL/SQL支持关系型数据库类型包括:DB2、MySQL、TeraData、Oracle、PostgreSQL、Netezza6种,暂不提供其他数据库的支持。