hive数据仓库基本使用

153 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情

前言

hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。

以上是百度上对hive的介绍。

简单来说,hive并不是一个数据库它是数据仓库,它的底部存储的是文件,通过文件来映射成一张表它将用户编写的SQL语句转换成MR程序运行实时性低延迟高,不适合做实时查询。 由于Hive在查询数据的时候无索引,需要扫描整个表, 而且MR框架也是比较复杂的,所以延迟会比较高。这也意味着,hive在对实时性要求不高,适合做大量数据的报表数据。

安装hive

步骤:

  1. 解压hive包到/usr/local/src目录。重命名

  2. 配置hive环境变量

  3. 进入到hive下的conf目录下复制 hive-env.sh.template模板,输入:cp hive-env.sh.template hive-env.sh

  4. vi编辑器打开hive-env.sh,vi hive-env.sh,在该文件中追加以下路径,完成后保存返回。

export JAVA_HOME=/usr/local/src/jdk
export HADOOP_HOME=/usr/local/src/hadoop
export HIVE_HOME=/usr/local/src/hive
export HIVE_CONF_DIR=/opt/soft/hive/conf
export SPARK_HOME=/opt/soft/spark
  1. 复制hive-default.xml.template模板,输入:cp hive-default.xml.template hive-site.xm,并使用vi编辑器打开该文件,修改以下配置:
   4个核心配置
   
 <property>
	<name>javax.jdo.option.ConnectionURL</name> 			
	<value>jdbc:mysql://localhost:3306/myhive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8</value>
 </property>
<property>
	<name>javax.jdo.option.ConnectionDriverName</name>
	<value>com.mysql.jdbc.Driver</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionUserName</name>
	<value>root</value>
</property>
<property>
	<name>javax.jdo.option.ConnectionPassword</name>
	<value>123456</value>
</property>

               3个路径配置(非必须,有时报错才加入)
<property>
	<name>hive.querylog.location</name>
	<value>/opt/soft/hive/tmp</value>
</property>
<property>
	<name>hive.exec.local.scratchdir</name>
	<value>/opt/soft/hive/tmp</value>
</property>
<property>
	<name>hive.downloaded.resources.dir</name>
	<value>/opt/soft/hive/tmp</value>
</property>
  1. 将java连接mysql的驱动包放入hive的lib下 cp mysql-connector-java-5.1.39.jar /usr/local/src/lib/

  2. 初始化hive元数据: schematool -dbType mysql -initSchema

  3. 直接输入hive可以进入Hive的命令行(先启动hadoop,否则无法启动hive)

基本使用

常用指令

命令作用
show databases;查看所有数据库
create database 数据库名;创建数据库
use 数据库名;使用指定数据库
drop database 数据库名;删除数据库
show tables;查看某个数据库下的所有表

创建表

我们除了要写明字段名和字段类型,还要写表的分隔字段以及保存格式

 1)语法:
       create table 表名(
           列名 类型,列名 类型,....
       ) COMMENT '表的声明'
       (partitioned by.....)------分区 
       (clustered by.....)------分桶 
       (sorted by.....)------排序 
       (location path)----------数据的导入位置
       row format delimited fields terminated by ',' )----------行格式分隔字段以“,”结尾
       lines terminated by '\n')----------以“\n”结尾的行
       stored as textfile;)----------文件形式保存
 
 2) 查看hive表结构命令
     desc 表名;

表的类型

create table hivetest_1----------默认创建管理表(内部表)
create external table hivetest_2----------创建外部表
管理表:在删除表的时候,会连带着把源数据也给删了:一般用于临时业务,且总表还在
外部表:在删除表的时候,不会删除表所在的源数据
注:创建表的时候如果使用location的方式,一定要注意使用external,建立外部表,否则,当你把    表删了的时候,连带着location的数据也给删了。

数据导入

将数据加载到hive中的表里面(数据文件仍然在hdfs中,hive表中是不会存储数据的,只是和hdfs上的文件建立了某种关联),加载数据可以从hdfs中加载,也可以从本地加载,不管哪一种,内部表都会将该文件放入hdfs中的hive目录中管理。

本地加载: load data local inpath '本地路径'overwrite into table tableName;

hdfs加载: load data inpath 'hdfs文件路径'overwrite into table tableName;

案例

案例1:把stu表数据插入stu2中: insert overweite table stu2 select * from stu;

案例2:通过sql命令对该文件进行分析汇总统计 select city,count(*) from tb_movie group by city;

案例3:统计各个城市下的票房总额前三名: select city,sum(sale_money) as zong from tb_movie group by city order by zong desc limit 3;