大数据技术 - 为什么是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 ...
随机推荐
- js 数组 添加或删除 元素 splice 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素 filter
里面可以用 箭头函数 splice 删除 增加 数组 中元素 操作数组 filter 创建新数组 检查指定数组中符合条件的所有元素
- Python的WSGI(Web Server Gateway Interface)服务器
Python的WSGI(Web Server Gateway Interface)服务器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Spring Boot Admin 详解(Spring Boot 2.0,基于 Eureka 的实现)
原文:https://blog.csdn.net/hubo_88/article/details/80671192 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它 ...
- PAT 乙级 1032.挖掘机技术哪家强 C++/Java
题目来源 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即参赛人数.随后 ...
- ajax 简单例子
Html 代码: <html> <body> <div id="myDiv"><h3>Let AJAX change this te ...
- flask实战-个人博客-电子邮件支持
电子邮件支持 因为博客要支持评论,所以我们需要在文章有了新评论后发邮件通知管理员.而且,当管理员回复了读者的评论后,也需要发送邮件提醒读者. 为了方便读者使用示例程序,personalBlog中仍然使 ...
- java生成前端验证码+验证「kaptcha」
1.前言 kaptcha是一个非常实用的短信验证码生成工具,通过简单配置即可实现多样化的验证码. 2.引入依赖 <!--第三方验证码--><dependency> < ...
- Margin和padding失效
太久不写原生果然不行,Margin和padding对div有效,对span失效,原因就不解释了(元素性质,块状之类的)
- git crate&query&delete tag(九)
root@vmuer-VirtualBox:/opt/myProject# git log --pretty=oneline0169b7a1c4bccb47e76711f353fd8d3864bde9 ...
- ESA2GJK1DH1K升级篇: 升级STM32 预热: 单片机每隔一定时间 使用 http 获取天气
前言: 实现功能概要: STM32使用AT指令控制Wi-Fi以TCP方式连接服务器(YY天气Web服务器),然后使用http的get协议获取今天的天气数据 单片机提取今天的温度和湿度数据,把温湿度数据 ...