学网站开发 优帮云,弄一个微信小程序多少钱,asp程序设计做网站,自己建设网站引流什么是Hive
hive是基于Hadoop的一个数据仓库工具#xff0c;可以将结构化数据映射为一张表。 hive支持使用sql语法对存储的表进行查询 #xff08;本质上是把sql转成mapreduce的任务执行#xff09;
Hive有三个特点#xff1a;
hive所存储的数据是放在HDFS文件系统中的h…什么是Hive
hive是基于Hadoop的一个数据仓库工具可以将结构化数据映射为一张表。 hive支持使用sql语法对存储的表进行查询 本质上是把sql转成mapreduce的任务执行
Hive有三个特点
hive所存储的数据是放在HDFS文件系统中的hive的底层实现是mapreduce这些任务是运行在Yarn上的
如何构建Hive数据仓库
什么是数据仓库
官方定义数据仓库是面向主题的、集成的、不可更新的、随时间的变化而不断变化的这些特点决定了数据仓库的系统设计不能采用同开发传统的OLTP数据库一样的设计方法。
1安装hive 常规配置这里不记录安装过程
唯一需要注意的地方是有一个hive.metastroe.dirname属性需要配置 配置的值是hive元数据的存储路径一般为hdfs文件系统的路径。
安装完成后需要在mysql中建立配置中指定的数据库并初始化Hive源数据库
2安装完成之后就可以启动hive
Hive数据仓库的储存方式
Hive本身是没有专门的数据存储格式也没有为数据建立索引只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中 。
Hive主要有四种数据模型
Table(表)External Table(外部表)Partition(分区)Bucket(桶)
1表的概念和关系型数据库的表很像只不过hive中的表的本质是结构化数据存储在hdfs文件系统的目录中。这个目录就是前文着重要求的metastore的位置文件就是存在那里的。
2外部表顾名思义就是数据不存放在所属目录中而是存放在别处。
3分区这个很重要我觉得分区的存在就是数据仓库与关系型数据库最大的区别表的每一个分区对应表下的相应目录所有分区的数据都是存储在对应的目录中。 4桶对指定的列计算其hash根据hash值切分数据目的是为了并行每一个桶对应一个文件(注意和分区的区别)。
Hive的元数据
Hive的元数据一般都是放在mysql中的这样的原因是因为Hive的元数据需要不断的更新、修改而HDFS系统中的文件是多读少改的不能将Hive的元数据存储在HDFS中。
hive数据的导入导出
导入
导入的方式有两种
从本地导入数据从HDFS导入数据
1从本地向hive导入数据 语法
load data local
inpath /opt/dataaplace/...
(overwrite) into table tablename
partition (partitionfield xxx);load data表示导入数据
local表示从本地加载数据到hive表否则从HDFS加载数据到hive表
partition …表示指定导入数据的分区字段
overwrite表示覆盖写入如果没有则是追加写入
例子
load data local
inpath /opt/data/StudentId.txt
overwrite into table Student;(2) 加载HDFS文件到hive中 语法
load data
inpath /root/data/...
(overwrite) into table tablename
partition (partitionfield xxx);不加local默认从hdfs中导入数据
hive创建表
create table tablename
(
id int,
name string
)
row format delimited fields terminated by ,;前半部分和mysql的建表语句一样后半部分是指定表的分隔符。
插入数据
insert into table tablename values(1,zhangsan),(2,lisi);insert into以追加数据的方式插入到表
insert overwrite into table tablename values(1,zhangsan),(2,lisi);加了overwrite 则是覆盖原来的表然后写入
根据查询结果覆盖写入
insert overwrite table tablename values(3,wangwu)
select id,name from tablename where id 1;
创建表时通过Location指定加载数据路径
create table tablename(id int, name string
)
row format delimited fields terminated by \t
location /root/hive/wirehouse/...;
location 指定的是hdfs中的路径
数据导出
参考博客添加链接描述
# 1将查询的结果导出到本地只能overwrite不能into否则会报错
insert overwrite local directory /opt/module/hive/datas/export/student select * from student;# 2将查询的结果格式化导出到本地所有的insert语句都会跑MR
insert overwrite local directory /opt/module/hive/datas/export/student1 ROW FORMAT DELIMITED FIELDS TERMINATED BY \tselect * from student;# 3将查询的结果导出到HDFS上(没有local)是复制原来的文件还在
insert overwrite directory /user/qinjl/student2ROW FORMAT DELIMITED FIELDS TERMINATED BY \t select * from student;注意insert 导出导出的目录不用自己提前创建hive会帮我们自动创建但是由于是overwrite所以导出路径一定要写具体否则很可能会误删数据。
Hadoop命令也可以导出数据到本地 dfs -get /user/hive/warehouse/student/student.txt/opt/module/hive/datas/export/student3.txt;Hive Shell 命令导出
hive_dir/bin/hive -e select * from ods.order_info;
/opt/module/datas/order_info.txthive表也可以通过export 导入到hdfs上
export table ods.user_info to /user/hive/warehouse/user_info;