一、 安装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.log
和metastore_db
这个就是Hive默认的元数据
4. 创建数据表
在Hive客户端中创建一个数据表,并数据表中插入数据1
2hive> 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
31001 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
3NULL NULL
NULL NULL
NULL NULL
这是因为我们在创建表时并未声明文件分隔符,所以我们重新创建数据表,并声明分隔符为’\t’1
hive> create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
之后重新导入后数据发现可以正常查询了。
3. 通过上传文件导入数据
现在我们再创建一个student1.txt1
2
31004 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表中可以看到我们的数据库路径。