- 1 数据库概述
- 1.1 DBMS 简史
- 1.2 数据库理论
- 1.3 事务 Transaction
- 1.4 SQL
- 1.5 数据库接口
- 本章参考
- 2 Relational 关系数据库
- 2.1 关系理论
- 2.2 Oracle
- 2.5 Microsoft SQL Server
- 2.6 DB2
- RDBS 比较
- 本章参考
- 3 NoSQL 非关系数据库
- 3.1 NoSQL 分类
- 3.2 键值 key-value 数据库
- 3.3 列存储数据库
- 3.4 图形数据库
- 本章参考
- 4 NewSQL
- 4.1 NewSQL 分类
- 4.2 分布式数据库 Distributed
- 本章参考
- 5 时序数据库 TSDB
- 5.1 简介
- 5.2 时序数据库比较
- 本章参考
- 6 SQL 引擎
- 6.1 SQL 引擎分类
- 6.2 SQL On Hadoop
- 本章参考
- 7 其它数据库
- 7.1 内存数据库 In-memory
- 7.2 嵌入式数据库 Embed
- 7.3 搜索引擎
- 本章参考
- 8 各种数据库分析比较
- 8.1 数据库排行 db-engines
- 8.2 数据库技术选型
- 8.3 DB 性能比较
- 8.4 国产数据库产品列表
- 8.5 DB 常用 SQL 比较
- 本章参考
- 9 SQL 调优
- 9.1 SQL JOIN
- 9.2 SQL 执行流程
- 10 数据库大型应用实例
- 10.1 负载均衡技术
- 10.2 数据库的高可用 HA
- 10.3 数据库的读写分离
- 10.4 数据库拆分(分布式)
- 10.5 跨库查询
- 本章参考
- 参考资料
- 附录
6.2 SQL On Hadoop
简介和框架列表
表格 36 一流的 SQL on Hadoop 方案所带来的功能和业务好处
HA | 业务好处 |
---|---|
丰富且合规的 SQL 支持 | 功能强大的可移植 SQL 应用程序。能够利用基于 SQL 的数据分析和数据可视化工具的大型生态系统。 |
符合 TPC-DS 规格 | TPC-DS 帮助确保所有级别的 SQL 查询得到处理,从而广泛支持各种使用案例并避免企业级实施期间出现意外。 |
灵活高效的连接 | 以显著降低的拥有成本摆脱企业数据仓库工作负载。 |
线性可扩展性 | 以显著降低的拥有成本摆脱企业数据仓库工作负载。 |
一体化深度分析与机器学习功能 | 以 SQL 需要的统计学、数学和机器学习算法启用使用案例。 |
数据联合能力 | 在实施端对端分析使用案例过程中,利用多种企业和外部数据资产降低数据重构成本。 |
高可用性和容错功能 | 确保业务连续性并摆脱更多来自企业数据仓库的关键业务分析。 |
原生 Hadoop 文件格式支持 | 减少的 ETL 和数据移动直接使分析解决方案的拥有成本更低。 |
图 10 传统的 SQL on Hadoop 的实现方式(YARN 之上)
表格 37 SQL-on-Hadoop 框架
框架 | 简述 | 功能 | 应用场景 |
---|---|---|---|
Apache Hive | Hive 是原始的 SQL-on-Hadoop 解决方案。它是一个开源的 Java 项目,能够将 SQL 转换成一系列可以在标准的 Hadoop TaskTrackers 上运行的 MapReduce 任务。Hive 通过一个 metastore(本身就是一个数据库)存储表模式、分区和位置以期提供像 MySQL 一样的功能。它支持大部分 MySQL 语法,同时使用相似的 database/table/view 约定组织数据集。原始开发者是 Facebook 。 | Hive-QL,一个类似于 SQL 的查询接口。 一个命令行客户端。 通过中央服务支持元数据共享。 JDBC 驱动。 多语言 Apache Thrift 驱动。 一个用于创建自定义函数和转换的 Java API。 | 缺省。查询性能较低。 替代方案: Apache Tez |
Cloudera Impala | Cloudera 于 2012 年推出的一个针对 Hadoop 的开源的“交 互式”SQL 查询引擎。 使用 HDFS 和 HBase,并利用了 Hive 元数据。不使用 MR,使用 Impala 守护进程处理查询请求。Impala 目前并不支持 YARN。 为了最大限度地发挥 Impala 的优势你需要将自己的数据存储为特定的文件格式( Parquet )。 | ANSI-92 SQL 语法支持。 HIVE-QL 支持。 一个命令行客户端。 ODBC 驱动。 与 Hive metastore 互操作以实现跨平台的模式共享。 一个用于创建函数和转换的 C++ API。 | 查询要求比 HIVE 快。 |
Presto | Facebook 于 2012 年推出的 Java 语言开发的、开源的“交互式”SQL 查询引擎。2013 年开源。 与 Impala 相似的是,它的性能也依赖于特定的数据存储格式( RCFile )。 | ANSI-SQL 语法支持 (可能是 ANSI-92)。 JDBC 驱动。 一个用于从已有数据源中读取数据的“连接器”集合。连接器包括:HDFS、Hive 和 Cassandra。 与 Hive metastore 交互以实现模式共享。 | 同上 |
Shark | UC Berkeley 大学使用 Scala 语言开发的一个开源 SQL 查询引擎。Shark 构建在已有的 Apache Spark 数据处理引擎之上。 | 类似于 SQL 的查询语言支持,支持大部分 Hive-QL。 一个命令行客户端(基本上是 Hive 客户端)。 与 Hive metastore 交互以实现模式共享。 支持已有的 Hive 扩展,例如 UDFs 和 SerDes。 | |
Apache Drill | 针对 Hadoop 的、开源的“交互式”SQL 查询引擎。Drill 由 MapR 在 2012 年推出。需要安装工作节点(drillbits)。不同的是 Drill 旨在支持多种后端存储(HDFS、HBase、MongoDB),同时它的一个重点是复杂的嵌套数据集(例如 JSON)。 | ANSI SQL 兼容。 能够与一些后端存储和元数据存储交互(Hive、HBase、MongoDB)。 UDFs 扩展框架、存储插件。 | Alpha 阶段 |
Apache HAWQ | 作为 EMC Pivotal 公司专有 Hadoop 版本“Pivotal HD”的一部分提供。 2018.8.22 成为 Apache TLP。 | 完整的 SQL 语法支持。 能够通过 Pivotal Xtension 框架(PXF)与 Hive 和 HBase 互操作。 能够与 Pivotal GemFire XD(内存实时数据库)互操作。 | 与 Pivotal 公司提供的 Hadoop 版本配合使用。 |
Spark SQL | |||
BigSQL | 作为 IBM 公司专有 Hadoop 版本“ Big Insights ”的一部分提供。 | JDBC 和 ODBC 驱动。 广泛的 SQL 支持。 可能有一个命令行客户端。 | 与 IBM 公司提供的 Hadoop 版本配合使用。 |
Apache Phoenix | 用于 Apache HBase 的开源 SQL 引擎。它的目标是通过一个嵌入的 JDBC 驱动对存储在 HBase 中的数据提供低延迟查询。 Phoenix 提供了 HBase 数据的读、写操作。 | 一个 JDBC 驱动。 一个命令行客户端。 批量加载数据的机制。 能够创建新表,或者映射到已有的 HBase 数据。 | 与 HBase 配合使用。 |
Apache Tajo | 在 HDFS 之上构建一个先进的数据仓库系统。虽然它支持外部表和 Hive 数据集(通过 HCatalog ),但是它的重点是数据管理,提供低延迟的数据访问,以及为更传统的 ETL 提供工具。它也需要在数据节点上部署 Tajo 特定的工作进程。 | ANSI SQL 兼容。 JDBC 驱动。 集成 Hive metastore 能够访问 Hive 数据集。 一个命令行客户端。 一个自定义函数 API。 | 社区不够繁荣,不推荐。 |
备注:Hive 详见《Hadoop 体系》;Presto、Impala、HAWQ 详见《数据库架构》。
Apache Drill
Apache Drill 是一个低延迟的分布式海量数据(涵盖结构化、半结构化以及嵌套数据)交互式查询引擎,使用 ANSI SQL 兼容语法,支持本地文件、HDFS、HBase、MongoDB 等后端存储,支持 Parquet、JSON、CSV、TSV、PSV 等数据格式。本 质上 Apache Drill 是一个分布式的 mpp(大规模并行处理)查询层。Drill 的目的在于支持更广泛的数据源,数据格式,以及查询语言。受 Google 的 Dremel 启发,Drill 满足上千节点的 PB 级别数据的交互式商业智能分析场景。
Drill 的优势
- 学习成本低
- 低延迟的 SQL 查询
- 动态查询自描述数据文件(json,text,Parquet),MPR-DB/Hbase 表,不需要元数据定义的 hive 元数据。ANSI SQL。
- 嵌套数据支持
- 与 ApacheHive 一体化(Hive 表和视图的查询,支持所有的 Hive 文件格式和 HiveUDFS)
- BI/SQL 工具集成使用标准的 JDBC 驱动程序
- 访问多个数据源:hive、hbase、dfs
- 用户自定义 UDF
- 高性能(设计上高吞吐量和低延迟,不使用通用的执行引擎,柱形矢量引擎)
Drill 安装使用
依赖组件:JDK 7、ZooKeeper
安装配置启动
解压 Apache Drill
修改 zookeeper 配置文件:apache-drill-1.8.0/conf/drill-override.conf
配置 Drill :apache-drill-1.8.0/conf/drill-env.sh #可加大内存
启动 Drill :bin/drillbits.sh start
连接到 Drill
## 使用 drill-override.conf 配置文件进行默认连接
$ ./bin/drill-conf # 以下的查询测试都采用此方式进行连接
## 使用命令行自己指定参数进行连接
$ ./bin/sqlline -u jdbc:drill:schema=hive;zk=master:2181,slave2:2181,slave3:2181
使用
数据源 | 示例 SQL |
---|---|
hive | select * from hive.test.trackingtable t where CONVERT_FROM(t.page_name, 'UTF8') = '后台系统' limit 10; |
hbase | SELECT CONVERT_FROM(row_key, 'UTF8') AS studentid, CONVERT_FROM(students.account.name, 'UTF8') AS name FROM hbase.students where CONVERT_FROM(students.account.name, 'UTF8') = '爱丽丝' limit 10; |
mongo | select * from mongo.scrapdb.weather_curr LIMIT 10; |
hdfs | SELECT columns[0],columns[1] FROM hdfs. /BASEDATA/MASTERDATA/test.csv where columns[0] = '是是是' LIMIT 10; |
postgres | select * from posgres.public.pet t where t.name='用户' LIMIT 10; |
备注:1. 配置中文支持:
vi apache-drill-1.0.0/conf/drill-env.sh
export DRILL_SHELL_JAVA_OPTS="-Dsaffron.default.charset=UTF-16LE
Drill 架构
Drill 的核心是 DrillBit 服务,主要负责接收客户端的请求,处理查询,并将结果返回给客户端。
DrillBit 能够安装和运行在 hadoop 集群中所需要的节点上形成一个分布式环境。当 DrillBit 运行在集群上的节点上时,能够最大程度的实现 数据本地化的执行,不要进行网络和节点间的数据移动。Drill 使用 Zookeeper 来维护和管理集群节点和节点的健康状况。
尽管 DrillBit 运行在 Hadoop 集群中,不过他不依赖与 hadoop 集群,可以运行在任何的分布式系统中。
图 11 Drill 架构
说明:
当提交一个 Drill 查询时,客户端或应用程序以 SQL 语句的方式发送查询给 Drill 集群中的 DrillBit。DrillBit 处理运行在每个活动节点上的查询计划和执行查询,以及跨集群分发查询任务以实现数据本地性的最大化。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论