0%

Hive初识

一、 安装Hive并启动


1. 下载源码包

解压源码包后,配置hive-env.sh
(a)配置 HADOOP_HOME 路径

1
export HADOOP_HOME=${Hadoop的路径}

(b)配置 HIVE_CONF_DIR 路径

1
export HIVE_CONF_DIR=${Hive配置文件路径}


2. 启动hadoop


3. 启动Hive客户端

调用bin/hive进入Hive的客户端

启动Hive后会发现Hive源码包中多了derby.logmetastore_db这个就是Hive默认的元数据


4. 创建数据表

在Hive客户端中创建一个数据表,并数据表中插入数据

1
2
hive> create table student(id int, name string);
hive> insert into student values(1000,"ss");

此时我们可以发现在hdfs中出现了user/hive/warehouse文件夹下存在一个与表名同名的文件夹,这个文件夹中存储的就是数据表的数据



二、 尝试在文件系统中加载数据


1. 创建测试数据

创建一个student.txt文件(id与姓名之间用tab隔开)

1
2
3
1001    zhangsan
1002 lisi
1003 wangwu


2. 使用load导入数据

在hive中执行以下指令

1
hive> load data local inpath '文件路径' into table student;

此时我们可以发现user/hive/warehouse/student文件夹下多了一个student.txt文件,所以可以理解这其实就是一个上传操作,但是使用select语句查询时发现查询结果为

1
2
3
NULL	NULL
NULL NULL
NULL NULL

这是因为我们在创建表时并未声明文件分隔符,所以我们重新创建数据表,并声明分隔符为’\t’

1
hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

之后重新导入后数据发现可以正常查询了。


3. 通过上传文件导入数据

现在我们再创建一个student1.txt

1
2
3
1004    zhaoliu
1005 chenba
1006 sunjiu

然后直接上传到hdfs的user/hive/warehouse/student路径下
之后在查询,可以发现我们上传的student1.txt文件中的数据也可以查询到了。

在实际开发中,可以选择使用load指令或者直接上传两种方式,如果我们想使用load指令加载hdfs下的数据,同样可以使用load指令,此时可以理解成将该文件移动到数据表所对应的文件之下
hive> load data inpath ‘文件路径’ into table student;



三、 配置Hive元数据至MySQL

我们会发现一个问题同一时间只能启动一个Hive客户端。这就是数据derby数据库的原因,所以我们接下来要将我们的元数据转移到MySQL中,MySQL安装在此不做赘述。


1. 添加MySQL连接驱动

安装好MySQL后,首先我们需要下载mysql连接驱动也就是mysql-connector-java-5.1.47.jar(这个jar包可以在maven的本地仓库中找到,如果之前在maven中使用过这个依赖)文件放入到hive的lib目录中。


2. 配置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
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop102:3306/metastore?createDatabaseI fNotExist=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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>000000</value>
<description>password to use against metastore database</description>
</property>
</configuration>

配置完毕后,如果启动 hive 异常,可以重启hadoop,此时我们可以看到mysql中创建了相关的数据库。


3. 创建数据表

然后我们创建一个数据表

1
hive> create table student1(id int, name string);

这时我们在数据库中的TBLS数据表中会发现我们创建者条数据的记录,在DBS表中可以看到我们的数据库路径。