美文网首页
Apache Impala(一) 基本介绍

Apache Impala(一) 基本介绍

作者: 做个合格的大厂程序员 | 来源:发表于2020-07-03 15:33 被阅读0次

    impala是 cloudera 提供的一款高效率的 sql 查询工具,提供实时的查询 效果,官方测试性能比 hive 快 10 到 100 倍,其 sql 查询比 sparkSQL 还要更加 快速,号称是当前大数据领域最快的查询 sql 工具, impala 是参照谷歌的新三篇论文(Caffeine--网络搜索引擎、Pregel--分 布式图计算、Dremel--交互式分析工具)当中的 Dremel 实现而来,其中旧三篇 论文分别是(BigTable,GFS,MapReduce)分别对应我们即将学的 HBase 和已 经学过的 HDFS 以及 MapReduce。

    Impala 与 Hive 关系

    impala 是基于 hive 的大数据分析查询引擎, 直接 使用 hive 的元数据库 metadata,意味着 impala 元数据都存储在 hive 的 metastore 当中,并且 impala 兼 容 hive 的绝大多数 sql 语法。所以需要安装 impala 的话,必须先安装 hive,保证

    hive 安装成功,并且还需要启动 hive 的 metastore 服务。 Hive 元数据包含用 Hive 创建的 database、table 等元信息。元数据存储在关 系型数据库中,如 Derby、MySQL 等。

    客户端连接 metastore 服务,metastore 再去连接 MySQL 数据库来存取元数 据。有了 metastore 服务,就可以有多个客户端同时连接,而且这些客户端不需 要知道 MySQL 数据库的用户名和密码,只需要连接 metastore 服务即可。

    nohup hive --service metastore >> ~/metastore.log 2>&1 &

    image

    Impala 与 Hive 异同

    Impala 与 Hive 都是构建在 Hadoop 之上的数据查询工具各有不同的侧重适 应面,但从客户端使用来看 Impala 与 Hive 有很多的共同之处,如数据表元数据、 ODBC/JDBC 驱动、SQL 语法、灵活的文件格式、存储资源池等。

    但是 Impala 跟 Hive 最大的优化区别在于:没有使用 MapReduce 进行并行 计算,虽然 MapReduce 是非常好的并行计算框架,但它更多的面向批处理模式, 而不是面向交互式的 SQL 执行。与 MapReduce 相比,Impala 把整个查询分成一

    执行计划树,而不是一连串的 MapReduce 任务,在分发执行计划后,Impala 使用拉式获取数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少

    的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。Impala 使用服务的 方式避免每次执行查询都需要启动的开销,即相比 Hive 没了 MapReduce 启动时间。

    image

    Impala 使用的优化技术

    使用 LLVM 产生运行代码,针对特定查询生成特定代码,同时使用 Inline 的 方式减少函数调用的开销,加快执行效率。(C++特性) 充分利用可用的硬件指令(SSE4.2)。 更好的 IO 调度,Impala 知道数据块所在的磁盘位置能够更好的利用多磁盘 的优势,同时 Impala 支持直接数据块读取和本地代码计算 checksum。 通过选择合适数据存储格式可以得到最好性能(Impala 支持多种存储格式)。 最大使用内存,中间结果不写磁盘,及时通过网络以 stream 的方式传递。

    执行计划

    Hive: 依赖于 MapReduce 执 行 框 架 , 执 行 计 划 分 成 map->shuffle->reduce->map->shuffle->reduce…的模型。如果一个 Query 会 被编 译成多轮 MapReduce,则会有更多的写中间结果。由于 MapReduce 执行框架本 身的特点,过多的中间过程会增加整个 Query 的执行时间。

    Impala: 把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行 计划到各个 Impalad 执行查询, 而不用像 Hive 那样把它组合成管道型的 map->reduce 模式,以此保证 Impala 有更好的并发性和避免不必要的中间 sort 与 shuffle。

    数据流

    Hive: 采用推的方式,每一个计算节点计算完成后将数据主动推给后续节点。

    Impala: 采用拉的方式,后续节点通过 getNext 主动向前面节点要数据,以 此方式数据可以流式的返回给客户端,且只要有 1 条数据被处理完,就可以立即 展现出来,而不用等到全部处理完成,更符合 SQL 交互式查询使用。

    内存使用

    Hive: 在执行过程中如果内存放不下所有数据,则会使用外存,以保证 Query 能顺序执行完。每一轮 MapReduce 结束,中间结果也会写入 HDFS 中,同样由于 MapReduce 执行架构的特性,shuffle 过程也会有写本地磁盘的操作。

    Impala: 在遇到内存放不下数据时,版本 1.0.1 是直接返回错误,而不会利用 外存,以后版本应该会进行改进。这使用得 Impala 目前处理 Query 会受到一定 的限制,最好还是与 Hive 配合使用。

    调度

    Hive: 任务调度依赖于 Hadoop 的调度策略。

    Impala: 调度由自己完成,目前只有一种调度器 simple-schedule,它会尽量 满足数据的局部性,扫描数据的进程尽量靠近数据本身所在的物理机器。调度器 目前还比较简单,在 SimpleScheduler::GetBackend 中可以看到,现在还没有考虑 负载,网络 IO 状况等因素进行调度。但目前 Impala 已经有对执行过程的性能统 计分析,应该以后版本会利用这些统计信息进行调度吧。

    容错

    Hive: 依赖于 Hadoop 的容错能力。

    Impala: 在查询过程中,没有容错逻辑,如果在执行过程中发生故障,则直 接返回错误(这与 Impala 的设计有关,因为 Impala 定位于实时查询,一次查询 失败, 再查一次就好了,再查一次的成本很低)。

    适用面

    Hive: 复杂的批处理查询任务,数据转换任务。

    Impala: 实时数据分析,因为不支持 UDF,能处理的问题域有一定的限制,与 Hive 配合使用,对 Hive 的结果数据集进行实时分析。

    相关文章

      网友评论

          本文标题:Apache Impala(一) 基本介绍

          本文链接:https://www.haomeiwen.com/subject/lhvsqktx.html