hive 三种方式区别和搭建


一、安装模式介绍:

    Hive官网上介绍了Hive3种安装方式,分别对应不同的应用场景。

    1、内嵌模式(元数据保村在内嵌的derby种,允许一个会话链接,尝试多个会话链接时会报错)

    2、本地模式(本地安装mysql 替代derby存储元数据)

    3、远程模式(远程安装mysql /替代derby存储元数据)

二、安装环境以及前提说明:

    首先,Hive是依赖于hadoop系统的,因此在运行Hive之前需要保证已经搭建好hadoop集群环境。

    本文中使用的hadoop版本为2.6 Hive版本为1.2.1版。(centos 7 64位,JDK 1.8

下载Hive的安装包,且安装到了/usr/local/hive-1.2.1 
 /etc/profile中设定HIVE_HOME环境变量:

export HIVE_HOME=/usr/local/hive-1.2.1

export HIVE_CONF_DIR=$HIVE_HOME/conf

export PATH= $HIVE_HOME/bin

 

三、内嵌模式安装:

这种安装模式的元数据是内嵌在Derby数据库中的,只能允许一个会话连接,数据会存放到HDFS上。

1、切换到HIVE_HOME/conf目录下,执行下面的命令:

cp hive-env.sh.template hive-env.sh

vim hive-env.sh

hive-env.sh中添加以下内容:

 

# Set HADOOP_HOME to point to a specific hadoop install directory

 HADOOP_HOME=/usr/local/hadoop

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/usr/local/hive-1.2.1/conf

# Foder containing extra ibraries required for hive compilation/execution can be controlled by:

export HIVE_AUX_JARS_PATH=/usr/local/hive-1.2.1/lib

2、启动hive,由于已经将HIVE_HOME加入到了环境变量中,所以这里直接在命令行敲hive即可:

 

 

注明:如果启动不了,请提前手动启动元数据服务 hive  --service metastore -hiveconf hive.root.logger=DEBUG,console

 

 

然后在启动hive

 

 

有时不启动元数据库,会遇到以下错误

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:295)

        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:679)

        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:623)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at

 

参考http://www.aboutyun.com/thread-7881-1-1.html

2首先说一些遇到的各种问题
遇到的问题
问题1:元数据库未启动
这里首先概括一下,会遇到的问题。首先需要启动元数据库,通过下面命令:
1hive --service metastore
2hive  --service metastore -hiveconf hive.root.logger=DEBUG,console  

注释:
-hiveconf hive.root.logger=DEBUG,console命令的含义是进入debug模式,便于寻找错误

 

注意,只要上面2步即可完成内嵌模式的安装和启动,

 

四、本地模式安装:

这种安装方式和嵌入式的区别在于,不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。

这种方式是一个多用户的模式,运行多个用户client连接到一个数据库中。这种方式一般作为公司内部同时使用Hive

这里有一个前提,每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者需要知道MySQL的用户名和密码才行。

下面开始正式搭建,这里要求hadoop系统已经正常启动,且MySQL数据库已经正确安装。

 

1首先必须卸载系统自带数据mariadb再安装mysql

[root@worker2 mysql]# rpm -qa | grep mariadb

[root@worker2 mysql]# rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodep

 

1.1首先介绍mysql安装方式

