Impala 简明教程

Impala - Overview

What is Impala?

Impala 是一个 MPP(大规模并行处理)SQL 查询引擎,用于处理存储在 Hadoop 集群中的海量数据。它是一个用 C++ 和 Java 编写的开源软件。与其他用于 Hadoop 的 SQL 引擎相比,它提供了高性能和低延迟。

换句话说,Impala 是性能最高的 SQL 引擎(提供了类似 RDBMS 的体验),它提供了访问存储在 Hadoop 分布式文件系统中的数据的最快方式。

Why Impala?

Impala 通过利用 HDFS、HBase、元存储、YARN 和 Sentry 等标准组件,将传统分析数据库的 SQL 支持和多用户性能与 Apache Hadoop 的可扩展性和灵活性相结合。

  1. 使用 Impala,用户可以用 SQL 查询的方式与 HDFS 或 HBase 通信,与 Hive 等其他 SQL 引擎相比,速度更快。

  2. Impala 可以读取 Hadoop 使用的几乎所有文件格式,如 Parquet、Avro、RCFile。

Impala 使用与 Apache Hive 相同的元数据、SQL 语法(Hive SQL)、ODBC 驱动程序和用户界面(Hue Beeswax),为面向批处理或实时查询提供了一个熟悉且统一的平台。

与 Apache Hive 不同, Impala is not based on MapReduce algorithms 。它实现了一个基于 daemon processes 的分布式架构,负责查询执行的所有方面,这些方面在同一台机器上运行。

因此,它减少了利用 MapReduce 的延迟,这使得 Impala 比 Apache Hive 更快。

Advantages of Impala

以下是 Cloudera Impala 的一些公认优点。

  1. 使用 Impala,你可以使用传统的 SQL 知识以闪电般的速度处理存储在 HDFS 中的数据。

  2. 由于数据处理会在数据所在的位置(在 Hadoop 集群)执行,因此,在使用 Impala 时,无需对存储在 Hadoop 上的数据进行数据转换和数据移动。

  3. 使用 Impala,您可以访问存储在 HDFS、HBase 和 Amazon s3 中的数据,而无需学习 Java(MapReduce 作业)。您可以使用基本的 SQL 查询概念来访问。

  4. 要在业务工具中编写查询,必须通过复杂的提取-转换-加载 (ETL) 周期来处理数据。但是,使用 Impala,这个过程被缩短了。借助于 exploratory data analysis & data discovery 之类的新技术,加载和重新组织等耗时的阶段得以克服,从而加快了这一过程。

  5. Impala 率先使用了 Parquet 文件格式,这是一种面向数据仓库方案中的大规模查询进行了优化的列式存储布局。

Features of Impala

下面给出 Cloudera Impala 的功能:

  1. Impala 作为开源软件在 Apache 许可下免费提供。

  2. Impala 支持内存数据处理,即它访问/分析存储在 Hadoop 数据节点上而不用移动数据的数据。

  3. 您可以使用类似于 SQL 的查询通过 Impala 来访问数据。

  4. 和其它 SQL 引擎相比,Impala 可以提供对 HDFS 中数据的更快访问。

  5. 使用 Impala,您可以将数据存储在 HDFS、Apache HBase 和 Amazon s3 等存储系统中。

  6. 您可以将 Impala 与 Tableau、Pentaho、Microstrategy 和 Zoom Data 等商业智能工具集成在一起。

  7. Impala 支持 LZO、Sequence File、Avro、RCFile 和 Parquet 等各种文件格式。

  8. Impala 使用 Apache Hive 中的元数据、ODBC 驱动程序和 SQL 语法。

Relational Databases and Impala

Impala 使用类似于 SQL 和 HiveQL 的查询语言。下表描述了 SQL 与 Impala 查询语言之间的部分主要差异。

Impala

Relational databases

Impala 使用了类似于 HiveQL 的类似于 SQL 的查询语言。

关系数据库使用 SQL 语言。

在 Impala 中,您不能更新或删除单个记录。

在关系数据库中,可以更新或删除单个记录。

Impala 不支持事务。

Relational databases support transactions.

Impala 不支持索引。

Relational databases support indexing.

Impala 存储和管理海量数据(PB 级)。

与 Impala 相比,关系数据库处理较少量的数据(TB 级)。

Hive, Hbase, and Impala

虽然 Cloudera Impala 使用了与 Hive 相同的查询语言、元存储和用户界面,但它在某些方面与 Hive 和 HBase 不同。下表展示了 HBase、Hive 和 Impala 之间的对比分析。

HBase

Hive

Impala

HBase 是基于 Apache Hadoop 的宽列存储数据库。它使用 BigTable 的概念。

Hive 是一个数据仓库软件。我们可以使用它来访问和管理建立在 Hadoop 之上的大型分布式数据集。

Impala 是一个用于管理和分析存储在 Hadoop 之上的数据的工具。

HBase 的数据模型是宽列存储。

Hive follows Relational model.

Impala follows Relational model.

HBase 是使用 Java 语言开发的。

Hive 是使用 Java 语言开发的。

Impala 是使用 C++ 开发的。

HBase 的数据模型是无模式的。

Hive 的数据模型是基于模式的。

Impala 的数据模型是基于模式的。

HBase 提供了 Java、RESTful 和 Thrift API。

Hive 提供了 JDBC、ODBC、Thrift API。

Impala 提供 JDBC 和 ODBC API。

支持 C、C#、C++、Groovy、Java PHP、Python 和 Scala 等编程语言。

支持 C++、Java、PHP 和 Python 等编程语言。

Impala 支持所有支持 JDBC/ODBC 的语言。

HBase 支持触发器。

Hive 不支持任何触发器。

Impala 也不支持任何触发器。

全部这三个数据库 −

  1. Are NOSQL databases.

  2. Available as open source.

  3. Support server-side scripting.

  4. 遵循 ACID 属性,例如,持久性和并发性。

  5. Use sharding for partitioning.

Drawbacks of Impala

使用 Impala 的一些缺点如下 −

  1. Impala 不支持序列化和反序列化。

  2. Impala 只能读取文本文件,不能读取自定义二进制文件。

  3. 每当将新的记录/文件添加到 HDFS 中的数据目录时,都需要刷新表格。