第10章Impala设计原则与应用案例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/myvanguard/article/details/86522342

10.1设计原则

1.硬件规划

如果对一个已有的CDH集群使用Impala技术,在硬件层面上我们最需要关注的点就是内存:因为Impala要将数据全部读入内存才进行运算,我们必须要保证内存能够装载下所需要的表或者分区的数据。

2.模型设计

在传统的应用开发流程中,我们需要对数据库进行物理设计,这里的模型设计与传统的物理设计类似。

  • 存储方式:强烈建议使用Parquet方式存储。

  • 分区方式:条件列的区分度如何?选择合适的分区,能够大大提升查询的效率。

  • 内部表&外部表:使用内部表,在各方面的控制上更为灵活

  • 资源控制:Hadoop的其他类型的作业是否会与Impala的查询并行执行?使用YARN来管理lmpala的资源控制,还是Impala使用自身的机制进行管理?

3.数据加载

  • 文件加载:如果外部数据源有现成的Impala支持的数据文件,可以通过HDFS文件系统的命令,或者基于WebHDFS和HttpFS的API来编写代码实现。
  • 结构化数据加载:使用Sqoop将关系型数据库中全量,或者增量的数据(依据一定的条件)加载到HDFS上。
--使用sqoop 从SQLserver把数据导入到hive
import --connect jdbc:sqlserver://ip:port;DatabaseName=test --username admin --password 123456 --table bwh_big_client_flight --split-by id --target-dir /user/guestuser/oas/tables/bwh_big_client_flight_for_import --delete-target-dir --fields-terminated-by "\t" -m 1

--hive创建外部表导入数据
create external table bwh_big_client_flight_for_import
(id	string,
company	string,
month	string,
customer_card_no string,
customer_full_name string,
carrier string,
each_flight_num string,
total_income string,
create_time	string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
location '/user/guestuser/oas/tables/bwh_big_client_flight_for_import';

--外部表数据转换为内部表
create view bwh_big_client_flight_view as
SELECT 
id,
company,
month,
customer_card_no,
customer_full_name,
carrier,
cast(each_flight_num as decimal(10, 0))each_flight_num,
cast(total_income as decimal(15, 5))total_income,
create_time
FROM bwh_big_client_flight_for_import;
  • 基于事件的数据加载:对于源端的数据变化必须很快反映到目标数据中的情况。我们可以考虑使用Flume来实现。

4.数据处理

利用lmpala提供的强大的SQL功能,根据应用不同的需求对数据进行查询处理。

explain select count(*) from bwh_big_client_flight_for_import;

5.数据返回

处理完成的数据,我们可以通过JDBC接口来调用,比如,可以给BI工具做报表展现使用。

10.2应用案例

1.硬件规划

某保险公司原有CDH4.6集群有数据节点35个,数据节点28CoreCPU,内存32GB,硬盘22TB。经调查,最大单表的数据量为3TB左右。那么平均每个节点的内存量应该为:
3TB/35=86GB考虑到可扩展及其他因素,增加每个节点的内存到96GB,相当于每个节点再加10GB。

2.模型设计

模型设计使用下面方式:

  • 存储方式:使用Parquet文件存储。
  • 分区方式:表依据最常用的ACTYR、GEOST、ALINE、COMPNY字段分区。
  • 内部表&外部表:原有数据使用CSV方式存储,需要使用Impala内部表。
  • 资源控制:将Impala即席查询任务与Hadoop其他批处理任务错峰执行,使用Impala自身的资源控制机制。

3.数据加载

原有CSV文件已经存储在HDFS上,使用LOADDATA先将数据加载到lmpala外部表,再通过外部表将数据复制到基于Parquet的Impala内部表,完成数据转换。

4.数据处理

完成按照不同维度对数据进行实时统计分析。使用explain 来预执行

5.数据返回

将查询到的结果通过Tableau进行报表展示。

猜你喜欢

转载自blog.csdn.net/myvanguard/article/details/86522342