大数据手艺 – 为何是SQL

2019年7月2日10:57:26大数据手艺 – 为何是SQL已关闭评论 227

在大数据处理以及剖析中 SQL 的提高率异常高,险些是每个大数据工程师必需控制的言语,以至非数据处理岗亭的人也在进修运用 SQL。本日这篇文章就聊聊 SQL 在数据剖析中作用以及控制 SQL 的必要性

SQL处理了什么题目

SQL的中文翻译为:结构化查询言语。这内里有三层寄义:起首这是一门编程言语;其次,这是一门查询言语;末了,这是在结构化数据上做查询的言语。结构化数据就是数据库里的二维表,不相识数据库的读者可以或许把它看作 Excel 内里的表格。虽然 SQL可以或许处理查询题目,然则 SQL 实在不仅仅只供应查询的功用,它还可以或许对表举行增添、更新、删除等操纵。

SQL 的重要运用场景有两个:

第一,传统数据库的增编削查。以查询举例,App 的某个页面展现的数据一样平常寄存在传统数据库中,经由过程 SQL 可以或许读取数据库中的内容用于展现。

第二,大数据统计剖析。好比,统计 App 的日活,这时候 SQL 的作用是查询和盘算。大数据场景险些不会对表中的纪录更新和删除。

SQL的上风

语法简朴

SQL 的语法相对其他编程言语异常简朴,常常使用的关键字也就几个,selectfromwherejoinif 等。没有像 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 敕令便可

[[email protected] 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 的语法以及背地的大数据数据手艺。

若有疑问请扫描右上方二维码直接与我交换

 

avatar