写点什么

使用 Apache Hadoop、Impala 和 MySQL 进行数据分析

  • 2014-05-08
  • 本文字数:2104 字

    阅读完需:约 7 分钟

Apache Hadoop 是目前被大家广泛使用的数据分析平台,它可靠、高效、可伸缩。Percona 公司的 Alexander Rubin 最近发表了一篇博客文章介绍了他是如何将一个表从MySQL 导出到Hadoop 然后将数据加载到 Cloudera Impala 并在这上面运行报告的。

在 Alexander Rubin 的这个测试示例中他使用的集群包含 6 个数据节点。下面是具体的规格:

用途

服务器规格

NameNode、DataNode、Hive 元数据存储等

2x PowerEdge 2950, 2x L5335 CPU @ 2.00GHz, 8 cores, 16GB RAM, 使用 8 个 SAS 驱动器的 RAID 10

仅做数据节点

4x PowerEdge SC1425, 2x Xeon CPU @ 3.00GHz, 2 cores, 8GB RAM, 单个 4TB 驱动器

数据导出

有很多方法可以将数据从 MySQL 导出到 Hadoop。在 Rubin 的这个示例中,他简单地将 ontime 表导出到了一个文本文件中:

select * into outfile ‘/tmp/ontime.psv’
FIELDS TERMINATED BY ‘,’
from ontime;

你可以使用“|”或者任何其他的符号作为分隔符。当然,还可以使用下面这段简单的脚本直接从 www.transtats.bts.gov 上下载数据。

for y in {1988…2013}
do
for i in {1…12}
do
u=“ http://www.transtats.bts.gov/Download/On_Time_On_Time_Performance_${y}_${i}.zip
wget $u -o ontime.log
unzip On_Time_On_Time_Performance_${y}_${i}.zip
done
done

载入 ****Hadoop HDFS

Rubin 首先将数据载入到了 HDFS 中作为一组文件。Hive 或者 Impala 将会使用导入数据的那个目录,连接该目录下的所有文件。在 Rubin 的示例中,他在 HDFS 上创建了 /data/ontime/ 目录,然后将本地所有匹配 On_Time_On_Time_Performance_*.csv 模式的文件复制到了该目录下。

$ hdfs dfs -mkdir /data/ontime/
$ hdfs -v dfs -copyFromLocal On_Time_On_Time_Performance_*.csv /data/ontime/

Impala中创建外部表

当所有数据文件都被载入之后接下来需要创建一个外部表:

