文章目录
一、hive
-
hive是基于Hadoop的一个客户端工具,可以用来进行数据提取转化加载(ETL ),部署时不一定放在集群管理节点中,可以放在某个节点上是大数据行业中数据仓库建设的工具之一。
-
hive不是分布式
-
Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。
-
hive是基于hadoop的。
hive的是以表的形式存在。 -
存储是放在hdfs上,数据文件在hdfs上,元数据在MySQL中
-
元数据:管理hive的数据,所有的表名,库名,都是存储在元数据中的
-
计算用的是mapreduce,
-
调度用的是yarn
-
查询语言用的是hive-sql。
-
sql解析器:使用mysql的驱动。
-
在查询的时候,将sql语言解析成mapreduce任务进行执行。
-
hive适用的场景:离线批处理,一般用于BI报表开发,相关数据T+1的分析。
hive与MySQL的区别
1)存储位置:
hive是基于hdfs的,hive的表数据对应到hdfs的目录下。
mysql是存在块设备或本地系统文件中。
2)数据更新
- hive在hive1版本之前不支持,hive1版本之后支持,但是默认不打开。需要修改事务以及配置文件。hive数据是没有索引的,更新非常消耗性能,适用于离线批处理,大规模复杂查询和计算。
- 数据库中的数据通常需要修改,支持更新操作
3)执行延迟
Hive 中执行是通过 MapReduce 来实现的而数据库通常有自己的执行引擎。由于hive是离线批处理,延迟比较高,MySQL延迟低
4)数据规模
hive数据规模取决于hdfs,可以支持大规模的数据,MySQL数据规模小
5)sql语句的不同
hive:类SQL 的查询语言 HQL,where后面不能跟子查询
MySQL:Sql语言,可以跟子查询
hive的存储格式
建表的时候要指定压缩格式,默认是textfile
- Textfile:普通文本文档类型。占用磁盘空间较大,但是读取效率高。使用这种方式,hive不会对数据进行切分。从而无法对数据进行并行操作。
- Rcfile:一般压缩,用的最多。占用磁盘空间相对小,读取效率性价比高。
- SequenceFile:是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。
二、使用
为了方便在任何目录下启动hive,修改配置文件
使配置文件生效
1.启动hive
修改配置文件后,在任意位置输入 hive,即可启动
2.创建数据库
创建库
create database 库名
切换到该数据库,可以看到表中没有表
3.建表
1)方法一:全部使用默认配置
CREATE TABLE `emp1`(
`id` string,
`name` string,
`job` string,
`mgr` string,
`hiredate` date,
`sal` double,
`comm` double,
`deptid` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’:每行以逗号作为分隔
查询可以看到表中没有数据
该目录下会有一个一db结尾的文件,它实际上是一个目录,里面存的是建的表
表名叫什么,里面的文件名就叫什么
将表格数据上传至该文件下
再次查询,由于hdfs数据规模大,要习惯在查询输出后面加上限制
hive是读时模式:当查询数据的时候才会校验数据格式,加载的时候忽略。
如果在该文件下上传其他表,查询,也会出现其他表的数据,尽管他的分隔符不是,
例如当前该目录下有两个数据
再次查询
2)方法二:指定建表目录
CREATE TABLE `emp`(
`id` string,
`name` string,
`job` string,
`mgr` string,
`hiredate` date,
`sal` double,
`comm` double,
`deptid` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' //列之间的分隔符。
LOCATION '/hivedata/';
创建一个目录
创建一个表,指定它的数据来源目录
将数据上传至hivedata目录下,查询
3)方法三:指定存储文件格式
- rcfile存储格式的表,不能直接加载数据。
- 只能通过其他表加载数据。
CREATE TABLE `emp_rc`(
`id` string,
`name` string,
`job` string,
`mgr` string,
`hiredate` date,
`sal` double,
`comm` double,
`deptid` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS rcfile;
将数据上传至默认配置下=》进行查询
会发现查询失败
既然不能直接加载数据,就将该数据删除,将其他表中的数据插入到该表中
- insert into table emp_rc select * from emp;
会发现该目录下有一个文件
再次查询,就会出现数据
默认在default队列中
可以指定队列
4)方法四:将查询结果放到创建的表中
5)方法五:复制表的结构,不加载数据
4.外部表
创建外部表
CREATE EXTERNAL TABLE `emp_ex`(
`id` string,
`name` string,
`job` string,
`mgr` string,
`hiredate` date,
`sal` double,
`comm` double,
`deptid` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
传入文件
查询
5.删除表
drop table 表名
可以看到内部表(普通表)文件和文件里的数据都没了
外部表只是表没了,hdfs的目录和目录下的文件还在
外部表和内部表的区别:
当删除外部表的时候,表会被删除,但是hdfs上的数据不会被删除。
普通表会把表和数据都删除。
两者都会将mysql中的元信息都删除。
三、在MySQL中查看元信息
java
java入门基础学习(一)
java入门基础学习(二)
java入门基础学习(三)
java入门基础学习(四)
java入门基础学习(五)
java入门基础学习(六)
java入门基础学习(七)
java入门基础学习(八)
java入门基础学习(九)
java入门基础学习(十)
java入门基础学习(十一)
java入门基础学习(十二)
java入门基础学习(十三)
java入门基础学习(十四)Maven Git
java总结,题目+笔记
java进阶之常见对象(一)
java进阶之常见对象(二)
java进阶之冒泡排序
java进阶之选择排序
java进阶之面向对象(封装)
java进阶之面向对象(代码块、继承)
java进阶之面向对象(多态、抽象、接口)
java进阶之匿名内部类、访问修饰符、包
java进阶之io流(字节流,字符流)
java应用一(反射的应用)
java应用二(配置文件、工具类)
java应用三(数据库索引、spring)
java应用四(连接池)
Linux
Linux基础一
Linux基础二
Mysql
mysql一
mysql二
mysql三
mysql四
java连接数据库
redis
redis一(缓存,redis简介)
redis二(单节点安装,桌面插件)
redis三(指令的使用)
redis四(java与redis的连接,基本指令在java中的操作)
redis五(练习)
redis七(持久化)
redis九(集群安装)
Hadoop
hadoop学习一
hadoop学习二
hadoop学习三
hadoop学习四
hadoop学习五
hadoop学习六
hadoop学习七
hadoop学习八
hadoop异常处理