11 | Hive是如何让MapReduce实现SQL操作的?
李智慧
该思维导图由 AI 生成,仅供参考
前面我们讲过,MapReduce 的出现大大简化了大数据编程的难度,使得大数据计算不再是高不可攀的技术圣殿,普通工程师也能使用 MapReduce 开发大数据程序。但是对于经常需要进行大数据计算的人,比如从事研究商业智能(BI)的数据分析师来说,他们通常使用 SQL 进行大数据分析和统计,MapReduce 编程还是有一定的门槛。而且如果每次统计和分析都开发相应的 MapReduce 程序,成本也确实太高了。那么有没有更简单的办法,可以直接将 SQL 运行在大数据平台上呢?
在给出答案前,我们先看看如何用 MapReduce 实现 SQL 数据分析。
MapReduce 实现 SQL 的原理
坚持学习到这里的同学一定还记得,我在专栏第 7 期留了一道思考题,对于常见的一条 SQL 分析语句,MapReduce 如何编程实现?
这是一条非常常见的 SQL 统计分析语句,统计不同年龄的用户访问不同网页的兴趣偏好,对于产品运营和设计很有价值。具体数据输入和执行结果请看下面的图示。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Hive是如何让MapReduce实现SQL操作的?本文深入探讨了Hive如何将SQL转化为可执行的MapReduce代码,从而实现SQL操作。首先,文章解释了MapReduce如何支持SQL数据分析,然后详细介绍了Hive的架构和实现原理,包括SQL语句处理、MapReduce执行计划生成以及join操作的实现。此外,还提到了其他大数据SQL引擎的发展和Hive在大数据应用中的重要作用。最后,鼓励读者借鉴Hive的技术特点,将不同技术嫁接产生创新,以及开发数据库的体验。整体而言,本文深入浅出地介绍了Hive在大数据领域的重要性和技术特点,对于想要了解Hive和大数据SQL操作的读者具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学大数据》,新⼈⾸单¥68
《从 0 开始学大数据》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(76)
- 最新
- 精选
- 李志博技术嫁接,我还真搞过2个,1个是selenium + 网上找的代码改本机host 实现 自动测试线上的每台机器的功能,另外1个是 java agent + jd-core (一个反编译软件的底层库)实现profile 监控同时能显示线上跑的真实的代码内容
作者回复: 赞
2018-11-22352 - 朱国伟李老师 在跟着学的过程中 基本上都是现学的 比如 hive https://cwiki.apache.org/confluence/display/Hive/GettingStarted 在学习课程的过程中 是不是先不用对涉及到的这些大数据技术 如hdfs yarn hive等去做深入了解 只需跑一下GettingStared即可 即有个概念
作者回复: 非常好的学习方法
2018-12-1520 - 贺爷李老师,我之前买过您的《大型网站技术架构案例》并学习过,我想问下,对于一个程序员说,技术功底应该达到什么程度才可以去接触、学习和实践架构方面得东西呢?
作者回复: 任何时候都可以接触、学习、实践架构方面的东西。但是即使被人称作资深架构师了,也不要忘了提升自己的技术功底。
2019-04-209 - 大数据技术与数仓package com.company.sparkcore import org.apache.log4j.{Level, Logger} import org.apache.spark.{SparkConf, SparkContext} /** * 使用Spark Core的算子实现简单的join操作 */ object JoinBySpark { def main(args: Array[String]): Unit = { val conf = new SparkConf() .setAppName(JoinBySpark.getClass.getSimpleName) .setMaster("local") Logger.getLogger("org.apache.spark").setLevel(Level.OFF) Logger.getLogger("org.apache.hadoop").setLevel(Level.OFF) val sc = new SparkContext(conf) //通过文本文件创建RDD val page_viewRDD = sc.textFile("file:///e:/page_view.txt") val pv_usersRDD = sc.textFile("file:///e:/pv_users.txt") //提取需要的字段,组合成形如(userid,pageid)的RDD val userid_pageidRDD = page_viewRDD.map(_.split(",")).map(viewData => (viewData(1), viewData(0))) //提取需要的字段,组合成形如(userid,age)的RDD val userid_ageRDD = pv_usersRDD.map(_.split(",")).map(userData => (userData(0), userData(1))) //对上述的两个RDD执行Join操作,形成形如(userid,(pageid,age))的RDD val userid_pageid_ageRDD = userid_pageidRDD.join(userid_ageRDD) userid_pageid_ageRDD.collect().foreach(println) //对join操作形成的RDD提取pageid、age字段 val joinRes = userid_pageid_ageRDD.map(upaData => (upaData._2._1, upaData._2._2)) //打印输出结果 // (1,32) // (1,25) // (2,25) joinRes.collect().foreach(println) } }
作者回复: 赞
2018-11-228 - 不似旧日大数据框架可以执行sql,能执行sql的框架有hadoop的hive spark的sparkSQL,sparkSQL的执行速度要快于hive, 由于大数据框架能执行sql那么是不是可以把这个框架当做数据库来看待?java就能调用大数据服务操作数据了?
作者回复: 可以呀,hive就有jdbc供java调用
2019-01-1937 - shawn李老师,“生成这些函数的 DAG(有向无环图)”,为什么是有向无环图,您可以说说原因嘛。
作者回复: 执行计划就是一个dag,根据依赖关系顺序执行,所以有向,如果有环,就会陷入死循环,所以无环。
2018-11-225 - rains拍照软件和图像编辑美化软件结合起来,变成萌拍,美颜相机
作者回复: 是的
2018-11-224 - 一“在我们工作中也可以借鉴一下这种将两种技术嫁接到一起产生极大应用创新性的手段,说不定下一个做出类似Hive这种具有巨大应用价值的产品的人就是你!”老师的这句话好振奋人心啊!
作者回复: 加油~
2019-04-183 - yang智能手机就是嘛! 以前的手机只能打电话,现在可以拍照、打电话、录音,也可以远程操控家电……等等 把操控其他事物的技术嫁接到手机上……
作者回复: 😁
2018-11-233 - Flychen小白一个,想体验下hive中跑SQL,有什么在线环境吗
作者回复: 阿里云E-MapReduce
2021-08-061
收起评论