Hive搭建及启动

目录
  1. 1. 配置HOME
  2. 2. 安装mysql
    1. 2.1. Hive元数据介绍
  3. 3. 配置Hive
  4. 4. Hive命令
    1. 4.1. 启动hive
    2. 4.2. 启动hiveserver2
    3. 4.3. beeline工具测试使用jdbc方式连接
  5. 5. 报错

[TOC]

配置HOME

下载hive包,并解压

1
http://archive.apache.org/dist/

ln -s hive-2.1.1 /usr/hive

vi ~/.bashrc

1
2
3
4
5
6
7
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
$HIVE_HOME/bin/hive
export HIVE_HOME=/usr/hive
PATH=$HIVE_HOME/bin:$PATH
#hive依赖于hadoop(可以不运行在同一主机,但是需要hadoop的配置)
$HADOOP_HOME=/usr/hadoop

source ~/.bashrc

安装mysql

Hive元数据介绍

Hive 将元数据存储在 RDBMS 中,一般常用 MySQL 和 Derby。默认情况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不适用, 为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持,配置一个独立的元数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
yum install -y mysql-server
chkconfig --add mysqld
chkconfig mysqld on
chkconfig --list mysqld
service mysqld start

mysql -u root -p
Enter password: //默认密码为空,输入后回车即可
set password for root@localhost=password('root');   密码设置为root
set password for root@=password('root');
默认情况下Mysql只允许本地登录,所以只需配置root@localhost就好
设置所有ip访问密码为root
set password for root@%=password('root');       密码设置为root (其实这一步可以不配)
设置master访问密码为root
set password for root@master=password('root');   密码设置为root (其实这一步可以不配)
查询密码
select user,host,password from mysql.user;   查看密码是否设置成功
设置所有ip可以通过root访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' IDENTIFIED BY 'hive' WITH GRANT OPTION;

mysql -uroot -proot
create user 'hive' identified by 'hive';
create user 'hive'@'%' identified by 'hive';

create database hive;

配置Hive

mkdir iotmp

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

vim hive-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<configuration>
<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.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>

<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/usr/hive/iotmp</value>
<description>Location of Hive run time structured log file</description>
</property>

<property>
<name>hive.exec.local.scratchdir</name>
<value>/usr/hive/iotmp</value>
<description>Local scratch space for Hive jobs</description>
</property>

<property>
<name>hive.downloaded.resources.dir</name>
<value>/usr/hive/iotmp</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
</property>
</configuration>

Hive 的元数据可以存储在本地的 MySQL 中,但是大多数情况会是一个 mysql 集群,而且不在本地。所以在 hive 中需要开启远程 metastore。由于我是本地的 mysql,我就不配置下列属性了,但是如果是远程的 metastore,配置下面的属性。

1
2
3
4
5
6
7
8
9
10
11
12
<property>
<name>hive.metastore.uris</name>
<value></value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
<property>
<name>hive.server2.transport.mode</name>
<value>http</value>
<description>Server transport mode. "binary" or "http".</description>
</property>

链接:https://www.jianshu.com/p/87b76a686216

Hive命令

启动hive

1
2
3
$HIVE_HOME/bin/hive
如果调试,可以加上参数
$HIVE_HOME/bin/hivehive -hiveconf hive.root.logger=DEBUG,console

启动hiveserver2

1
2
3
$HIVE_HOME/bin/hive --service hiveserver2

or nohup $HIVE_HOME/bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &

hiveserver端口号默认是10000

hiveserver2是否启动
netstat -nl|grep 10000

beeline工具测试使用jdbc方式连接

可以在部署了hive任意节点上用beeline去连接

1
2
3
4
5
6
7
8
$HIVE_HOME/bin/beeline -u jdbc:hive2://hive:10000
or
$HIVE_HOME/bin/beeline -u jdbc:hive2://hive:10000 -n bigdata
最后一个参数是用户
or
$HIVE_HOME/bin/beeline 回车,进入beeline的命令界面
输入命令连接hiveserver2
beeline> !connect jdbc:hive2://hive:10000

使用beeline通过jdbc连接上之后就可以像client一样操作。

hiveserver2会同时启动一个webui,端口号默认为10002,可以通过http://localhost:10002/访问
界面中可以看到Session/Query/Software等信息。(此网页只可查看,不可以操作hive数据仓库)

参考https://blog.csdn.net/lblblblblzdx/article/details/79760959

参考https://www.cnblogs.com/netuml/p/7841387.html

hive元数据库(就是hive库)中有几个表(有好几十个,但只需要记住其中几个就可以了),有哪些字段
元数据库最重要的作用是保存一些信息,hive的描述信息,比如说hive有几个database,有几个表,这些表对应的hdfs的地址在哪儿,表有几个字段,建了几个分区,创建了几个自定义函数

columns_v2表记录是主外键关系表,
funcs表,是存的创建了什么函数
partition表是记录的创建了什么分区

报错

报错 Hive 2.3.3 MetaException(message:Version information not found in metastore.)

1
schematool -initSchema -dbType mysql

参考https://stackoverflow.com/questions/50230515/hive-2-3-3-metaexceptionmessageversion-information-not-found-in-metastore

http://sishuok.com/forum/blogPost/list/6221.html

https://blog.csdn.net/nokia_hp/article/details/79054079

评论