Hive专栏 | ||
---|---|---|
上一篇 | 主目录 | 下一篇 |
【前言】
安装部署Hive,依赖环境:hadoop+mysql
1. 上传压缩包到服务器
下载 apache-hive-2.3.2-bin.tar.gz,通过Xftp上传到hadoop@hadoop05:~/
2. 解压到文件夹apps
tar -zxvf apache-hive-2.3.2-bin.tar.gz apps/
3. 修改配置文件
在/home/hadoop/apps/apache-hive-2.3.2-bin/conf/文件夹中
- hive-site.xml(没有,需要touch创建一个):
外置mysql数据库,使用mysql数据库来存储hive的元数据
touch hive-site.xml
在文件中写入:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hivedb?useSSL=true&createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
<!-- 如果 mysql 和 hive 在同一个服务器节点,那么请更改 hadoop02 位 localhost -->
</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>123456</value>
<description>password to use against metastore database</description>
</property>
【注意事项】:
- 【& amp;】在xml文件中对应&,如果不写【& amp;】而直接写&,会报如下错误:
- 写上useSSL=true是因为在高版本数据库中需要指定ssl的值。不然会报如下错误:
将jdbc驱动包放到lib文件夹中:
4. 配置环境变量
在hadoop05的家目录中.bashrc文件中加入:
export HIVE_HOME=/home/hadoop/apps/apache-hive-2.3.2-bin
export PATH=$PATH:$HIVE_HOME/bin
执行source .bashrc重新加载配置文件
5. 验证启动
在hadoop05输入:
schematool -dbType mysql -initSchema
说明成功
此时在数据库中会创建一个数据库hivedb,其中有57张表,用来存储元数据信息:
执行
hive
6. 使用hive
- 创建数据库
create database databasename;
- 使用数据库
use databasename;
- 创建表并指定文件中的行、列分隔符
create table student(name string,age int) row format delimited fields terminated by ",";//换行默认是'/n'
create table student(name string,age int) row format delimited fields terminated by ',' lines terminated by '\n';
- 导入数据
load data local inpath "/home/hadoop/student.txt" into table student;
- local表示本地路径
由于没有指定存储的仓库,将会把创建的数据库、表等数据存储到指定的仓库路径下:/user/hive/warehouse/temp_db.db/student(hadoop-hdfs 的目录而不是本地目录):
- 导入数据还可以直接将本地文件上传到对应的表的目录之下而不是使用load的方式:
hadoop fs -put student.txt /user/hive/warehouse/temp_db.db/student/
5. 查询数据
以上是从文件中读取数据
以下是使用MapReduce来实现HQL语句:
6. 查看表的 详细创建信息
show create table student;
【注】
创建数据库,数据表的同时会在mysql数据库中的hivedb(在3hive-site.xml配置文件中的jdbc:mysql://localhost:3306/hivedb?useSSL=true&createDatabaseIfNotExist=true处指定名称)中的对应表中添加元数据(描述数据的数据):
- 如执行语句create database temp_db;时在DBS表中添加一条记录数据:
- 执行语句create table student(name string,age int) row format delimited fields terminated by ‘,’ lines terminated by ‘\n’;时在DBLS表中添加一条记录数据:
附录
当配置Hadoop的HA集群之后,hdfs分布式文件系统上面的数据都没了。Hive在mysql中的元数据信息与新的HA环境不一致,需要重新安装配置Hive。
在原来的基础上
方案一:修改hive-site.xml
文件中的连接到mysql数据库的数据库名为hivedb_ha
,并重新格式化Hive
方案二:不修改hive-site.xml
文件中的连接到mysql数据库的数据库名,从mysql中删除hivedb
这张表,并重新格式化Hive
格式化Hive的命令为:schematool -dbType mysql -initSchema