基于海量数据处理需求背景下,公司要做数据处理平台的升级,整体架构从Oracle集群到完全分布式存储计算的Hadoop/Spark体系。其中有着大量的Oracle sql/sp(以下简称SP)需要转换到Hadoop/Spark体系下,也就是SP->Spark Sql;作为技术架构上的升级,需要保留原有业务逻辑。每个SP长达数百到数千行代码,业务逻辑复杂;人工转换成本高。
hplsql作为Spache Hive下的一个子模块,借助于Antlr解析SP而后运行在hive上,而基于Hive on Spark/Tez 又可进一步提高计算效率。
以下演示hplsql在Apache 体系下的安装配置
已有基础集群环境(三个节点): CentOS 6.8
Java8
hadoop2.7.2
hive 1.2.1
使用hplsql版本:
hplsql-0.3.31
在官网( http://hplsql.org/home)找到的最新版本,其发布于2017年九月。在对应github( https://github.com/apache/hive/tree/master/hplsql)上发现该子项目最后针对源码的更新是在半年前,并且最近两年并不活跃。据说bug很多。。。
Note: 此处基于Apache体系,根据官网( http://hplsql.org/start)提示进行配置,注意各类Jar包路径。
1 下载tar包解压到合适位置(也可以自行编译源码获得最新版本)
tar -zxvf hplsql-0.3.31.tar.gz -C /usr/SFT
2 进入解压后路劲修改hplsql如下(注意HADOOP_HOME、HIVE_HOME)
#!/bin/bash
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/lib/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/etc/hadoop"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/mapreduce/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/mapreduce/lib/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/hdfs/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/hdfs/lib/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/yarn/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/yarn/lib/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/common/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/common/lib/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*"
export "HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/conf"
export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"
SCRIPTPATH=${0%/*}
3 修改hplsql-site.xml(注意hiveserver2连接地址、DNS配置、以及hive运行时相关)
我的运算引擎为tez,默认是mr,也可以配置成spark或其他;注意和hive保持一致。
<property>
<name>hplsql.conn.hive2conn</name>
<value>org.apache.hive.jdbc.HiveDriver;jdbc:hive2://chdp11:10000;hive;hive</value>
<description>HiveServer2 JDBC connection</description>
</property>
<property>
<name>hplsql.conn.init.hive2conn</name>
<value>
set mapred.job.queue.name=root.default;
set hive.execution.engine=tez;
use default
</value>
<description>Statements for execute after connection to the database</description>
</property>
4 配置测试
执行hplsql -e “select *from tabName” 查询上述对应DB里存在的表;如下所示即可知配置成功。
5 troubleShooting
在上述配置过程中若不仔细可能会遇到以下两个错误:
1 hqlsql相关(注意依赖jar路径的配置是否对应,注意Hadoop1.X和Hadoop2.X的目录差别):
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
2 hplsql-site.xml相关(注意连接配置相关,在此未开启Kerbors之类的权限认证)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
下一篇:如何让你的Oracle sql/sp运行在Hive上?hplsql执行Oracle SP测试记录