Hive学习

Hive 简介

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。


使用Hive的原因

  • 操作接口采用类SQL语法,提供快速开发的能力
  • 避免了去写MapReduce,减少开发人员的学习成本
  • 扩展功能很方便

Hive的特性

  • 可扩展:Hive可以自由的扩展集群的规模,一般情况下不需要重启服务
  • 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数,就像SQL中的UDF
  • 容错性:良好的容错性,节点出现问题SQL仍可完成执行,分布式存储的优点

容错性的原因:MapRuduce的整个编配工作由主节点控制,一般每份mapper的输入数据会同时分发到多个节点形成多分副本,用于事务的失效处理,每个节点必须与主节点通信,表示自己工作正常。如果某节点失效或则工作异常,主节点将重启该节点或者将该节点移出可用机器池。
注:

  • 在任何时候,每个mapper和reducer间都不进行通信,每个节点只处理自己的事务,并且在本地分配的数据集上运算。

Hive与Hadoop的关系

Hadoop简介

Hive与Hadoop的关系


MapRuduce学习要点

  • 主节点控制MapReduce 的作业流程
  • MapReduce的作业可以分成map任务和reduce任务
  • map任务与reduce任务之间不做数据交流
  • 在map和reduce阶段中间有一个sort或combine阶段
  • 数据被重复存放在不同的机器上,以防某个机器失效
  • mapper和reducer传输的数据形式为key/value对

Hive命令

命令选项

  • -i: 初始化SQL文件
  • -e ‘quoted query string’: 运行引号内sql查询语句
  • -f filename: 从文件中运行sql语句
  • -S: 无声模式在互动的Shell,只有数据发出
  • –h: 查看应用的帮助文档
  • -hiveconf: 设置hive/hadoop的配置变量
HIVE_HOME/bin/hive -S -e ' select count(*) from c02_clickstat_fatdt1' > a.txt

HIVE_HOME/bin/hive -f /home/my/hive-script.sql

Hive中的连接操作

  • 只支持相等JOIN。
  • 多表连接当使用不同的列进行Join时,会产生多个MapReduce作业。
  • 最后的表的数据是从流中读取,而前面的会在内存中缓存,因此最好把最大的表放在最后。

排序

  • order by

跟传统的 sql 中的 order by 作用相同 ,对查询的结果做一次全局排序,因此无论有多少个 map,order by 的数据都会放到一个 reducer 中去处理,会消耗很多时间也浪费了资源。

  • sort by

在每一个reducer上都会做排序,保证了局部有序,但是不能保证所有数据都有序,可以为接下来的全局排序提高不少效率(做一次归并排序)

  • distribute by

控制map的输出在reducer上如何划分

select mid ,money,name from store distribute by mid sort by mid

mid相同的数据会被送到一个reducer上去处理(distribute by mid),然后在每一个reducer上会按照mid排序(sort by mid)


  • cluster by

功能就是distribute by 与 sort by的结合
select mid ,money,name from store cluster by mid

cluster by指定的列只能降序,不能指定asc,desc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章