CREATE EXTERNAL TABLE ontime_csv (
YearD int ,
Quarter tinyint ,
MonthD tinyint ,
DayofMonth tinyint ,
DayOfWeek tinyint ,
FlightDate string ,
UniqueCarrier string ,
AirlineID int ,
Carrier string ,
TailNum string ,
FlightNum string ,
OriginAirportID int ,
OriginAirportSeqID int ,
OriginCityMarketID int ,
Origin string ,
OriginCityName string ,
OriginState string ,
OriginStateFips string ,
OriginStateName string ,
OriginWac int ,
DestAirportID int ,
DestAirportSeqID int ,
DestCityMarketID int ,
Dest string ,

ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’
STORED AS TEXTFILE
LOCATION ‘/data/ontime’;

注意“EXTERNAL”关键词和 LOCATION,后者指向 HDFS 中的一个目录而不是文件。Impala 仅会创建元信息,不会修改表。创建之后就能立即查询该表,在 Rubin 的这个示例中执行的 SQL 是:

> select yeard, count(*) from ontime_psv group by yeard;

该 SQL 耗时 131.38 秒。注意 GROUP BY 并不会对行进行排序,这一点不同于 MySQL,如果要排序需要添加 ORDER BY yeard 语句。另外通过执行计划我们能够发现 Impala 需要扫描大小约为 45.68GB 的文件。

Impala**** 使用面向列的格式和压缩

Impala 最大的好处就是它支持面向列的格式和压缩。Rubin 尝试了新的使用Snappy 压缩算法的Parquet 格式。因为这个例子使用的表非常大,所以最好使用基于列的格式。为了使用Parquet 格式,首先需要载入数据,这在Impala 中已经有表、HDFS 中已经有文件的情况下是非常容易实现的。本示例大约使用了729 秒的时间导入了约1 亿5 千万条记录,导入之后使用新表再次执行同一个查询所耗费的时间只有4.17 秒,扫描的数据量也小了很多,压缩之后的数据只有3.95GB。

Impala**** 复杂查询示例

select
min(yeard), max(yeard), Carrier, count(*) as cnt,
sum(if(ArrDelayMinutes>30, 1, 0)) as flights_delayed,
round(sum(if(ArrDelayMinutes>30, 1, 0))/count(*),2) as rate
FROM ontime_parquet_snappy
WHERE
DayOfWeek not in (6,7) and OriginState not in (‘AK’, ‘HI’, ‘PR’, ‘VI’)
and DestState not in (‘AK’, ‘HI’, ‘PR’, ‘VI’)
and flightdate < ‘2010-01-01’
GROUP by carrier
HAVING cnt > 100000 and max(yeard) > 1990
ORDER by rate DESC
LIMIT 1000;

注意:以上查询不支持 sum(ArrDelayMinutes>30) 语法,需要使用 sum(if(ArrDelayMinutes>30, 1, 0) 代替。另外查询故意被设计为不使用索引:大部分条件仅会过滤掉不到 30% 的数据。

该查询耗时 15.28 秒比最初的 MySQL 结果(非并行执行时 15 分 56.40 秒,并行执行时 5 分 47 秒)要快很多。当然,它们之间并不是一个“对等的比较”:

  • MySQL 将扫描 45GB 的数据而使用 Parquet 的 Impala 仅会扫描 3.5GB 的数据
  • MySQL 运行在一台服务器上,而 Hadoop 和 Impala 则并行运行在 6 台服务器上

尽管如此,Hadoop 和 Impala 在性能方面的表现依然令人印象深刻,同时还能够支持扩展,因此在大数据分析场景中它能为我们提供很多帮助。


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-05-08 08:367730
用户头像

发布了 321 篇内容, 共 124.0 次阅读, 收获喜欢 19 次。

关注

评论

发布
暂无评论
发现更多内容

Loopback for Mac:打造专业音频环境,一键开启高效录音之旅!

Rose

基于 Three.js 的 3D 模型加载优化

vivo互联网技术

rust webassembly 3D模型 three.js web3d

CVPR2024论文解读|对齐人类审美!MPS让图像生成评估更“懂你”

快手技术

开源 #大模型

解读「快意」大模型关键技术,揭秘实践中的挑战与创新

快手技术

NLP 大模型 #大模型

星辰考古:TiDB v4.0 进化前夜

TiDB 社区干货传送门

版本升级 版本测评 新版本/特性解读

API Token 是什么?深入介绍与实践指南

Apifox

程序员 安全 Token API

基于LangChain手工测试用例生成工具

测吧(北京)科技有限公司

测试

人工智能与情感分析:理解情感,驱动未来

天津汇柏科技有限公司

情感分析 人工智能’

什么?for循环也会出问题?

阿里技术

for循环 故障排查

初识langchain:LLM大模型+Langchain实战[qwen2.1、GLM-4]+Prompt工程

汀丶人工智能

AI大模型

国内大模型LLM选择以及主流大模型快速使用教程[GLM4/Qwen/Baichuan/Coze/Kimi]

汀丶人工智能

AI大模型

TiDB实践—索引加速+分布式执行框架创建索引提升70+倍

TiDB 社区干货传送门

7.x 实践

FinClip 强势登陆 AWS Marketplace,全球扩展战略迈出关键一步

FinClip

tidb源码研究分析日常碰到的bug

TiDB 社区干货传送门

TiDB 源码解读 6.x 实践 TiKV 源码解读

tidb7.5.1压测

TiDB 社区干货传送门

性能测评 7.x 实践

FlagEval 7月榜丨新增29个模型评测结果,智源发布评估技术报告《AI大模型能力全景扫描》

智源研究院

降低大模型推理87%时延!华为云论文入选顶会USENIX ATC'24

华为云开发者联盟

人工智能 存储 华为云开发者联盟 LLM 企业号2024年7月PK榜

GPT被封锁了怎么办?轻松获取高质量的数据,训练自己的人工智能和大语言模型。

热爱编程的小白白

降成本,提人效:火山引擎VeDI实验平台架构升级

字节跳动数据平台

大数据 A/B 测试 数字化增长

玳数科技集成 Flink CDC 3.0 的实践

Apache Flink

大数据 flink Flink CDC chunjun

Pgsql 全量+增量迁移 tidb7.5

TiDB 社区干货传送门

7.x 实践

基于YMP工具实现Oracle迁移YashanDB

YashanDB

yashandb 崖山数据库 崖山DB

过等保时候常提到的堡垒机是什么?有什么用?

行云管家

等保 堡垒机 等级保护 过等保

AI心灵伙伴:数业智能心大陆如何提升年轻成人的心理健康?

心大陆多智能体

压力 智能体 AI大模型 心理健康 数字心理

Autodesk AutoCAD 2021中文版详细图文安装教程 mac/win

Rose

【第七在线】智能推算辅助选品组货 驱动零售品牌业绩增长

第七在线

铜线工厂生产管理MES系统解决方案

万界星空科技

mes 万界星空科技 铜线mes 生产管理软件 铜线工厂

基于LangChain手工测试用例生成工具

测试人

软件测试

utf8mb4 默认排序规则引起的索引失效

TiDB 社区干货传送门

应用适配 数据库连接

江苏企业采购堡垒机推荐哪家?为什么?

行云管家

堡垒机 过等保 江苏

2024 TDengine 用户大会:顶尖专家带你决胜 AI 新时代

TDengine

使用Apache Hadoop、Impala和MySQL进行数据分析_数据库_孙镜涛_InfoQ精选文章