大数据技术 - 为什么是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 ...
随机推荐
- SpingMVC流程图
Struts的请求流程 springmvc的流程 0.struts2 MVC框架 Controller Hibernate 持久化框架 Model spring ...
- day 45
目录 form表单(**************) 参数 action method select标签 下拉框 textarea标签 CSS 注释 css的语法结构 css的三种引入方式 css查找( ...
- MySQL数据库(七)--索引
一 .介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...
- 配置管理-git研究(版本管理)
1. 安装git2.7 git2.7具体安装步骤如下: [root@host1 ~]# yum install curl-devel expat-devel gettext-devel openssl ...
- Nginx 反向代理功能-实现http反向代理
Nginx 反向代理功能-实现http反向代理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- PAT 乙级 1036.跟奥巴马一起编程 C++/Java
题目来源 美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏 ...
- node_promise
学习链接 http://liubin.org/promises-book/#__5
- 十大排序算法总结(Python3实现)
十大排序算法总结(Python3实现) 本文链接:https://blog.csdn.net/aiya_aiya_/article/details/79846380 目录 一.概述 二.算法简介及代码 ...
- 【反防盗链】img 标签 访问图片 返回403 forbidden问题
解决方案,页面头添加 <meta name="referrer" content="no-referrer" /> 隐藏请求体中标注来源referr ...
- manjaro 安装 tim 后无法输入中文
cd /opt/deepinwine/tools sudo chmod 777 run.sh vim run.sh 在一开始的注释下输入 export GTK_IM_MODULE="fcit ...