impala入门与实践

1.impala基本介绍

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

impala是基于hive并使用内存进行计算,兼顾数据仓库,具有实时,批处理,多并发等优点

Impala下载官网:

Impala

2.Impala与hive的关系

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

Hive元数据包含用Hive创建的database、table等元信息。元数据存储在关系型数据库中,如Derby、MySQL等。

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

Hive适合于长时间的批处理查询分析,而Impala适合于实时交互式SQL查询。可以先使用hive进行数据转换处理,之后使用Impala在Hive处理后的结果数据集上进行快速的数据分析。

3.Impala与hive的异同

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

但是Impala跟Hive最大的优化区别在于:没有使用 MapReduce进行并行计算,虽然MapReduce是非常好的并行计算框架,但它更多的面向批处理模式,而不是面向交互式的SQL执行。与 MapReduce相比,Impala把整个查询分成一执行计划树,而不是一连串的MapReduce任务,在分发执行计划后,Impala使用拉式获取数据的方式获取结果,把结果数据组成按执行树流式传递汇集,减少的了把中间结果写入磁盘的步骤,再从磁盘读取数据的开销。Impala使用服务的方式避免每次执行查询都需要启动的开销,即相比Hive没了MapReduce启动时间。

  • 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的结果数据集进行实时分析

4.Impala的优缺点

1)优点
  • 基于内存运算,不需要把中间结果写入磁盘,省掉了大量的I/O开销。
  • 无需转换为Mapreduce,直接访问存储在HDFS,HBase中的数据进行作业调度,速度快。
  • 使用了支持Data locality(数据本地化)的I/O调度机制,尽可能地将数据和计算分配在同一台机器上进行,减少了网络开销。
  • 支持各种文件格式,如TEXTFILE 、SEQUENCEFILE 、RCFile、Parquet。
  • 可以访问hive的metastore,对hive数据直接做数据分析。
2)缺点
  • 对内存的依赖大,且完全依赖于hive。
  • 实践中,分区超过1万,性能严重下降。
  • 只能读取文本文件,而不能直接读取自定义二进制文件。
  • 每当新的记录/文件被添加到HDFS中的数据目录时,该表需要被刷新。

5.Impala支持的文件格式

Impala可以对Hadoop中大多数格式的文件进行查询。它能通过create table和insert的方式将一部分格式的数据加载到table中,但值得注意的是,有一些格式的数据它是无法写入的(write to)。对于Impala无法写入的数据格式,我们只能通过Hive建表,通过Hive进行数据的写入,然后使用Impala来对这些保存好的数据执行查询操作。

文件类型

文件格式

压缩编码

能否Create?

能否Insert?

Parquet

结构化

Snappy、GZIP

Text

非结构化

LZO

能。 如果建表时没有指定存储类型,默认采用未压缩的text,字段由ASCII编码的0x01字符串分割

能 如果使用了LZO压缩,则只能通过Hive建表和插入数据。

Avro

结构化

Snappy GZIP Deflate BZIP2

在Impala 1.4.0 或者更高的版本上支持,之前的版本只能通过Hive来建表。

不能 只能通过LOAD DATA的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据

RCFile

结构化

Snappy GZIP Deflate BZIP2

不能 只能通过LOAD DATA的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据

SequenceFile

结构化

Snappy GZIP Deflate BZIP2

不能 只能通过LOAD DATA的方式将已经转换好格式的数据加载进去,或者使用Hive来插入数据

Impala支持以下压缩编码:

  • Snappy – 推荐的编码,因为它在压缩率和解压速度之间有很好的平衡性,Snappy压缩速度很快,但是不如GZIP那样能节约更多的存储空间。Impala不支持Snappy压缩的text file
  • GZIP – 压缩比很高能节约很多存储空间,Impala不支持GZIP压缩的text file
  • Deflate – Impala不支持GZIP压缩的text file
  • BZIP2 - Impala不支持BZIP2压缩的text file
  • LZO – 只用于text file,Impala可以查询LZO压缩的text格式数据表,但是不支持insert数据,只能通过Hive来完成数据的insert

