初触数据仓库Hive

什么是Hive?
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将SQL转换为MapReduce程序。
Hive和Hadoop之间的关系图如下:
333
为什么要使用Hive?
1.操作接口采用类SQL语法,提供快速开发的能力
2.避免了去写MapReduce,减少开发人员的学习成本
3.扩展功能很方便
Hive的特点:
1.可扩展,Hive可以自由的扩展集群的规模,一般情况下不需要重启服务
2.延展性,Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
3.容错,良好的容错性,节点出现问题SQL仍可完成执行
Hive参数说明:
hive.exec.max.created.files
•说明:所有hive运行的map与reduce任务可以产生的文件的和
•默认值:100000
hive.exec.dynamic.partition
•说明:是否为自动分区
•默认值:false
hive.mapred.reduce.tasks.speculative.execution
•说明:是否打开推测执行
•默认值:true
hive.input.format
•说明:Hive默认的input format
•默认值: org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
•如果有问题可以使用org.apache.hadoop.hive.ql.io.HiveInputFormat
hive.exec.counters.pull.interval
•说明:Hive与JobTracker拉取counter信息的时间
•默认值:1000ms
hive.script.recordreader
•说明:使用脚本时默认的读取类
•默认值: org.apache.hadoop.hive.ql.exec.TextRecordReader
hive.script.recordwriter
•说明:使用脚本时默认的数据写入类
•默认值: org.apache.hadoop.hive.ql.exec.TextRecordWriter
hive.mapjoin.check.memory.rows
•说明: 内存里可以存储数据的行数
•默认值: 100000
hive.mapjoin.smalltable.filesize
•说明:输入小表的文件大小的阀值,如果小于该值,就采用普通的join
•默认值: 25000000
hive.auto.convert.join
•说明:是不是依据输入文件的大小,将Join转成普通的Map Join
•默认值: false
hive.mapjoin.followby.gby.localtask.max.memory.usage
•说明:map join做group by 操作时,可以使用多大的内存来存储数据,如果数据太大,则不会保存在内存里
•默认值:0.55
hive.mapjoin.localtask.max.memory.usage
•说明:本地任务可以使用内存的百分比
•默认值: 0.90
hive.heartbeat.interval
•说明:在进行MapJoin与过滤操作时,发送心跳的时间
•默认值1000
hive.merge.size.per.task
•说明: 合并后文件的大小
•默认值: 256000000
hive.mergejob.maponly
•说明: 在只有Map任务的时候 合并输出结果
•默认值: true
hive.merge.mapredfiles
•默认值: 在作业结束的时候是否合并小文件
•说明: false
hive.merge.mapfiles
•说明:Map-Only Job是否合并小文件
•默认值:true
hive.hwi.listen.host
•说明:Hive UI 默认的host
•默认值:0.0.0.0
hive.hwi.listen.port
•说明:Ui监听端口
•默认值:9999
hive.exec.parallel.thread.number
•说明:hive可以并行处理Job的线程数
•默认值:8
hive.exec.parallel
•说明:是否并行提交任务
•默认值:false
hive.exec.compress.output
•说明:输出使用压缩
•默认值: false
hive.mapred.mode
•说明: MapReduce的操作的限制模式,操作的运行在该模式下没有什么限制
•默认值: nonstrict
hive.join.cache.size
•说明: join操作时,可以存在内存里的条数
•默认值: 25000
hive.mapjoin.cache.numrows
•说明: mapjoin 存在内存里的数据量
•默认值:25000
hive.join.emit.interval
•说明: 有连接时Hive在输出前,缓存的时间
•默认值: 1000
hive.optimize.groupby
•说明:在做分组统计时,是否使用bucket table
•默认值: true
hive.fileformat.check
•说明:是否检测文件输入格式
•默认值:true
hive.metastore.client.connect.retry.delay
•说明: client 连接失败时,retry的时间间隔
•默认值:1秒
hive.metastore.client.socket.timeout
•说明:  Client socket 的超时时间
•默认值:20秒
mapred.reduce.tasks
•默认值:-1
•说明:每个任务reduce的默认值
 -1 代表自动根据作业的情况来设置reduce的值
hive.exec.reducers.bytes.per.reducer
•默认值: 1000000000 (1G)
•说明:每个reduce的接受的数据量
    如果送到reduce的数据为10G,那么将生成10个reduce任务
hive.exec.reducers.max
•默认值:999
•说明: reduce的最大个数
hive.exec.reducers.max
•默认值:999
•说明: reduce的最大个数
hive.metastore.warehouse.dir
•默认值:/user/hive/warehouse
•说明: 默认的数据库存放位置
hive.default.fileformat
•默认值:TextFile
•说明: 默认的fileformat
hive.map.aggr
•默认值:true
•说明: Map端聚合,相当于combiner
hive.exec.max.dynamic.partitions.pernode
•默认值:100
•说明:每个任务节点可以产生的最大的分区数
hive.exec.max.dynamic.partitions
•默认值:1000
•说明: 默认的可以创建的分区数
hive.metastore.server.max.threads
•默认值:100000
•说明: metastore默认的最大的处理线程数
hive.metastore.server.min.threads
•默认值:200
•说明: metastore默认的最小的处理线程数
Hive概念:
•用户接口:用户访问Hive的入口
•元数据:Hive的用户信息与表的MetaData
•解释器:分析翻译HQL的组件
•编译器:编译HQL的组件
•优化器:优化HQL的组件
Hive架构和基本组成图:
333
基本组成
•用户接口,包括 CLI,JDBC/ODBC,WebUI
•元数据存储,通常是存储在关系数据库如 mysql, derby 中
•解释器、编译器、优化器、执行器
•Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算
各组件的基本功能
•用户接口主要有三个:CLI,JDBC/ODBC和 WebUI
•CLI,即Shell命令行
•JDBC/ODBC 是 Hive 的JAVA,与使用传统数据库JDBC的方式类似
•WebGUI是通过浏览器访问 Hive
•Hive 将元数据存储在数据库中,目前只支持 mysql、derby,下一版本会支持更多的数据库。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
•解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行
•Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)
Metastore
•Metastore是系统目录(catalog)用于保存Hive中所存储的表的元数据(metadata)信息
•Metastore是Hive被用作传统数据库解决方案(如oracle和db2)时区别其它类似系统的一个特征
•Metastore包含如下的部分:
•Database 是表(table)的名字空间。默认的数据库(database)名为‘default’
•Table 表(table)的原数据包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息
•Partition 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schema evolution)
Compiler
•Driver调用编译器(compiler)处理HiveQL字串,这些字串可能是一条DDL、DML或查询语句
•编译器将字符串转化为策略(plan)
•策略仅由元数据操作和HDFS操作组成,元数据操作只包含DDL语句,HDFS操作只包含LOAD语句
•对插入和查询而言,策略由map-reduce任务中的具有方向的非循环图(directedacyclic graph,DAG)组成。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>