hive 的使用,内外部表的区别,分区作用, UDF 和 Hive 优化

(1)hive的使用:仓库,工具

(2)内部表:加载数据到hive所在的hdfs目录,删除时,元数据文件都删除

外部表:不加载数据到Hive所在的hdfs目录,删除时,只删除表结构

(3)分区作用:防止数据倾斜

(4)UDF函数:用户自定义的函数(主要解决格式,计算问题),需要继承UDF类



class TestUDFHive extends UDF{ public String evalut(String str){ try{ return "hello" + str }catch(Exception e){ return str + "error" } } }
class TestUDFHive extends UDF{ public String evalut(String str){ try{ return "hello" + str }catch(Exception e){ return str + "error" } } }



(5)Hive优化:看做mapreduce处理

排序优化:sort by效率高于order by

分区:使用静态分区(statu_date="20160516",location="beijing"),每个分区对应hdfs上的一个目录,减少job和task数量;

使用表连接操作,解决group by数据倾斜问题

设置hive.groupby.skewindata=true,那么hive会自动负载均衡,叫文件合并成大文件


常用数据导入数据库的方法有哪些?导入到什么数据库?

eg:将Hive统计分析结果导入到MySQL数据库表中——sqoop操作

可以使用flume/FTP/Kettle/DataX。。。

业务量有多大?有多少行数据??

根据业务自行定义。。。。。

hive跟hbase的区别?

共同点:

1.hbase 与 hive 都是架构在hadoop之上的。都是用hadoop作为底层存储

区别:

2.Hive是建立在Hadoop之上为了减少MapReduce Jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目

3.想想你在操作RMDB数据库,如果全表扫描,就用Hive+Hadoop/Spark/flink,如果是索引访问,就用HBase+Hadoop/Spark/Flink

4.Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。

5.Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。

6.hive是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作

7.hbase是列存储

8.hdfs作为底层存储,hdfs是存放文件的系统,而Hbase负责组织文件

9.hive需要到hdfs存储文件,需要用到MapReduce计算框架

Hive有哪些方式存储元数据,各有哪些有点?

三种:内存数据库 derby—小,不常用。

本地mysql/常用远程段Mysql

Hive内部表与外部表的区别

Hive创建内部表时,会将数据移动到数据仓库指向的路径,若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据,这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。。

Hive底层与数据库交互原理

hive有一套自己的sql解析引擎,称作 metastore ,存储在mysql或者derby数据库中,可以将sql语句转化为mapreducejob任务执行

Hive如何调优

  1. 底层是MapReduce,所以可以说是MapReduce优化
  2. 小文件合并成大文件
  3. Reduce数据在代码中介于节点数*reduceTask的最大数量的0.95倍到1.75倍
  4. 写一个UDF函数,在建表的时候制定好分区
  5. 配置文件中,打开在 map 端的合并
  6. 在库表设计的时候,尽量考虑rowkey 和 columnfamily的特性
  7. 进行hbase集群的调优(参考hbase调优)

Hive中德meta store用来做什么的?

metastore是一套映射工具,将sql语句转换成对应的job任务区进行执行