hive 安装部署和Java客户端

(转自)http://blog.csdn.net/zhongguozhichuang/article/details/52702476

主要对Hive 安装配置进行介绍。

[size=medium]二、Hive 运行模式[/size]

[size=medium]与 Hadoop 类似,Hive 也有 3 种运行模式:

1. 内嵌模式

将元数据保存在本地内嵌的 Derby 数据库中,这是使用 Hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。

2. 本地模式

这种模式是将元数据保存在本地独立的数据库中(一般是 MySQL),这用就可以支持多会话和多用户连接了。

3. 远程模式

此模式应用于 Hive 客户端较多的情况。把 MySQL 数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。[/size]

[size=medium]三、下载安装 Hive[/size]

上节课程我们已经了解到,Hive 是基于 Hadoop 文件系统之上的数据仓库。因此,安装Hive之前必须确保 Hadoop 已经成功安装。(本次实验环境,已经为大家安装好了 Hadoop.)

本次实验,使用Hive V1.1.0版本。Hive V1.1.0 可以在 Hadoop V1.0.0 以上环境中工作。终端下输入命令来下载:

$ wget http://labfile.oss.aliyuncs.com/apache-hive-1.1.0-bin.tar.gz


下载完成后解压:

$ tar zxvf apache-hive-1.1.0-bin.tar.gz
解压出来的文件名很长,在终端下输入很麻烦,为了后面实验的方便,建议修改为较短文件名,例如:

$ mv apache-hive-1.1.0-bin hive
四、配置系统环境变量

修改 /etc/profile 文件,使用 sudo vim /etc/profile 来修改:

# Hive environment
export HIVE_HOME=/usr/local/hadoop/hive
export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH
五、内嵌模式

(1)修改 Hive 配置文件

$HIVE_HOME/conf 对应的是 Hive 的配置文件路径,类似于之前学习的HBase, 该路径下的 hive-site.xml 是 Hive 工程的配置文件。默认情况下,该文件并不存在,我们需要拷贝它的模版来实现:

$ cp hive-default.xml.template hive-site.xml
hive-site.xml 的主要配置有:

[img]https://dn-anything-about-doc.qbox.me/userid46108labid766time1427423801808[/img]

hive.metastore.warehouse.dir
该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。
hive.exec.scratchdir
该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。
同时我们还要修改 Hive 目录下 /conf/hive-env.sh 文件(请根据自己的实际路径修改),该文件默认也不存在,同样是拷贝它的模版来修改:

export HADOOP_HEAPSIZE=1024

# 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/hadoop/hive/conf

# Folder containing extra ibraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/usr/local/hadoop/hive/lib

(2)创建必要目录

前面我们看到 hive-site.xml 文件中有两个重要的路径,切换到 hadoop 用户下查看 HDFS 是否有这些路径:

$ hadoop dfs -ls /

[img]https://dn-anything-about-doc.qbox.me/userid46108labid766time1427424044890[/img]

没有发现上面提到的路径,因此我们需要自己新建这些目录,并且给它们赋予用户写(W)权限。

$ hadoop dfs -mkdir /user/hive/warehouse
$ hadoop dfs -mkdir /tmp/hive
$ hadoop dfs -chmod 777 /user/hive/warehouse
$ hadoop dfs -chmod 777 /tmp/hive
如果你遇到 no such file or directory 类似的错误,就一步一步新建目录,例如:

$ hadoop dfs -mkdir /tmp
$ hadoop dfs -mkdir /tmp/hive
检查是否新建成功 hadoop dfs -ls / 以及 hadoop dfs -ls /user/hive/ :


(3)修改 io.tmpdir 路径

同时,要修改 hive-site.xml 中所有包含 ${system:Java.io.tmpdir} 字段的 value 即路径(vim下 / 表示搜索,后面跟你的关键词,比如搜索 hello,则为 /hello , 再回车即可),你可以自己新建一个目录来替换它,例如 /home/hive/iotmp . 同样注意修改写权限。如果不修改这个,你很可能会出现如下错误


(4)运行 Hive

./hive


报错

[img]https://img-blog.csdn.net/20161008164517260?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center[/img]

.解决方法:/schematool -initSchema -dbType derby

报错

[img]https://img-blog.csdn.net/20161008164700028?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center[/img]

解决方法:rm -rf metastore_db/ 在初始化

前面我们已经提到过,内嵌模式使用默认配置和 Derby 数据库,所以无需其它特别修改,先 ./start-all.sh 启动 Hadoop, 然后直接运行 hive:

报错

[img]https://img-blog.csdn.net/20161008165309081?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center[/img]

解决方法:

create table test_table(id INT, username string);
show tables;

六、远程模式

1.下载Hive

[url]http://apache.mirrors.ionfish.org/hive/[/url]

配置

vim hive-site.xml


<?xml version="1.0"?>
<configuration>

<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://{ip:port}/{databases}</value> => mysql服务的ip和端口号
</property>
<property>
<name>javax.jdo.option.ConnectionDriveName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>{username}</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>{password}</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/hive/warehouse</value> =>hive的仓库目录,需要在HDFS上创建,并修改权限
</property>


</configuration>
...


2.启动metastore

[hadoop@hftclclw0001 bin]$ pwd
/home/hadoop/apache-hive-1.2.1-bin/bin

[hadoop@hftclclw0001 bin]$ ./hive --service metastore &

[hadoop@hftclclw0001 bin]$ ps ax|grep metastore
...
...

在debug模式下开启metastore :
执行hive --service metastore -hiveconf hive.root.logger=DEBUG,console


3.启动HiveServer2

[hadoop@hftclclw0001 bin]$ pwd
/home/hadoop/apache-hive-1.2.1-bin/bin

[hadoop@hftclclw0001 bin]$ ./hive --service hiveserver2 &

[hadoop@hftclclw0001 bin]$ ps ax|grep HiveServer2
...
.
4.启动客户端
./hive -- service cli


5.启动shell 或是 beeline

beeline -u jdbc:hive2://master:10000


七、Java客户端


1.默认用户名和密码为空

2.默认端口10000,如果连不上须关闭防火墙


vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 10000 -j ACCEPT
service iptables restart

错误

org.apache.hive.service.cli.HiveSQLException: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous
at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:264)
at org.apache.hive.jdbc.Utils.verifySuccess(Utils.java:255)
at org.apache.hive.jdbc.HiveConnection.openSession(HiveConnection.java:593)
at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:172)
at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.car.test.HiveJdbcCli.getConn(HiveJdbcCli.java:156)
at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:35)

解决方法:


修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项

<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

重启hadoop
测试:./beeline -u 'jdbc:hive2://localhost:10000/userdb' -n username(替换为上述的用户名部分)


错误

java.sql.SQLException: org.apache.thrift.transport.TTransportException: SASL authentication not complete
at org.apache.hive.jdbc.HiveStatement.closeClientOperation(HiveStatement.java:211)
at org.apache.hive.jdbc.HiveStatement.close(HiveStatement.java:228)
at com.car.test.HiveJdbcCli.main(HiveJdbcCli.java:74)
Caused by: org.apache.thrift.transport.TTransportException: SASL authentication not complete


解决办法:

This is because the thrift server is expecting to authenticate via SASL when you open your transport connection. Hive Server 2 defaults to using SASL - unfortunately, PHP lacks a version of TSaslClientTransport (which is used as a wrapper around another TTransport object) which handles the SASL negotiation when you open your transport connection.

The easiest solution for now is to set the following property in your hive-site.xml

<property><name>hive.server2.authentication</name><value>NOSASL</value></property>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值