大数据技术 - 为什么是SQL
在大数据处理以及分析中 SQL 的普及率非常高,几乎是每一个大数据工程师必须掌握的语言,甚至非数据处理岗位的人也在学习使用 SQL。今天这篇文章就聊聊 SQL 在数据分析中作用以及掌握 SQL 的必要性。
SQL解决了什么问题
SQL的中文翻译为:结构化查询语言。这里面有三层含义:首先这是一门编程语言;其次,这是一门查询语言;最后,这是在结构化数据上做查询的语言。结构化数据就是数据库里的二维表,不了解数据库的读者可以把它看做 Excel 里面的表格。虽然 SQL可以解决查询问题,但是 SQL 并不仅仅只提供查询的功能,它还可以对表进行增加、更新、删除等操作。
SQL 的主要应用场景有两个:
第一,传统数据库的增删改查。以查询举例,App 的某个页面展示的数据一般存放在传统数据库中,通过 SQL 可以读取数据库中的内容用于展示。
第二,大数据统计分析。比如,统计 App 的日活,这时候 SQL 的作用是查询和计算。大数据场景几乎不会对表中的记录更新和删除。
SQL的优势
语法简单
SQL 的语法相对于其他编程语言非常简单,常用的关键字也就几个,select、from、where、join、if 等。没有像 Java、C++ 等编程语言定义的类、对象、继承之类的复杂概念。
表达能力强
完成同样的统计功能,SQL 代码量较少。举一个大数据统计常用的例子 WordCount,之前我写的使用 MapReduce 写的代码大概 40 行。下面我们用 SQL 写一下看看多么简单,你会发现so easy,如果看不懂可以暂时忽略,后续有讲解。
select word, count(1)
from (
select * from tb lateral view explode(split(words, ' ')) words_tb as word
) tmp
group by word
;
通过如上可以看到只用了 5 行代码就完成了 WordCount,SQL 的表达力强,可以大大减少代码量。
容易理解
我们很容易将 SQL 代码映射到二维表中的数据,比如上面例子中的代码,第一个括号里面的 select ... from 代表拿到了 tb 这个表的数据并做转换;第二个 select ... from 相当于基于第一个括号里生成的数据再进行操作。所以 SQL 不同操作的代码其实就是对应着二维表的不断变换,相对容易理解。
谁在用SQL
我觉得未来只要跟数据相关的从业者都应该掌握 SQL,在编程越来越普及的背景下,SQL 并不是程序员专有技能。那么目前市场环境中有哪些职位应该掌握 SQL。
- 大数据 / BI 工程师:可以说是数据直接提供方,将采集的数据进行合理的组织,创建二维表存储数据,设计数据仓库模型,以便分析团队能够便捷地、快速地获取到想要的数据。
- 机器学习及数据挖掘工程师:做挖掘的数据很可能来自数据仓库,使用 SQL 统计可以非常方便地了解数据、分析数据,与数据团队之间沟通成本更低。
- 数据分析师:有不少非程序员出身,但是为了跟大数据团队配合也需要使用 SQL 并且需要懂一些大数据处理方便的专业知识。我接触过不少数据分析师,他们的 SQL 水平参差不齐, 有的根本不写 SQL,主要用 R 、Python 或 Excel 进行分析。而有些人能够熟练掌握 SQL 并且也了解一大数据处理技术,这样跟数据团队配合的会更好。
- 产品经理和运营:产品和运营会经常进行数据分析,他们分析的数据最常见的来源是 BI 团队提供的报表,但这种方式非常不灵活。因此对于产品和运营如果能掌握 SQL 自助地分析会大大提升分析效率。我有个朋友在美团做产品经理,他们会使用 SQL 并且能够为 BI 团队挡下大部分无用的数据需求。当然现在一些 BI 团队也会提供各种可视化工具来满足业务方的数据需求,这只是一个折中的方案。建议与数据分析相关岗位的同学都掌握 SQL ,学习 SQL 并不比熟练 Excel 操作更复杂。
大数据中的 SQL
目前比较火的大数据框架比如 MapReduce(Hive)、Spark、Flink 都支持 SQL。在大数据中 SQL 应用主要分两种:一种是周期性的统计任务,另一种是分析任务。前者对实时性要求不高,一般用 Hive 或者 Spark 批处理任务去完成。对于后者偏重分析,需要快速的洞察数据得出结论,这种任务可以使用 Hive 来完成,如果需要更高的实时性,交互性要求可以使用 Kylin 等多维分析框架。
以上便是大数据处理和分析中 SQL 扮演的角色以及地位。SQL 应用是建立在数据库之上,对于大数据目前应用比较广泛的是 Hive, Hive 的安装简述如下。
安装Hive
安装 Hive 需要基于 Hadoop,Hadoop 的安装在“大数据技术 - 学习之路(一)”中已经介绍过,本次 Hive 的安装也是基于之前的环境进行。Hadoop 2.x.y 版本对应 Hive 也是 2.x.y 版本,我们可以下载 apache-hive-2.3.4-bin.tar.gz 文件进行安装。Hive 的安装相对简单,可以对照官网进行,主要步骤如下:
解压apache-hive-2.3.4-bin.tar.gz
tar -zxvf apache-hive-2.3.-bin.tar.gz
mv apache-hive-2.3.-bin hive-2.3.
配置 HIVE_HOME 环境变量
vi /etc/profile
#增加并修改以下内容
HIVE_HOME=/work/software/hive-2.3.
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH
source /etc/profile
在 HDFS 创建Hive数据库的路径(修改数据库默认路径: hive.metastore.warehouse.dir)
hadoop fs -mkdir /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
初始化 meta 数据库
# Hive 将表的元数据信息(表名、列名及数据类型等)存储在关系型数据库中,目前支持 mysql 和 derby,自己学习使用可以用 derby,生产环境建议用 mysql
schematool -dbType derby -initSchema
# 执行成功后会看到在 hive-2.3.4 目录下有个 metastore_db 目录,存放元数据信息
如果不进行该操作可能会报以下错误
FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
启动 Hive 客户端,直接运行 hive 命令即可
[root@hadoop0 hadoop-2.9.]# hive
which: no hbase in (/work/software/jdk1..0_151/bin:/work/software/hadoop-2.9./bin:/work/software/hive-2.3./bin:/work/software/jdk1..0_151/bin:/work/software/hadoop-2.9./bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/work/software/hive-2.3./lib/log4j-slf4j-impl-2.6..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/work/software/hadoop-2.9./share/hadoop/common/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Logging initialized using configuration in jar:file:/work/software/hive-2.3./lib/hive-common-2.3..jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive .X releases.
hive>
由于元数据目录在 hive-2.3.4 目录下的 metastore_db 目录,因此后续启动 hive 客户端都要在 hive-2.3.4 目录下
验证 hive
hive> show databases;
OK
default
Time taken: 9.366 seconds, Fetched: row(s)
说明我们可以正常使用 hive 了
总结
这篇文章主要介绍了数据统计与分析过程中 SQL 所扮演的角色,以及在目前大数据技术支持 SQL 的数据框架,最后简单介绍了 Hive 的安装。后续我们会继续介绍 SQL 的语法以及背后的大数据数据技术。
如有疑问请扫描右上方二维码直接与我交流
大数据技术 - 为什么是SQL的更多相关文章
- 大数据技术 vs 数据库一体机[转]
http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...
- 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)
[摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...
- 从大数据技术变迁猜一猜AI人工智能的发展
目前大数据已经成为了各家互联网公司的核心资产和竞争力了,其实不仅是互联网公司,包括传统企业也拥有大量的数据,也想把这些数据发挥出作用.在这种环境下,大数据技术的重要性和火爆程度相信没有人去怀疑. 而A ...
- TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台
本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...
- Google大数据技术架构探秘
原文地址:https://blog.csdn.net/bingdata123/article/details/79927507 Google是大数据时代的奠基者,其大数据技术架构一直是互联网公司争相学 ...
- 开源大数据技术专场(下午):Databircks、Intel、阿里、梨视频的技术实践
摘要: 本论坛第一次聚集阿里Hadoop.Spark.Hbase.Jtorm各领域的技术专家,讲述Hadoop生态的过去现在未来及阿里在Hadoop大生态领域的实践与探索. 开源大数据技术专场下午场在 ...
- 开源大数据技术专场(上午):Spark、HBase、JStorm应用与实践
16日上午9点,2016云栖大会“开源大数据技术专场” (全天)在阿里云技术专家封神的主持下开启.通过封神了解到,在上午的专场中,阿里云高级技术专家无谓.阿里云技术专家封神.阿里巴巴中间件技术部高级技 ...
- 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)
1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...
- 大数据技术之Sqoop
大数据技术之Sqoop 一.Sqoop简介 Apache Sqoop(TM)是一种旨在有效地在Apache Hadoop和诸如关系数据库等结构化数据存储之间传输大量数据的工具. Sqoop于2012 ...
随机推荐
- Python可视化查看数据集完整性: missingno库(用于数据分析前的数据检查)
数据分析之前首先要保证数据集的质量,missingno库提供了一个灵活易用的可视化工具来观察数据缺失情况,是基于matplotlib的,接受pandas数据源 快速开始 样例数据使用 NYPD Mot ...
- 在知识爆炸的年代如何学习,避免成为PPT架构师
计算机的发展大体遵循摩尔定律,IT要学的东西越来越多,感觉无从下手 然后发现许多人,专门喜欢说这些名词概念装高大上,脱离一线开发,技术跟风盲目崇拜新的骚东西,比如docker,k8s,微服务,open ...
- 【转】Linux内存管理(最透彻的一篇)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法.力求从外到内.水到渠成地引导网友分析Linux的内存管理与使用.在 ...
- computer networking ---------DNS
[DNS]domain named system 域名解析系统,即相当于对www.baidu.com的类似的域名进行解析,对于人而言,记忆一些域名相比于记忆一些Ip地址来说简单的多,而对于计算机而言, ...
- 目标检测论文解读10——DSSD
背景 SSD算法在检测小目标时精度并不高,本文是在在SSD的基础上做出一些改进,引入卷积层,能综合上下文信息,提高模型性能. 理解 Q1:DSSD和SSD的区别有哪些? (1)SSD是一层一层下采样, ...
- python递归和内置方法
递归:函数调用自身 核心:递进的时候能够达到一个结果,问题规模越来越小(不一定要真正的达到):设置一个条件,能够让最后一次函数调用结束 练习: 第一个人的姓名是16岁,后面每个人的年龄都比前一个大 ...
- Linux中的会话与作业
- matlab-层次分析法
层次分析法(AHP)是把问题条理化.层次化,构造出一个有层次的结构模型的方法. 比如要选择旅游地,有3个选择方案,苏杭.北戴河和桂林.选择过程需要考虑多个因素,比如景色.费用.居住.饮食和旅途. 1. ...
- Oracle ORA-00923: FROM keyword not found where expected
不同于 MySQL,请检查 from 之前显示的字段,尤其是 AS 命名符号的引用. 在 Oracle 中单引 AS 'XXX’ 是错误的,需要修改为双引 "XXX" 或者是干脆去 ...
- css3中的box-sizing常用的属性有哪些?分别有什么作用?
content-box:默认标准盒模型,总宽=width+padding+border+margin border-box:IE标准,怪异盒模型,总宽=width+margin inherit:从父元 ...