6.Impala的架构

Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具(实时SQL查询引擎Impala),通过使用与商用并行关系数据库中类似的分布式查询引擎(由Query Planner、Query Coordinator和Query ExecEngine三部分组成),可以直接从HDFS或HBase中用SELECT、JOIN和统计函数查询数据,从而大大降低了延迟。

Impala由三个服务组成:impalad, statestored, catalogd。

  • Impalad: 与DataNode运行在同一节点上,由Impalad进程表示,一个datanode对应一个impalad,它接收客户端的查询请求(接收查询请求的Impalad为Coordinator,Coordinator通过JNI调用java前端解释SQL查询语句,生成查询计划树,再通过调度器把执行计划分发给具有相应数据的其它Impalad进行执行),读写数据,并行执行查询,并把结果通过网络流式的传送回给Coordinator,由Coordinator返回给客户端。同时Impalad也与State Store保持连接,用于确定哪个Impalad是健康和可以接受新的工作。在Impalad中启动三个ThriftServer: beeswax_server(连接客户端),hs2_server(借用Hive元数据), be_server(Impalad内部使用)和一个ImpalaServer服务。
  • Impala State Store: 跟踪集群中的Impalad健康状态及位置信息,由statestored进程表示,它通过创建多个线程来处理Impalad的注册订阅和与各Impalad保持心跳连接,各Impalad都会缓存一份State Store中的信息,当State Store离线后(Impalad发现State Store处于离线时,会进入recovery模式,反复注册,当State Store重新加入集群后,自动恢复正常,更新缓存数据)因为Impalad有State Store的缓存仍然可以工作,但会因为有些Impalad失效了,而已缓存数据无法更新,导致把执行计划分配给了失效的Impalad,导致查询失败。
  • Catalogd作为metadata访问网关,从Hive Metastore等外部catalog中获取元数据信息,放到impala自己的catalog结构中。impalad执行ddl命令时通过catalogd由其代为执行,该更新则由statestored广播。
  • CLI: 提供给用户查询使用的命令行工具(Impala Shell使用python实现),同时Impala还提供了Hue,JDBC, ODBC使用接口

7.Impapla如何执行查询

Impala执行的查询有以下几个步骤:

第一步:客户端通过ODBC、JDBC、或者Impala shell向Impala集群中的任意节点发送SQL语句,这个节点的impalad实例作为这个查询的协调器(coordinator)

第二步:Impala解析和分析这个查询语句来决定集群中的哪个impalad实例来执行某个任务,HDFS和HBase给本地的impalad实例提供数据访问

第三步:各个impalad向协调器impalad返回数据,然后由协调器impalad向client发送结果集

8.下载:

可以直接在原来我们安装好的CDH(建议提前拍好快照)安装Impala

在已安装好Hadoop,hive的基础上

打开CDH虚拟机,之后访问网址http://192.168.204.132:7180/cmf/login

通过以下命令访问impala页面:

impala-shell

21000是impala交互的端口

可以通过下面的链接来访问Impala的监护管理页面:

• 查看StateStore

http://192.168.204.132:25020/

• 查看Catalog

http://192.168.204.132:25010/

9.代码练习

展示所有数据库:show databases;
创建数据库: create database yhbd;
使用数据库:use yhbd;
展示数据库中所有的表:show tables;创建表:create table student(id int, name string) row format delimited fields terminated by '\t';先将文件上传到HDFS上
[root@CDH home]# hdfs dfs -put /home/student.txt /home/impala
然后加载数据
[CDH:21000] yhbd>  load data inpath "/home/impala/student.txt" into table student;
如出现以下问题:

创建用户:

给用户赋予root权限:

[root@CDH ~]# vim /etc/sudoers

[root@CDH ~]# cat /etc/sudoers

