29.Hive有哪些保存元数据的方式,都有什么特点?
hive有哪些保存元数据的方式,各有什么特点。
1.内存数据库derby,安装小,但是数据存在内存,不稳定
2.mysql数据库,数据存储模式可以自己设置,持久化好,查看方便
Hive元数据存储的三种模式
1)、内嵌模式:将元数据保存在本地内嵌的derby数据库中,内嵌的derby数据库每次只能访问一个数据文件,也就意味着它不支持多会话连接。
2). 本地模式:将元数据保存在本地独立的数据库中(一般是mysql),这可以支持多会话连接。
3). 远程模式:把元数据保存在远程独立的mysql数据库中,避免每个客户端都去安装mysql数据库
三种配置方式区别
1.内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
2.本地元存储和远程元存储都采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。
3.本地元存储和远程元存储的区别是:本地元存储不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程元存储的metastore服务和hive运行在不同的进程
Metadata、Metastore作用
metadata即元数据。元数据包含用Hive创建的database、tabel等的元信息。
元数据存储在关系型数据库中。如Derby、MySQL等。
**Metastore的作用是:**客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。
HIve内部表和外部表的区别,以及外部表为什么不删除数据
创建表时:创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径, 不对数据的位置做任何改变。
删除表时:在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
1.未被external修饰的是内部表【managed table】,被external修饰的为外部表【external table】。
2.内部表数据由Hive自身管理,外部表数据由HDFS管理。
4.删除内部表会直接删除元数据【metadata】及存储数据,删除外部表仅仅删除元数据,HDFS上的文件不会被删除。
5.对内部表的修改会直接同步到元数据,而对外部表的表结构和分区进行修改,则需要修改【MSCK REPAIR TABLE table_name】
1.Hive row_number,rank两个函数的区别
2.Hive窗口函数怎么设置窗口大小
————————
select city,year,taxes,
sum(money) over() as sample1,–所有行相加
sum(money) over(partition by city) as sample2,–按city分组,组内数据相加
sum(money) over(partition by city order by year) as sample3,–按city分组,组内数据累加
sum(money) over(partition by city order by year rows between UNBOUNDED PRECEDING and current row ) as sample4 ,–和sample3一样,由起点到当前行的聚合
sum(money) over(partition by city order by year rows between 1 PRECEDING and current row) as sample5, --当前行和前面一行做聚合
sum(money) over(partition by city order by year rows between 1 PRECEDING and 1 FOLLOWING ) as sample6,–当前行和前边一行及后面一行
sum(money) over(partition by city order by year rows between current row and UNBOUNDED FOLLOWING ) as sample7 --当前行及后面所有行
from business;
————————
3.Hive order by,sort by,distribute by,cluster by 区别
4.Hive map,reduce数怎么设置
————————————————
一、概述
1.通常情况下,作业会通过 input 的目录产生一个或者多个 map 任务。主要的决定因素有:input 的文件总个数,input 的文件大小,集群设置的文件块大小。
2.是不是 map 数越多越好?答案是否定的。如果一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个 map 任务来完成,而一个 map 任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。而且,同时可执行的 map 数是受限的。
3.是不是保证每个 map 处理接近 128m 的文件块,就高枕无忧了?答案也是不一定。比如有一个 127m 的文件,正常会用一个 map 去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果 map 处理的逻辑比较复杂,用一个 map任务去做,肯定也比较耗时。
针对上面的问题 2 和 3,我们需要采取两种方式来解决:即减少 map 数和增