首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Hive 整体介绍

Hive可以管理HDFS中的数据,可以通过SQL语句可以实现与MapReduce类似的同能,因为Hive底层的实现就是通过调度MapReduce来实现的,只是进行了包装,对用户不可见。         Hive对HDFS的支持只是在HDFS中创建了几层目录,正真的数据存在在MySql中,MYSQL中保存了Hive的表定义,用户不必关系MySQL中的定义,该层对用户不可见。Hive中的库在HDFS中对应一层目录,表在HDFS中亦对应一层目录,如果在对应的表目录下放置与表定义相匹配的数据,即可通过Hive实现对数据的可视化及查询等功能         综上所述,Hive实现了对HDFS的管理,通过MySQL实现了对HDFS数据的维度管理         Hive基本功能及概念             database             table             外部表,内部表,分区表         Hive安装             1. MySql的安装(密码修改,远程用户登陆权限修改)             2. Hive安装获取,修改配置文件(HADOOP_HOME的修改,MySQL的修改)             3. 启动HDFS和YARN(MapReduce),启动Hive         Hive基本语法:             1. 创建库:create database dbname             2. 创建表:create table tbname                 Hive操作:             1. Hive 命令行交互式             2. 运行HiveServer2服务,客户端 beeline 访问交互式运行             3. Beeline 脚本化运行                 3.1 直接在 命令行模式下 输入脚本命令执行(比较繁琐,容易出错,不好归档)                 3.2 单独保存SQL 命令到 文件,如etl.sql ,然后通过Beeline命令执行脚本         数据导入:             1. 本地数据导入到 Hive表 load data local inpath "" into table ..             2. HDFS导入数据到 Hive表 load data inpath "" into table ..             3. 直接在Hive表目录创建数据         Hive表类型:             1. 内部表: create table 表数据在表目录下,对表的删除会导致表目录下的数据丢失,需要定义表数据的分隔符。             2. 外部表: create external table 表目录下挂载表数据,表数据存储在其他HDFS目录上,需要定义表数据的分隔符。             3. 分区表:与创建内部表相同,需要定义分区字段及表数据的分隔符。在导入数据时需要分区字段,然后会在表目录下会按照分区字段自动生成分区表,同样也是按照目录来管理,每个分区都是单独目录,目录下挂载数据文件。             4. CTAS建表         HQL             1. 单行操作:array,contain等             2. 聚合操作:(max,count,sum)等             3. 内连接,外连接(左外,右外,全外)             4. 分组聚合 groupby             5. 查询 : 基本查询,条件查询,关联查询             6. 子查询:                 当前数据源来源于 另个数据执行的结果,即当前 table 为临时数据结果             7. 内置函数: 转换, 字符串, 函数                 转换:字符与整形,字符与时间,                 字符串:切割,合并,                 函数:contain,max/min,sum,             8. 复合类型                 map(key,value)指定字符分隔符与KV分隔符                 array(value)指定字符分隔符                 struct(name,value) 指定字符分割与nv分隔符             9. 窗口分析函数             10. Hive对Json的支持

01

hive基础总结(面试常用)

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 Metastore (hive元数据) Hive将元数据存储在数据库中,比如mysql ,derby.Hive中的元数据包括表的名称,表的列和分区及其属性,表的数据所在的目录 Hive数据存储在HDFS,大部分的查询、计算由mapreduce完成 Hive数据仓库于数据库的异同 (1)由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言, 再无类似之处。 (2)数据存储位置。 hdfs raw local fs (3)数据格式。 分隔符 (4)数据更新。hive读多写少。Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。 INSERT INTO … VALUES添加数据,使用UPDATE … SET修改数据 不支持的 HDFS 一次写入多次读取 (5) 执行。hive通过MapReduce来实现的 而数据库通常有自己的执行引擎。 (6)执行延迟。由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架 (7)可扩展性 (8)数据规模。 hive几种基本表类型:内部表、外部表、分区表、桶表 内部表(管理表)和外部表的区别: 创建表 外部表创建表的时候,不会移动数到数据仓库目录中(/user/hive/warehouse),只会记录表数据存放的路径 内部表会把数据复制或剪切到表的目录下 删除表 外部表在删除表的时候只会删除表的元数据信息不会删除表数据 内部表删除时会将元数据信息和表数据同时删除 表类型一、管理表或内部表Table Type: MANAGED_TABLE

03

sqoop的安装和使用[通俗易懂]

关系行数据库与非关系型数据库之间的数据同步 一、在不使用sqoop的情况下 Mysql–>hive 1.利用naivacat(工具)将数据库中的表导出(导出的时候要主要制表符/t) 2.利用WinSCP(工具)上传到linux指定的文件夹下 3.先在hive建表 create table 表名(idfa string) row format delimited fields terminated by ‘\t'” 4.hive -e “load data local inpath ‘t1.txt’ into table t1” (假设表里面有数据,须要truncate table hive表名。在运行4) truncate table t1;( 仅仅删除表数据) 或者hive -e “load data local inpath ‘t1.txt’ overwrite into table t1”; hive–>Mysql 1.hive -e “sql语句;>>name.txt” 导出在home/dev 2.然后在利用WinSCP(工具)下载到本地 二、在使用sqoop的情况下 1.解压sqoop,配置环境变量: 在/etc/profile中加入:(没有root权限是不能改动的,所以仅仅能在sqoop/bin路径下启动) export SQOOP_HOME/bin:PATH 配置完毕后要运行 source etc/profile 2. 解压mysql,将mysql-connector-java-5.1.24-bin.jar放到

02

一篇文章彻底明白Hive数据存储的各种模式

Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中。Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中   Hive的数据分为表数据和元数据,表数据是Hive中表格(table)具有的数据;而元数据是用来存储表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。下面分别来介绍。 一、Hive的数据存储   在让你真正明白什么是hive 博文中我们提到Hive是基于Hadoop分布式文件系统的,它的数据存储在Hadoop分布式文件系统中。Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。   Hive中主要包含以下几种数据模型:Table(表),External Table(外部表),Partition(分区),Bucket(桶)(本博客会专门写几篇博文来介绍分区和桶)。   1、表:Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据,这个目录可以通过${HIVE_HOME}/conf/hive-site.xml配置文件中的 hive.metastore.warehouse.dir属性来配置,这个属性默认的值是/user/hive/warehouse(这个目录在 HDFS上),我们可以根据实际的情况来修改这个配置。如果我有一个表wyp,那么在HDFS中会创建/user/hive/warehouse/wyp 目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse);wyp表所有的数据都存放在这个目录中。这个例外是外部表。   2、外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该外部表所指向的数据是不会被删除的,它只会删除外部表对应的元数据;而如果你要删除表,该表对应的所有数据包括元数据都会被删除。   3、分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比如wyp 表有dt和city两个分区,则对应dt=20131218,city=BJ对应表的目录为/user/hive/warehouse /dt=20131218/city=BJ,所有属于这个分区的数据都存放在这个目录中。   4、桶:对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。比如将wyp表id列分散至16个桶中,首先对id列的值计算hash,对应hash值为0和16的数据存储的HDFS目录为:/user /hive/warehouse/wyp/part-00000;而hash值为2的数据存储的HDFS 目录为:/user/hive/warehouse/wyp/part-00002。   来看下Hive数据抽象结构图

04
领券