[root@CDH ~]# chmod +w /etc/sudoers
[root@CDH ~]# vi /etc/sudoers
[root@CDH ~]# su liuyan               #登录用户
[liuyan@CDH root]$ hadoop fs -chmod 777 /
chmod: changing permissions of '/': Permission denied. user=liuyan is not the owner of inode=/
[liuyan@CDH root]$ hdfs dfs -mkdir -p /home/impala
[liuyan@CDH root]$ hadoop fs -chmod 777 /home/impala因为Impala使用impala用户操作hdfs 所以没有权限 (hadoop操作用户是使用 hdfs 通过 hdfs dfs -ls / 查看)
系统使用hdfs超级用户登录修改 /home/impala 目录的拥有者是 impala重新上传并加载数据
[root@CDH ~]# hdfs dfs -put /home/student.txt /home/impala[CDH:21000] yhbd> load data inpath "/home/impala/student.txt" into table student;
Query: load data inpath "/home/impala/student.txt" into table student
+----------------------------------------------------------+
| summary                                                  |
+----------------------------------------------------------+
| Loaded 1 file(s). Total files in destination location: 1 |
+----------------------------------------------------------+
Fetched 1 row(s) in 0.74s
[CDH:21000] yhbd> select * from student;
useradd xiaoliu  创建普通用户
passwd  xiaoliiu  设置密码超级管理员切换到普通用户:su	xiaoliiu
退出普通用户:	exit;

impala教程:

impala 环境_w3cschool

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结构方程模型(SEM)入门到精通:lavaan VS piecewiseSEM、全局估计/局域估计;潜变量分析、复合变量分析、贝叶斯SEM在生态学领域应用

目录 第一章 夯实基础 R/Rstudio简介及入门 第二章 结构方程模型(SEM)介绍 第三章 R语言SEM分析入门:lavaan VS piecewiseSEM 第四章 SEM全局估计(lavaan)在生态学领域高阶应用 第五章 SEM潜变量分析在生态学领域…

小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你

说在前面 之前我们体验过妙享中心,里面就有互联互通的全部能力,现在有了小米电脑管家,老款的笔记本竟然用不了,也可以理解,毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁,至于其他品牌的winPC小米…

python爬虫案例——猫眼电影数据抓取之字体解密,多套字体文件解密方法(20)

