返回介绍

6.2 SQL On Hadoop

发布于 2024-09-26 01:07:47 字数 7788 浏览 0 评论 0 收藏 0

简介和框架列表

表格 36 一流的 SQL on Hadoop 方案所带来的功能和业务好处

HA业务好处
丰富且合规的 SQL 支持功能强大的可移植 SQL 应用程序。能够利用基于 SQL 的数据分析和数据可视化工具的大型生态系统。
符合 TPC-DS 规格TPC-DS 帮助确保所有级别的 SQL 查询得到处理,从而广泛支持各种使用案例并避免企业级实施期间出现意外。
灵活高效的连接以显著降低的拥有成本摆脱企业数据仓库工作负载。
线性可扩展性以显著降低的拥有成本摆脱企业数据仓库工作负载。
一体化深度分析与机器学习功能以 SQL 需要的统计学、数学和机器学习算法启用使用案例。
数据联合能力在实施端对端分析使用案例过程中,利用多种企业和外部数据资产降低数据重构成本。
高可用性和容错功能确保业务连续性并摆脱更多来自企业数据仓库的关键业务分析。
原生 Hadoop 文件格式支持减少的 ETL 和数据移动直接使分析解决方案的拥有成本更低。

image-20191201160615093

图 10 传统的 SQL on Hadoop 的实现方式(YARN 之上)

表格 37 SQL-on-Hadoop 框架

框架简述功能应用场景
Apache HiveHive 是原始的 SQL-on-Hadoop 解决方案。它是一个开源的 Java 项目,能够将 SQL 转换成一系列可以在标准的 Hadoop TaskTrackers 上运行的 MapReduce 任务。Hive 通过一个 metastore(本身就是一个数据库)存储表模式、分区和位置以期提供像 MySQL 一样的功能。它支持大部分 MySQL 语法,同时使用相似的 database/table/view 约定组织数据集。原始开发者是 FacebookHive-QL,一个类似于 SQL 的查询接口。 一个命令行客户端。 通过中央服务支持元数据共享。 JDBC 驱动。 多语言 Apache Thrift 驱动。 一个用于创建自定义函数和转换的 Java API。缺省。查询性能较低。 替代方案: Apache Tez
Cloudera ImpalaCloudera 于 2012 年推出的一个针对 Hadoop 的开源的“交 互式”SQL 查询引擎。 使用 HDFS 和 HBase,并利用了 Hive 元数据。不使用 MR,使用 Impala 守护进程处理查询请求。Impala 目前并不支持 YARN。 为了最大限度地发挥 Impala 的优势你需要将自己的数据存储为特定的文件格式( Parquet )。ANSI-92 SQL 语法支持。 HIVE-QL 支持。 一个命令行客户端。 ODBC 驱动。 与 Hive metastore 互操作以实现跨平台的模式共享。 一个用于创建函数和转换的 C++ API。查询要求比 HIVE 快。
PrestoFacebook 于 2012 年推出的 Java 语言开发的、开源的“交互式”SQL 查询引擎。2013 年开源。 与 Impala 相似的是,它的性能也依赖于特定的数据存储格式( RCFile )。ANSI-SQL 语法支持 (可能是 ANSI-92)。 JDBC 驱动。 一个用于从已有数据源中读取数据的“连接器”集合。连接器包括:HDFS、Hive 和 Cassandra。 与 Hive metastore 交互以实现模式共享。同上
SharkUC 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

安装配置启动

  1. 解压 Apache Drill

  2. 修改 zookeeper 配置文件:apache-drill-1.8.0/conf/drill-override.conf

  3. 配置 Drill :apache-drill-1.8.0/conf/drill-env.sh #可加大内存

  4. 启动 Drill :bin/drillbits.sh start

  5. 连接到 Drill

## 使用 drill-override.conf 配置文件进行默认连接
$ ./bin/drill-conf   # 以下的查询测试都采用此方式进行连接

## 使用命令行自己指定参数进行连接
$ ./bin/sqlline -u jdbc:drill:schema=hive;zk=master:2181,slave2:2181,slave3:2181

使用

数据源示例 SQL
hiveselect * from hive.test.trackingtable t where CONVERT_FROM(t.page_name, 'UTF8') = '后台系统' limit 10;
hbaseSELECT 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;
mongoselect * from mongo.scrapdb.weather_curr LIMIT 10;
hdfsSELECT columns[0],columns[1] FROM hdfs. /BASEDATA/MASTERDATA/test.csv where columns[0] = '是是是' LIMIT 10;
postgresselect * 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 集群,可以运行在任何的分布式系统中。

image-20191201160636255

图 11 Drill 架构

说明:

当提交一个 Drill 查询时,客户端或应用程序以 SQL 语句的方式发送查询给 Drill 集群中的 DrillBit。DrillBit 处理运行在每个活动节点上的查询计划和执行查询,以及跨集群分发查询任务以实现数据本地性的最大化。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文