大数据技术 - 为什么是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 ...
随机推荐
- 使用Git Flow规范!
Git Flow常用的分支 Production 分支 也就是我们经常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直 ...
- 线上IIS应用程序池自动关闭
事情的经过是这样的: 下午下班的铃声已经敲响,我已经整装待发.突然同事说某水司的微信公众号不能正常访问了.点击营业厅,直接提示Service Unavailable. 立马远程服务器查看,IIS微信公 ...
- 【JavaScript】案例二:使用JS完成首页轮播图效果——事件(onclick&onload)
1.切换图片例子: 事件(onclick) <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...
- MarkDown中如何加入上标和下标
上标 使用<sup></sup>标签包裹的部分就是上标,例如:A<sup>T</sup> 显示效果就是 AT . 下标 使用<sub>< ...
- nginx 跨域请求访问
1.nginx跨域请求访问 location ~ .*\.(htm|html)$ { add_header Access-Control-Allow-Origin(请求域名) *(所有域名) http ...
- 小学四则运算口算练习app---No.2
经过昨天的了解,虽然还是很懵,总要下手摸到鼠标来写第一个页面! 这是一开始设置出体数目和时间的页面,使用者根据提示进行相关设置即可! 代码如下: <?xml version="1.0& ...
- 安装Vyos
Vyos是一个开源的网络操作系统,基于Debian,相对于ROS需要购买license,Vyos就更加开放的多. 下载Vyos wget http://vyos.hecint.com/iso/re ...
- (HK1-1)海康网络摄像机的使用
https://blog.csdn.net/u014552102/article/details/86700057 一.手机客户端操作: 首先在莹石商城官网https://www.ys7.com/下 ...
- java 8 学习一(概述)
学习java8的新特性之前,简单看了下从java5开始历代版本的新特性,都是别人总结的. java5.java6.java7.java8的新特性 http://blog.csdn.net/samjus ...
- 洛谷p3353在你窗外闪耀的星星题解
题目 首先被题目甜到了 本来搜标签搜的线段树,结果发现这题目很吸引我我果断点开 觉得前缀和就能A啊 于是乎 要注意 窗户旁边是可以看到的 所以前缀和的时候是不用再-1的 //前缀和 //注意坑点 // ...