1)建议下载离线安装包直接安装配置 (mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

2创建mysql的用户组/用户, data目录及其用户目录

# groupadd mysql

# useradd -g mysql -d /home/mysql mysql

# mkdir /home/mysql/data

 

3解压安装包并将解压包里的内容

拷贝到mysql的安装目录/usr/local/mysql

tar -xzvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

cd mysql-5.7.18-linux-glibc2.5-x86_64/

mv * /usr/local/mysql

 

 

4 初始化mysql数据库

cd /usr/local/mysql/

 

执行这个命令

 

./bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data –initialize

 

牢记上面的随机密码, 如上dUjoGB&Bk8_J 下面我们修改密码时需要用到。

 

5 检测下是否能启动mysql服务

./support-files/mysql.server start

 

注:此处之所以出错的原因我们上面的默认安装目录为 /usr/local/mysql/mysql-5.7.18-linux-glibc2.5-x86_64/

而我们稍后用了mv * /usr/local/mysql/  把所有的文件移动到上一层目录里面了

此时我们需要修改/support-files/mysql.server文件的basedirdatadir目录路径为我们环境所在的mysqlbasedirdatadir路径, 如下:

 

basedir=/usr/local/mysql

datadir=/home/mysql/data

 

修改完之后重新启动  ./support-files/mysql.server start

 

 

6 创建软链接

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

 

去系统里面查看是否创建成功

 

 

 

注:安装离线包方式在mysql目录 support-files里面 没有my-default.cnf或者my.cnf,如果改系统自带的/etc/my.cnf 文件 反而会出错,所以此处可以忽略my.cnf,下面可以正常启动

 

 

7 配置mysql服务开机自动启动

拷贝启动文件到/etc/init.d/下并重命令为mysqld

cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

 

上面手误在最后面写的mysql不是mysqld,下面重新命名

 

增加执行权限

chmod 755 /etc/init.d/mysqld

 

 

检查自启动项列表中没有mysqld这个,如果没有就添加mysqld

chkconfig --list mysqld

chkconfig -- add mysqld

 

设置MySQL345等级自动启动

chkconfig --level 345 mysqld on

或用这个命令设置开机启动:

chkconfig mysqld on

 

8mysql服务的启动/重启/停止

启动mysql服务

./support-files/mysql.server start 或者 service mysqld start

 

 

重启mysql服务

./support-files/mysql.server restart   或者  service mysqld restart

 

停止mysql服务

./support-files/mysql.server restart  或者 service mysqld stop

 

查看mysql启动状态

./support-files/mysql.server start   或者  service mysqld status

 

9root用户mysql登录密码为abcd1234

mysql -u root -p

 

SET PASSWORD = PASSWORD('abcd1234');

 

休息完密码 执行命令

flush privileges;

mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效。

 

10 mysql远程授权

grant all on *.* to 'root'@'%' identified by 'abcd1234';

 

到此,完成了离线安装mysql

 

1.2在线安装mysql(不建议,时间太长) 

worker3节点中安装

下载mysql源安装包

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

 

安装mysql

yum localinstall mysql57-community-release-el7-8.noarch.rpm

 

 

检查mysql源是否安装成功

yum repolist enabled | grep "mysql.*-community.*"

 

看到上图所示表示安装成功

 

安装MySQL

yum install mysql-community-server

注:此处网络下载特别耗时

 

 

启动MySql服务

 

开机启动mysql

systemctl enable mysqld

systemctl daemon-reload

 

修改root默认密码

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:

grep 'temporary password' /var/log/mysqld.log

 

mysql -u root –p 登录修改root密码,需满足密码复杂度(worker3mysql root用户密码伟Abcd1234!

set password for 'root'@'localhost'=password('Abcd1234!');

 

注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误,如上图所示:

通过msyql环境变量可以查看密码策略的相关信息:

 

 validate_password_policy:密码策略,默认为MEDIUM策略  validate_password_dictionary_file:密码策略文件,策略为STRONG才需要  validate_password_length:密码最少长度  validate_password_mixed_case_count:大小写字符长度,至少1  validate_password_number_count :数字至少1  validate_password_special_char_count:特殊字符至少1  上述参数是默认策略MEDIUM的密码检查规则。

共有以下几种密码策略:

策略

检查规则

0 or LOW

Length

1 or MEDIUM

Length; numeric, lowercase/uppercase, and special characters

2 or STRONG

Length; numeric, lowercase/uppercase, and special characters; dictionary file

1.3修改密码策略

/etc/my.cnf文件添加validate_password_policy配置,指定密码策略

# 选择0LOW),1MEDIUM),2STRONG)其中一种,选择2需要提供密码字典文件

validate_password_policy=0

如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:

validate_password = off

重新启动mysql服务使配置生效:

systemctl restart mysqld

 

注:我在配置文件里面/etc/my.cnf 里面把密码策略禁用,我要保持所有环境mysql  root用户密码一样方便记 (worker3,在线安装mysql

 

set password for 'root'@'localhost'=password('abcd1234');

 

 

1.4添加远程登录用户

默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户

grant all on *.* to 'root'@'%' identified by 'abcd1234' with grant option;

 

 

1.5配置默认编码为utf8

修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:

[mysqld]

character_set_server=utf8

init_connect='SET NAMES utf8'

 

重新启动mysql服务,查看数据库默认编码如下所示:

systemctl restart mysqld

systemctl status mysqld

 

 

 

 

默认配置文件路径:  配置文件:/etc/my.cnf  日志文件:/var/log//var/log/mysqld.log  服务启动脚本:/usr/lib/systemd/system/mysqld.service  socket文件:/var/run/mysqld/mysqld.pid

 

在线安装mysql 配置完毕

 

------

  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /tmp

  $ $HADOOP_HOME/bin/hadoop fs -mkdir       /user/hive/warehouse

  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /tmp

  $ $HADOOP_HOME/bin/hadoop fs -chmod g+w   /user/hive/warehouse

  hadoop fs -chmod -R 777  /tmp

------

2、Hive本地模式安装创建mysql数据库信息

(1) 首先登录MySQL,创建一个数据库,这里命名为hive,数据库名是可以随意定义的。

create database hive;

 

创建hive用户,并赋予所有的权限:

CREATE USER 'hive'@'localhost' IDENTIFIED BY 'abcd1234';

 

GRANT ALL PRIVILEGES ON *.* TO hive IDENTIFIED BY 'abcd1234'  WITH GRANT OPTION;

 

(2) MySQLJDBC驱动包拷贝到hive的安装目录中,驱动包自行查找下载。(下载之后解压)

驱动下载地址https://dev.mysql.com/downloads/connector/j/

mysql-connector-java-5.1.32-bin.jar

 

(3) HIVE_HOME/conf下的hive-default.xml.template拷贝一份:

cp hive-default.xml.template hive-site.xml

 

3、修改hive-site.xml文件:

该配置文件有3300多行,选择其中的几个选项进行修改即可。

hive目录下创建iotmp文件夹

 

 

 

1修改javax.jdo.option.ConnectionURL属性(derby配置改为mysql配置)

 

注:不要直接复制,我的hostnameworker4mysql端口3306,直接复制粘贴到你那边会报错

 

<property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://worker4:3306/hive?createDatabaseIfNotExist=true</value>

    <description>JDBC connect string for a JDBC metastore</description>

</property>

 

 

2修改javax.jdo.option.ConnectionDriverName属性(修改驱动属性)

 

<property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>com.mysql.jdbc.Driver</value>

    <description>Driver class name for a JDBC metastore</description>

</property>

 

 

3修改javax.jdo.option.ConnectionUserName属性。即数据库用户名(我们创建的是hive用户名)

 

  <property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>hive</value>

    <description>Username to use against metastore database</description>

  </property>

 

4修改javax.jdo.option.ConnectionPassword属性。即数据库密码。(我们创建的密码为abcd1234

 

  <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>abcd1234</value>

    <description>password to use against metastore database</description>

  </property>

 

 

5修改hive.server2.logging.operation.log.location属性,因为默认的配置里没有指定具体的路径。

 

  <property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/usr/local/hive-1.2.1/iotmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

 

 

6修改hive.exec.local.scratchdir属性。

 

  <property>

    <name>hive.exec.local.scratchdir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

 

 

7修改hive.downloaded.resources.dir属性。3

  <property>

    <name>hive.downloaded.resources.dir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

 

 

 

8修改属性hive.querylog.location属性。

  <property>

    <name>hive.querylog.location</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Location of Hive run time structured log file</description>

  </property>

 

.

4配置hive/conflog4j配置文件

cp hive-log4j.properties.template hive-log4j.properties

 

5.hive下的jline-2.12.jar替换掉hadoop自带的包,不然会报错。

先把hadoop里面jline备份以下

mv /usr/local/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar /usr/local/hadoop/share/hadoop/yarn/lib/jline-0.9.94.jar.backup

 

 

 

然后把hive里面替换掉hadoop自带的包

cp /usr/local/hive-1.2.1/lib/jline-2.12.jar /usr/local/hadoop/share/hadoop/yarn/lib/

 

7、启动hive,界面如下:

 

 

worker4中 可以看到hive databases

 

hive数据库中 有一些hive插入的元数据(登陆远程数据mysql查看保存的元数据)

 

 

 

 

 

 

 

 

 

. 远程模式安装

这种存储方式需要在远端服务器运行一个MySQL服务器,并且需要在Hive服务器启动meta服务。这里用mysql测试服务器, ip(worker3  192.168.64.131)

 

1、 服务端和客户端都放在同一台服务器上

 

 

  <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://worker3:3306/hive?createDatabaseIfNotExist=true</value>

    <description>JDBC connect string for a JDBC metastore</description>

  </property>

  

  <property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>com.mysql.jdbc.Driver</value>

    <description>Driver class name for a JDBC metastore</description>

  </property>

  <property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>hive</value>

    <description>Username to use against metastore database</description>

  </property>

  <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>abcd1234</value>

    <description>password to use against metastore database</description>

  </property>

  <property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/usr/local/hive-1.2.1/iotmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

  <property>

    <name>hive.exec.scratchdir</name>

    <value>/tmp/hive</value>

    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>

  </property>

  <property>

    <name>hive.exec.local.scratchdir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

  <property>

    <name>hive.downloaded.resources.dir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

  <property>

    <name>hive.querylog.location</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Location of Hive run time structured log file</description>

  </property>

注:这里把hive的服务端和客户端都放在同一台服务器上了。服务端和客户端可以拆开,将hive-site.xml配置文件拆为如下两部分

 

 

 

Hive 服务端和客户端放在不同服务器上

2、 服务端配置文件

  <property>

    <name>javax.jdo.option.ConnectionURL</name>

    <value>jdbc:mysql://worker3:3306/hive?createDatabaseIfNotExist=true</value>

    <description>JDBC connect string for a JDBC metastore</description>

  </property>

  

  <property>

    <name>javax.jdo.option.ConnectionDriverName</name>

    <value>com.mysql.jdbc.Driver</value>

    <description>Driver class name for a JDBC metastore</description>

  </property>

  <property>

    <name>javax.jdo.option.ConnectionUserName</name>

    <value>hive</value>

    <description>Username to use against metastore database</description>

  </property>

  <property>

    <name>javax.jdo.option.ConnectionPassword</name>

    <value>abcd1234</value>

    <description>password to use against metastore database</description>

  </property>

  <property>

    <name>hive.server2.logging.operation.log.location</name>

    <value>/usr/local/hive-1.2.1/iotmp/operation_logs</value>

    <description>Top level directory where operation logs are stored if logging functionality is enabled</description>

  </property>

  <property>

    <name>hive.exec.scratchdir</name>

    <value>/tmp/hive</value>

    <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description>

  </property>

  <property>

    <name>hive.exec.local.scratchdir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Local scratch space for Hive jobs</description>

  </property>

  <property>

    <name>hive.downloaded.resources.dir</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Temporary local directory for added resources in the remote file system.</description>

  </property>

  <property>

    <name>hive.querylog.location</name>

    <value>/usr/local/hive-1.2.1/iotmp</value>

    <description>Location of Hive run time structured log file</description>

  </property>

 

3、 客户端配置文件

<property>  

  <name>hive.metastore.warehouse.dir</name>  

  <value>/user/hive/warehouse</value>  

</property>  

   

<property>  

  <name>hive.metastore.local</name>  

  <value>false</value>  

</property>  

  

<property>  

  <name>hive.metastore.uris</name>  

  <value>thrift://worker4:9083</value>  

</property>

 

启动hive服务端(worker4)程序 启动元数据

 hive --service metastore 

 

 

 

客户端(worker3)直接使用hive命令即可

 

总结

内嵌模式 本地模式和远程模式的区别

 

1. 内嵌模式,特点是:hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中。该模式无需特殊配置, 

 

2. 本地模式,特点是:hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以在同一台机器上,也可以在远程机器上。该模式只需将hive-site.xml中的ConnectionURL指向mysql,并配置好驱动名、数据库连接账号即可:

 

3. 远程模式,特点是:hive服务和metastore在不同的进程内,可能是不同的机器。该模式需要将hive.metastore.local设置为false,并将hive.metastore.uris设置为metastore服务器URI,如有多个metastore服务器,URI之间用逗号分隔。metastore服务器URI的格式为thrift://hostort

 

<property>  

<name>hive.metastore.uris</name>  

<value>thrift://worker4:9083</value>   

</property>

把这些理解后,大家就会明白,其实仅连接远程的mysql并不能称之为远程模式,是否远程指的是metastorehive服务是否在同一进程内,换句话说,指的是metastorehive服务离得

 

 

Hive 1.2.1 UI(HWI)配置

 

Hive Web InterfaceHWI)简介:Hive自带了一个Web-GUI配置

 编辑文件conf/hive-site.xml,添加hive.hwi.war.file的配置:(需要把配置文件原有的下列熟悉去掉,再添加,不然内容重复了,启动会报错)

<property>

    <name>hive.hwi.listen.host</name>

    <value>0.0.0.0</value>

    <description>This is the host address the Hive Web Interface will listen on</description>

  </property>

  <property>

    <name>hive.hwi.listen.port</name>

    <value>9999</value>

    <description>This is the port the Hive Web Interface will listen on</description>

  </property>

 <property>

    <name>hive.hwi.war.file</name>

    <value>lib/hive-hwi-1.2.1.war</value>

    <description>This sets the path to the HWI war file, relative to ${HIVE_HOME}. </description>

  </property>

 

没有UI war包的,需要自己下载对应版本的源码进行打包,后拷到lib下。

下载源码

apache-hive-1.2.1-src.tar.gz

将源码解压:

tar -vxzf apache-hive-1.2.1-src.tar.gz

进入解压后的目录,再进入hwi目录下:

cd apache-hive-1.2.1-src 

cd hwi/web 

zip hive-hwi-1.2.1.zip ./*

再更改后缀名为war,复制到HIVE_HOME/lib/

mv hive-hwi-1.2.1.zip hive-hwi-1.2.1.war

mv hive-hwi-1.2.1.war $HIVE_HOME/lib

 

拷贝tools

cp */java/jdk1.7.0_51/lib/tools.jar /usr/local/hive-1.2.1/lib

如果不进行此步骤,将无法启动界面。报错解决

 

同事服务端报错信息

 

若有如下报错,需将(JDK目录下tools.jarjre下的tools.jar包拷到Hivelib目录下,重启hwi服务:

 

启动

 $ sh bin/hive --service hwi

 

配置成功

http://192.168.64.130:9999/hwi/

 

参考:http://blog.csdn.net/ckfflyingdream/article/details/50515837

 

hiveserver2

HiveServer2提供了JDBC链接操作Hive的功能,非常实用,但如果在使用HiveServer2时候,不注意安全控制,将非常危险,因为任何人都可以作为超级用户来操作HiveHDFS数据。比如:在配置HiveServer2的时候,hive.server2.authentication=NONE,表示没有用户认证。

在之前的学习和实践Hive中,使用的都是CLI或者hive –e的方式,该方式仅允许使用HiveQL执行查询、更新等操作,并且该方式比较笨拙单一。幸好Hive提供了轻客户端的实现,通过HiveServer或者HiveServer2,客户端可以在不启动CLI的情况下对Hive中的数据进行操作,两者都允许远程客户端使用多种编程语言如JavaPythonHive提交请求,取回结果。HiveServer或者HiveServer2都是基于Thrift的,但HiveSever有时被称为Thrift server,而HiveServer2却不会。既然已经存在HiveServer为什么还需要HiveServer2呢?这是因为HiveServer不能处理多于一个客户端的并发请求,这是由于HiveServer使用的Thrift接口所导致的限制,不能通过修改HiveServer的代码修正。因此在Hive-0.11.0版本中重写了HiveServer代码得到了HiveServer2,进而解决了该问题。HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBCODBC提供了更好的支持。

       既然HiveServer2提供了更强大的功能,将会对其进行着重学习,但也会简单了解一下HiveServer的使用方法。在命令中输入hive --service help,结果如下。从结果可以了解到,可以使用hive <parameters> --service serviceName <serviceparameters>启动特定的服务,如clihiverserverhiveserver2等。

 

Hive服务启动hiveserver2

[root@worker4 ~]# hive --service hiveserver2

 

 

 

别的节点机器可以通过beeline连接

 

 

 

[root@worker2 ~]# beeline

Beeline version 1.6.0 by Apache Hive

beeline> !connect jdbc:hive2://worker4:10000 hive abcd1234

Connecting to jdbc:hive2://worker4:10000

17/06/27 15:02:27 INFO jdbc.Utils: Supplied authorities: worker4:10000

17/06/27 15:02:27 INFO jdbc.Utils: Resolved authority: worker4:10000

17/06/27 15:02:28 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://worker4:10000

Connected to: Apache Hive (version 1.2.1)

Driver: Spark Project Core (version 1.6.0)

Transaction isolation: TRANSACTION_REPEATABLE_READ

0: jdbc:hive2://worker4:10000> show tables;

 

 

 

JDBC

一般连接Hive的方式有CLI(登录到服务器或者本地切换到hive环境),Client(SQUIREEL SQL客户端)Web UI(hive --service hwi ), Java 操作JDBC同普通JDBC数据库一样,首先需要启动Hive 服务打开hive --service hiveserver2

 

依赖的jar:

hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar

$HIVE_HOME/lib/hive-exec-0.11.0.jar

$HIVE_HOME/lib/hive-jdbc-0.11.0.jar

$HIVE_HOME/lib/hive-metastore-0.11.0.jar  

$HIVE_HOME/lib/hive-service-0.11.0.jar   

$HIVE_HOME/lib/libfb303-0.9.0.jar   

$HIVE_HOME/lib/commons-logging-1.0.4.jar  

$HIVE_HOME/lib/slf4j-api-1.6.1.jar

 

但是建议全部导入 

点击项目project 右键properties

 

 

 

 

然后hive 二进制包中的jar全部进来

 

 

 

 

 

 

代码如下   

可以参考官网 JDBC 源码

https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC

 

 

package com.hive;

 

import java.sql.SQLException;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

 

 

import java.sql.DriverManager;

 

public class HiveJdbcClient {

//  private static String driverName = "org.apache.hive.jdbc.HiveDriver";

 

  /**

   * @param args

   * @throws SQLException

   */

  public static void main(String[] args) throws SQLException {

    try {

Class.forName("org.apache.hive.jdbc.HiveDriver");

boolean f = true;

    Connection con = DriverManager.getConnection("jdbc:hive2://192.168.64.130:10000/default", "hive", "abcd1234");

    Statement stmt = con.createStatement();

    

    // select * query

    String tablename = "car1";

    String sql = "select * from " + tablename + " limit 15";

    ResultSet resultSet = stmt.executeQuery(sql);

    System.out.println("Running " + sql);

    while (resultSet.next()) {

System.out.println(String.valueOf(resultSet.getString(1))+"\t"+resultSet.getString(2)+"\t"+resultSet.getString(3)+"\t"+resultSet.getString(4));

}

 

    //show tables;

    sql = "show tables '" + tablename +"'";

    System.out.println("Running: " + sql);

    resultSet=stmt.executeQuery(sql);

    if (resultSet.next()) {

System.out.println(resultSet.getString(1));

}

    

    //desc tables;

    sql = "describe " + tablename;

    System.out.println("Running: " + sql);

    resultSet=stmt.executeQuery(sql);

    while (resultSet.next()) {

System.out.println(resultSet.getString(1) + "\t" + "\t" + resultSet.getString(2)+ "\t" + "\t" + resultSet.getString(3));

}

    

    // regular hive query

    sql = "select count(1) from " + tablename;

    System.out.println("Running: " + sql);

    resultSet=stmt.executeQuery(sql);

    while (resultSet.next()) {

System.out.println(resultSet.getString(1));

}

    

    

    

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

    //replace "hive" here with the name of the user the queries should run as

 

 

    

  }

}

 

运行的结果

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值