天天看點

Hive擴充功能(六)--HPL/SQL(可使用存儲過程)

軟體環境:

linux系統: CentOS6.7
Hadoop版本: 2.6.5
zookeeper版本: 3.4.8
           

主機配置:

一共m1, m2, m3這五部機, 每部主機的使用者名都為centos

192.168.179.201: m1 
192.168.179.202: m2 
192.168.179.203: m3 

m1: Zookeeper, Namenode, DataNode, ResourceManager, NodeManager, Master, Worker
m2: Zookeeper, Namenode, DataNode, ResourceManager, NodeManager, Worker
m3: Zookeeper, DataNode, NodeManager, Worker
           

資料:

搭建教程:
    http://lxw1234.com/archives///htm
下載下傳HPL/SQL位址:
    http://www.hplsql.org/download
HPL/SQL官網:
    http://www.hplsql.org/doc
           

注意事項:

一定不能在

HPL/SQL

上使用

Hive

文法的語句,要使用

MySQL

Oracle

等其他

HPL/SQL

支援的資料庫(具體可去官網檢視),不然會報找不到

dual

表或者

dual

表中無該字段的錯誤,切記

版本選擇:

HPL/SQL0.3.17

版本(必須是0.3.17或者0.3.17之後的版本)解決了強制讀

From dual

表的問題, 而本次安裝的是

Hive2.1.1

版本自帶的是

HPLSQL0.3.31

版本, 已解決強制讀

From dual

表的問題.

若要解決強制讀

From dual

表的問題,應下載下傳一個0.3.17或0.3.17之後版本的

HPL/SQL

, 然後将解壓後得到的hplsql-0.3.17.jar包放入

$HIVE_HOME/lib

包下, 并重命名為

hive-hplsql-*.jar

格式的包,如:

hive-hplsql-0.3.17.jar

1.編輯hive-site.xml檔案

HPL/SQL與Hive是通過

thrift

方式連接配接, 編輯

hive-site.xml

, 添加以下配置項

<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>m1</value>
</property>
<property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
</property>
           

2.編輯hplsql-site.xml檔案

配置HPL/SQL與Hive的連接配接, 建立

hplsql-site.xml

檔案(若已有則無需建立), 并将以下配置項拷貝到檔案中

<configuration>
<property>
  <name>hplsql.conn.default</name>
  <value>hive2conn</value>
  <description>The default connection profile</description>
</property>
<property>
  <name>hplsql.conn.hiveconn</name>
  <value>org.apache.hadoop.hive.jdbc.HiveDriver;jdbc:hive://</value>
  <description>Hive embedded JDBC (not requiring HiveServer)</description>
</property>
<!-- 配置項hive.execution.engine預設設定為mr,若使用spark作為引擎時,則設定為spark -->
<property>
  <name>hplsql.conn.init.hiveconn</name>
  <value>
     set mapred.job.queue.name=default;
     set hive.execution.engine=mr; 
     use default;
  </value>
  <description>Statements for execute after connection to the database</description>
</property>
<property>
  <name>hplsql.conn.convert.hiveconn</name>
  <value>true</value>
  <description>Convert SQL statements before execution</description>
</property>
<property>
  <name>hplsql.conn.hive2conn</name>
  <value>org.apache.hive.jdbc.HiveDriver;jdbc:hive2://m1:10000</value>
  <description>HiveServer2 JDBC connection</description>
</property>
<!-- 配置項hive.execution.engine預設設定為mr,若使用spark作為引擎時,則設定為spark -->
<property>
  <name>hplsql.conn.init.hive2conn</name>
  <value>
     set mapred.job.queue.name=default;
     set hive.execution.engine=mr; 
     use default;
  </value>
  <description>Statements for execute after connection to the database</description>
</property>
<property>
  <name>hplsql.conn.convert.hive2conn</name>
  <value>true</value>
  <description>Convert SQL statements before execution</description>
</property>
<property>
  <name>hplsql.conn.db2conn</name>
  <value>com.ibm.db2.jcc.DB2Driver;jdbc:db2://localhost:50001/dbname;user;password</value>
  <description>IBM DB2 connection</description>
</property>
<property>
  <name>hplsql.conn.tdconn</name>
  <value>com.teradata.jdbc.TeraDriver;jdbc:teradata://localhost/database=dbname,logmech=ldap;user;password</value>
  <description>Teradata connection</description>
</property>
<property>
  <name>hplsql.conn.mysqlconn</name>
  <value>com.mysql.jdbc.Driver;jdbc:mysql://localhost/test;user;password</value>
  <description>MySQL connection</description>
</property>
<property>
  <name>hplsql.dual.table</name>
  <value>default.dual</value>
  <description>Single row, single column table for internal operations</description>
</property>
<property>
  <name>hplsql.insert.values</name>
  <value>native</value>
  <description>How to execute INSERT VALUES statement: native (default) and select</description>
</property>
<property>
  <name>hplsql.onerror</name>
  <value>exception</value>
  <description>Error handling behavior: exception (default), seterror and stop</description>
</property>
<property>
  <name>hplsql.temp.tables</name>
  <value>native</value>
  <description>Temporary tables: native (default) and managed</description>
</property>
<property>
  <name>hplsql.temp.tables.schema</name>
  <value></value>
  <description>Schema for managed temporary tables</description>
</property>
<property>
  <name>hplsql.temp.tables.location</name>
  <value>/home/centos/soft/hive/tmp/plhql</value>
  <description>LOcation for managed temporary tables in HDFS</description>
</property>
<!-- 下面兩項需要按實際情況修改 -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>m1</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
</configuration>
           

3.配置dual表 (此步驟可跳過)

啟動Hive服務,依照在

hplsql-site.xml

檔案中的配置去建立(預設是在

default

庫中建立了

dual

表)

use default;
create table dual(DUMMY VARCHAR());
           

4.在使用hplsql存儲過程前, 需先啟動HiveServer2和Metastore服務

sh $HIVE_HOME/bin/hive  --service  metastore
sh $HIVE_HOME/bin/hive  --service  hiveserver2
           

繼續閱讀