Hive基础
公司的数据处理方式(四种主流):MR、HIVE、HBase、Spark....
非主流:pig、storm、mongodb、mr script.....
流程:
1.使用MR开发:编写MR ,实现mapper、reducer、main在hadoop上运行
2.使用hive开发:
2.1使用内置函数:在hive的CLI模式下写HQL,自动转成MR,在hadoop上运行
2.2使用UDF自定义函数:写class打jar包,在hive的CLI下添加自定义函数,在CLI模式下写HQL,自动转成MR,在hadoop上运行
1.1:hive知识点总结:
Hive是建立在Hadoop上的数据仓库基础构架(HDFS和MR),它提供了一系列工具可以用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模的数据机制。
Hive就是在Hadoop上架了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用SQL来完成海量数据的统计和分析,而不必使用编程语言开发MapReduce那么麻烦
Hive是基于HDFS存储、基于MapReduce计算,提供HQL查询的数据仓库工具。Hive是一个很开放的系统,很多内容都支持用户定制。
HQL:使用语言:QL语言(类SQL查询语言)。能处理内建的mapper和reducer无法完成的复杂分析工作。
现在虽然有很多SQL ON Hadoop的解决方案,像Spark SQL、Impala、Presto等等,但就目前来看,在基于Hadoop的大数据分析平台、数据仓库中,Hive仍然是不可替代的角色。尽管它的相应延迟大,尽管它启动MapReduce的时间相当长,但是它太方便、功能太强大了,做离线批量计算、ad-hoc查询甚至是实现数据挖掘算法,而且,和HBase、Spark都能整合使用。
1.Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后再Hadoop执行。
2.Hive的表其实是HDFS的目录(/文件夹),按表名把文件夹区分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse.
例如:创建logs数据库,HDFS上的存储地址就是/user/hive/warehouse/logs.db
例如:创建day表,HDFS上的存储地址就是/user/hive/warehouse/logs.db/day/
1.2:Hive的系统架构
1.用户接口主要有三个:CLI,JdbC/ODBC,WebUI
(1)CLI,即shell命令行。
(2)JDBC/ODBC,是Hive的Java接口,与使用传统数据库JDBC方式类似。
(3)WebUI,是通过浏览访问Hive。
2.Hive将元数据存储在数据库(metastore)中,目前只支持MySQL,derby。(Hive中的元数据包括表名,表列,和分区及其属性,表属性,表的数据所在目录等)
3.解析器、编译器、优化器、执行器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在HDFS中,并在随后有MapReducer调用执行。
4.Hive的数据存储在HDFS中,大部分的查询由MapReducer完成(包括含*的查询,比如select * from table不会生成MapReducer任务