大数据不就是写SQL吗?
应届生小祖参加了个需求分析会回来后跟我说被产品怼了一句:
"不就是写SQL吗,要那么久吗"
我去,欺负我小弟,这我肯定不能忍呀,于是我写了一篇文章发在了公司的wiki
贴出来给大家看看,省略了一些敏感的内容。当然内部版言辞也会温和一点,嘻嘻
在哪里写SQL?
这个问题高级点的问法是用哪种SQL引擎?
SparkSQL、Hive、Phoenix、Drill、Impala、Presto、Druid、Kylin (这里的SQL引擎是广义的,大家不必钻牛角尖)
我用一句话概括下这几个东西,先不管你们现在看不看得懂:
- Hive:把sql解析后用MapReduce跑
- SparkSQL:把sql解析后用Spark跑,比hive快点
- Phoenix:一个绕过了MapReduce运行在HBase上的SQL框架
- Drill/Impala/Presto 交互式查询,都是类似google Dremel的东西,区别这里就不说了
- Druid/Kylin olap预计算系统
这就涉及到更多的问题了,对这些组件不熟悉的同学可能调研过程就得花上一个多月。
比如需求是实时计算还是离线分析?
数据是增量数据还是静态数据?
数据量有多大?
能容忍多长的响应时间?
总之,功能、性能、稳定性、运维难度、开发难度这些都是要考虑的
对哪里的数据执行SQL?
你以为选完引擎就可以开写了?too naive!
上面提到的大部分工具都仅仅是查询引擎,存储呢?
“啥,为啥还要管存储?”
不管存储,那是要把PB级的数据存在mysql是吧...
关系型数据库像mysql这种,查询引擎和存储是紧耦合的,这其实是有助于优化性能的,你不能把它们拆分开来。
而大数据系统SQL引擎一般都是独立于数据存储系统,获得了更大的灵活性。这都是出于数据量和性能的考虑。
这涉及到的问题就更多了。先要搞清楚引擎支持对接哪些存储,怎么存查询起来方便高效。
可以对接的持久化存储我截个图,感受一下(这还只是一小部分)
用哪种语法写SQL?
你以为存储和查询搞定就可以开写了?你以为全天下的sql都是一样的?并不是!
并不是所有的引擎都支持join;
并不是所有的distinct都是精准计算的;
并不是所有的引擎都支持limit分页;
还有,如果处理复杂的场景经常会需要自定义sql方法,那如何自定义呢,写代码呀。
举几个简单而常见的栗子:
见过这样的sql吗?
select `user`["user_id"] from tbl_test ;
见过这种操作吗?
insert overwrite table tbl_test select * from tbl_test where id>0;
卧槽,这不会锁死吗?hive里不会,但是不建议这样做。
还能这么写
from tbl_test insert overwrite table tbl_test select * where id>0;
怎么用更高效的方式写SQL?
好了,全都搞定了,终于可以开始愉快地写SQL了。
写SQL的过程我用小祖刚来公司时的一句话来总结:
“卧槽,这条SQL有100多行!”
事实表,维表的数据各种join反复join,这还不算完还要再join不同时间的数据,还要$#@%^$#^...
不说了,写过的人一定知道有多恶心
(此处省略100多行字)
终于写完了,千辛万苦来到这一步,满心欢喜敲下回车...
时间过去1分钟...
10分钟...
30分钟...
1小时...
2小时...
......
别等了,这样下去是不会有结果的。
老实看日志吧,看日志也是一门很大的学问。
首先你得搞清楚这个sql是怎么运行,底层是mapReduce还是spark还是解析成了其他应用的put、get等接口;
然后得搞清楚数据是怎么走的,有没有发生数据倾斜,怎么优化。
同时你还得注意资源,cpu、内存、io等
最后
产品又来需求了,现有系统还无法实现,上面四步再折腾一遍...
推荐阅读
大数据需要学什么?
zookeeper-操作与应用场景-《每日五分钟搞定大数据》
zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》
zookeeper-paxos与一致性-《每日五分钟搞定大数据》
zookeeper-zab协议-《每日五分钟搞定大数据》
大数据不就是写SQL吗?的更多相关文章
- 应大数据时代而写了个磁力搜索的网页- WWW.MOVIH.COM 磁力
应大数据时代而写了个磁力搜索的网页- 索马里搜索磁力 http://www.,movih.com/ BT磁力示例网站:WWW.MOVIH.COM 采用分布式架构: JAVA系统:JBOSS7+EJB3 ...
- 大数据量下的SQL Server数据库自身优化
原文: http://www.d1net.com/bigdata/news/284983.html 1.1:增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情 ...
- 千万级大数据的Mysql数据库SQL语句优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 大数据技术 - 为什么是SQL
在大数据处理以及分析中 SQL 的普及率非常高,几乎是每一个大数据工程师必须掌握的语言,甚至非数据处理岗位的人也在学习使用 SQL.今天这篇文章就聊聊 SQL 在数据分析中作用以及掌握 SQL 的必要 ...
- 大数据学习资料之SQL与NOSQL数据库
这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...
- (转)大数据量下的SQL Server数据库优化
在SQL Server中,默认MDF文件初始大小为5MB,自增为1MB,不限增长,LDF初始为1MB,增长为10%,限制文件增长到一定的数目:一般设计中,使用SQL自带的设计即可,但是大型数据库设计 ...
- 大数据时代下的SQL Server第三方负载均衡方案----Moebius测试
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...
- (转)大数据时代下的SQL Server第三方负载均衡方案----Moebius测试
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...
- 大数据学习——hive的sql练习题
ABC三个hive表 每个表中都只有一列int类型且列名相同,求三个表中互不重复的数 create table a(age int) row format delimited fields termi ...
随机推荐
- python语言学习--1
第一天 item: 当字符串中出现 反斜杠'\' 时,输出时会把它当做转义字符处理,所以结果中不会出现它,若要正常输出则需要在字符串前面加上r, 我想r的意思是religion即“原始”的意思: it ...
- weui textarea超出字符被截断
HTML: <div class="weui-cells weui-cells_form" style="margin-top: 0;"> < ...
- Caused by:org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type "" available: expected at least 1 bean which qualifies as autowire candidate
项目使用spring, mybatis.因为分了多个模块,所以会这个模块引用了其它模块的现在,结果使用Junit测试的时候发现有两个模块不能自动注入dao和service问题.解决后在此记录一下. 解 ...
- 同一个菜品商家中心和erp价格显示不一致解决方案FAQ
1.适用场景: 2.问题原因:子账号在商家中心改了价格 3.解决办法: (1).子账号登录商家后台修改 再同步(2).ERP上商品管理 修改价格
- MySQL索引扩展(Index Extensions)学习总结
MySQL InnoDB的二级索引(Secondary Index)会自动补齐主键,将主键列追加到二级索引列后面.详细一点来说,InnoDB的二级索引(Secondary Index)除了存储索引列k ...
- QQ空间、新浪微博、腾讯微博等一键分享API链接代码
1.新浪微博:http://service.weibo.com/share/share.php?url= count=表示是否显示当前页面被分享数量(1显示)(可选,允许为空)&url=将页面 ...
- 数据库之mysql篇(3)—— mysql创建/修改数据表/操作表数据
创建数据表:create table 数据表名 1.创建表规范 create table 表名( 列名 数据类型 是否为空 自动排序/默认值 主键/外键/唯一键, 列名 数据类型 ...
- Linux进程调度器概述--Linux进程的管理与调度(十五)
调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1 背景知识 1.1 什么是调度器 ...
- IOC注解开发与XML整合
区别: xml:可以适用于任何场景,结构清晰,方便维护 注解:开发方便,快速.有些地方适用不了,这个类不是自己提供的(比如源码提供的类) xml和注解整合开发,各取所长 xml使用于对bean进行管理 ...
- Linux三剑客-SED
1.Sed是什么 Sed:字符流编辑器,Stream Editor 2.Sed功能与版本 处理日志文件,日志,配置文件等 增加.删除.修改.查询 sed --version 可以通过man sed 来 ...