在大数据处理以及分析中 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.4-bin.tar.gz
- mv apache-hive-2.3.4-bin hive-2.3.4
配置 HIVE_HOME 环境变量
- vi /etc/profile
- # 增加并修改以下内容
- HIVE_HOME=/work/software/hive-2.3.4
- 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.2]# hive
- which: no hbase in (/work/software/jdk1.8.0_151/bin:/work/software/hadoop-2.9.2/bin:/work/software/hive-2.3.4/bin:/work/software/jdk1.8.0_151/bin:/work/software/hadoop-2.9.2/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.4/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
- SLF4J: Found binding in [jar:file:/work/software/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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.4/lib/hive-common-2.3.4.jar!/hive-log4j2.properties Async: true
- Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.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: 1 row(s)
说明我们可以正常使用 hive 了
总结
这篇文章主要介绍了数据统计与分析过程中 SQL 所扮演的角色, 以及在目前大数据技术支持 SQL 的数据框架, 最后简单介绍了 Hive 的安装. 后续我们会继续介绍 SQL 的语法以及背后的大数据数据技术.
如有疑问请扫描右上方二维码直接与我交流
来源: https://www.cnblogs.com/duma/p/10850550.html