文章目录 1、任务目标2、网站分析3、代码编写1、任务目标 目标网站:猫眼电影(https://www.maoyan.com/films?showType=2) 要求:抓取该网站下,所有即将上映电影的预约人数,保证能够获取到实时更新的内容;如下: 2、网站分析 进入目标网站,打开开发者模式,经过分析,我…

一分钟食用前端测试框架Jest

安装 其实食用Jest是很简单的,我们只需要安装Jest即可 npm install --save-dev jestyarn add --dev jestpnpm add --save-dev jest ESmodule 本身来说,Jest是不支持Esmodule的,他支持CommonJS,我们需要Babel改一下 npm i --save-dev babel-jest babel/core babel/preset-env …

从 App Search 到 Elasticsearch — 挖掘搜索的未来

作者:来自 Elastic Nick Chow App Search 将在 9.0 版本中停用,但 Elasticsearch 拥有你构建强大的 AI 搜索体验所需的一切。以下是你需要了解的内容。 生成式人工智能的最新进展正在改变用户行为,激励开发人员创造更具活力、更直观、更引人入…

若依框架部署在网站一个子目录下(/admin)问题(

部署在子目录下首先修改vue.config.js文件: 问题一:登陆之后跳转到了404页面问题,解决办法如下: src/router/index.js 把404页面直接变成了首页(大佬有啥优雅的解决办法求告知) 问题二:退出登录…

【贪心算法第六弹——334.递增的三元子序列(easy)】

目录 1.题目解析 题目来源 测试用例 2.算法原理 3.实战代码 代码解析 本题属于最长递增子序列的简化版本,只需要判断能不能组成三位的递增子序列即可,建议先去看博主的另一篇博客可以更好的理解本篇博客:300.最长递增子序列 1.题目解析…

《TCP/IP网络编程》学习笔记 | Chapter 16:关于 I/O 流分离的其他内容

《TCP/IP网络编程》学习笔记 | Chapter 16:关于 I/O 流分离的其他内容 《TCP/IP网络编程》学习笔记 | Chapter 16:关于 I/O 流分离的其他内容分离 I/O 流2 次 I/O 流分离分离「流」的好处「流」分离带来的 EOF 问题 文件描述符的的复制和半关闭终止「流」…

LeetCode数组题

参考链接 代码随想录 讲解视频链接 数组题 1、(两数之和)给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案,并且你不能使用…

Unity-Lightmap入门篇

::这是一个实战文章,并没有知识分享,或理论知识;完全没有 关键字: “lightmap","全局光照”,“light Probe" (会混合一些中英文搜索,或者全英文搜索) …

海康VsionMaster学习笔记(学习工具+思路)

一、前言 VisionMaster算法平台集成机器视觉多种算法组件,适用多种应用场景,可快速组合算法,实现对工件或被测物的查找测量与缺陷检测等。VM算法平台依托海康威视在图像领域多年的技术积淀,自带强大的视觉分析工具库,可…

Python双向链表、循环链表、栈

一、双向链表 1.作用 双向链表也叫双面链表。 对于单向链表而言。只能通过头节点或者第一个节点出发,单向的访问后继节点,每个节点只能记录其后继节点的信息(位置),不能向前遍历。 所以引入双向链表,双…

【数据结构笔记】习题

渐进分析 【2010-THU-Mid】f(n) O(g(n)),当且仅当g(n) Ω(f(n))。(√) 【2010-THU-Mid】若f(n) O(n^2)且g(n) O(n),则以下结论正确的是(AD) A. f(n) g(n) O(n^2) B. f(n) / g(n) O(n) C. g(n) O(f(…

ES实用面试题

一、es是什么,为什么要用它? ES通常是Elasticsearch的简称,它是一个基于Lucene构建的开源搜索引擎。Elasticsearch以其分布式、高扩展性和实时数据分析能力而闻名,广泛用于全文搜索、日志分析、实时监控等多种场景。 基本特点&am…

适用于学校、医院等低压用电场所的智能安全配电装置

引言 电力,作为一种清洁且高效的能源,极大地促进了现代生活的便捷与舒适。然而,与此同时,因使用不当或维护缺失等问题,漏电、触电事件以及电气火灾频发,对人们的生命安全和财产安全构成了严重威胁&#xf…

智能桥梁安全运行监测系统守护桥梁安全卫士

一、方案背景 桥梁作为交通基础设施中不可或缺的重要组成部分,其安全稳定的运行直接关联到广大人民群众的生命财产安全以及整个社会的稳定与和谐。桥梁不仅是连接两地的通道,更是经济发展和社会进步的重要纽带。为了确保桥梁的安全运行,桥梁安…

【Python爬虫五十个小案例】爬取豆瓣电影Top250

博客主页:小馒头学python 本文专栏: Python爬虫五十个小案例 专栏简介:分享五十个Python爬虫小案例 🪲前言 在这篇博客中,我们将学习如何使用Python爬取豆瓣电影Top250的数据。我们将使用requests库来发送HTTP请求,…

Java基础 设计模式——针对实习面试

目录 Java基础 设计模式单例模式工厂模式观察者模式策略模式装饰器模式其他设计模式 Java基础 设计模式 单例模式 单例模式(Singleton Pattern) 定义:确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。适用场景&…

PGSQL学习笔记 -- 从入门到放弃

pgsq学习笔记 一、基本语法(一)增删改查(二)PostgreSQL 语法详细介绍及示例 二、数据类型(一)基本数据类型(二)复合类型(三)JSON 和 XML 数据类型&#xff08…

P1198 [JSOI2008] 最大数

P1198 [JSOI2008] 最大数https://www.luogu.com.cn/problem/P1198 牵制芝士:单调队列 思路: 我们的任务是找出一个区间最大值的 因为插入的数与上一次的答案有关 所以它是强制在线的(真无语了) 我们可以在每次插入时整一个叫…