当前位置: 首页 > wzjs >正文

商城网站建设公司哪家好搜索引擎优化是免费的吗

商城网站建设公司哪家好,搜索引擎优化是免费的吗,外贸网站设计,web网站开发程序员摘要 数据倾斜是大数据处理中常见的性能瓶颈问题,本文提供可落地的解决方案。 一、数据倾斜的表现:分区负载不均的直观体现 现象描述:在分布式计算中,某个 / 某些分区承担远超其他分区的数据处理量,导致任务整体耗时…

摘要

数据倾斜是大数据处理中常见的性能瓶颈问题,本文提供可落地的解决方案。

一、数据倾斜的表现:分区负载不均的直观体现

现象描述:在分布式计算中,某个 / 某些分区承担远超其他分区的数据处理量,导致任务整体耗时被单个分区拖慢。
典型案例
在单词统计场景中,按首字母将结果分为a-pq-z两个文件。若a-p分区仅包含几百个单词,而q-z分区包含数百万单词,即发生严重数据倾斜。此时,处理q-z分区的 Reducer 会成为性能瓶颈,而其他 Reducer 处于空闲状态。

二、数据倾斜的核心成因分析

在 MapReduce/Hive 体系中,数据倾斜的本质是大量相同 Key 被分配至同一个 Reducer,常见诱因包括:

1. 数据类型不一致

场景:维度表与事实表 Join 时,字段类型隐式转换导致 Key 分布异常(如字符串与数值型混存)。

2. 大量 NULL 值的存在

场景 1:异常 NULL 值
如用户表中user_id为 NULL 的脏数据,导致所有 NULL 值在分组时汇聚到同一 Reducer。
优化思路:预处理过滤 NULL 值(WHERE user_id IS NOT NULL)。

场景 2:合法 NULL 值
如日志表中未登录用户的user_id为 NULL,需保留数据。
挑战:无法过滤,需特殊处理(见下文解决方案)。

3. 单表 Group By 操作

成因:分组键(如sex)分布不均,少量 Key 占据大量数据。

典型 SQL

SELECT sex, COUNT(*) FROM student GROUP BY sex;


sex='男'的数据量占比 90%,则处理该 Key 的 Reducer 负载显著高于其他 Reducer。

4. 多表 Join 操作

成因:Join 键分布不均,如班级表与学生表 Join 时,某班级(如class_id=10)包含上万学生,导致该 Key 对应的 Reducer 处理压力陡增。

三、单表 Group By 场景优化方案

方案 1:启用 Hive 参数实现负载均衡

通过以下参数开启 Map 端预聚合和分阶段处理:

-- 开启Map端聚合(默认true)
set hive.map.aggr = true;
-- 设置Map端聚合条目阈值
set hive.groupby.mapaggr.checkinterval = 100000;
-- 开启数据倾斜负载均衡(关键参数)
set hive.groupby.skewindata = true;

原理

  1. 第一阶段 MR:Map 输出随机分发至 Reducer,完成局部聚合(相同 Key 可能分散到不同 Reducer)。
  2. 第二阶段 MR:按真实 Key 重新分组,完成全局聚合。
    适用场景:聚合函数为COUNT/SUM且 Key 分布不均的场景。

方案 2:增加 Reducer 数量

通过调整mapreduce.job.reduces参数强制增加 Reducer 个数,分散单个 Key 的处理压力:

set mapreduce.job.reduces = 20; -- 视数据量调整

四、多表 Join 场景优化实践

场景复现:班级表与学生表 Join 的数据倾斜

表结构

student2(学生表):包含class_id(班级 ID)、name(姓名),其中class_id=10对应 6 条数据,其他班级数据量少。

class(班级表):包含id(班级 ID)、class_name(班级名称)。

优化前 SQL 与现象

-- 优化前查询
INSERT OVERWRITE LOCAL DIRECTORY '/home/hivedata/out/test01'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT s.class_id, s.name, c.class_name
FROM student2 s
JOIN class c ON s.class_id = c.id;

结果

class_id=10的 6 条数据集中在同一个 Reducer 输出文件(如000001_0),其他班级数据分布在不同文件,明显倾斜。

优化方案:大表打散 + 小表扩容

通过引入随机前缀(pin_id)将大表 Key 分散到多个 Reducer,同时扩容小表匹配前缀:

1. 大表打散(学生表)

class_id添加随机后缀(0/1/2):

CREATE TABLE student_test AS
SELECT *, CONCAT(class_id, '_', FLOOR(RAND()*10)%3) AS pin_id
FROM student2;

效果class_id=10的记录被随机分配到10_010_110_2三个 Key。

2. 小表扩容(班级表)

将每个id复制 3 份,分别添加后缀 0/1/2:

CREATE TABLE class_test AS
SELECT *, CONCAT(id, '_', '0') AS pin_id FROM class
UNION ALL
SELECT *, CONCAT(id, '_', '1') AS pin_id FROM class
UNION ALL
SELECT *, CONCAT(id, '_', '2') AS pin_id FROM class;
3. 重新 Join

基于pin_id进行连接,分散负载:

INSERT OVERWRITE LOCAL DIRECTORY '/home/hivedata/out/test02'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT s.class_id, s.name, c.class_name, c.pin_id,HASH(c.pin_id)%3 AS parNum -- 查看分区分布
FROM student_test s
JOIN class_test c ON s.pin_id = c.pin_id;

优化后结果

class_id=10的记录分散到parNum=0/1/2三个分区,Reducer 负载均衡(见下图):

plaintext

000000_0: class_id=10_0(2条)、11_2(1条)、12_1(1条)
000001_0: class_id=10_1(1条)
000002_0: class_id=10_2(3条)

五、总结:数据倾斜优化的核心思路

提前过滤:处理异常 NULL 值或无效数据。

打散重组:为倾斜 Key 添加随机前缀,拆分至多个 Reducer。

分阶段处理:通过两阶段 MR(如hive.groupby.skewindata)实现负载均衡。

优先 MapJoin:小表直接加载至内存,避免 Reducer 阶段(需设置hive.auto.convert.join=true)。

数据倾斜的优化需结合具体场景灵活选择方案,建议通过采样分析提前定位倾斜 Key,再针对性调整策略。

关键词:数据倾斜、Hive 优化、MapReduce、Group By、Join 优化
实战代码:本文示例代码可直接用于 Hive 环境调试,需根据实际表结构调整字段与路径。

http://www.dtcms.com/wzjs/131352.html

相关文章:

  • 重庆网站建设公司推荐会员制营销方案
  • 书签制作方法视频三门峡网站seo
  • 织梦网站采集如何做磁力兔子搜索引擎
  • 无锡设计网站找哪家营销推广的特点
  • 滨州做网站教育培训机构有哪些
  • 网站建设在会计里算什么资产百度关键词热搜
  • 福建做网站公司黄页88网站推广效果
  • python做网站视频教程火狐搜索引擎
  • 网站建设制作软件陕西新站seo
  • 聊城做网站的公司信息百度代做seo排名
  • dnf做汉堡怎么玩间网站免费找客户软件
  • 手机网站全屏百度搜索引擎官网入口
  • 成都网站制作电话短视频seo排名
  • 惠州做网站 百度优化如何做网页制作
  • 可信的大连网站建设知乎关键词优化软件
  • 用来做收录的网站如何在百度上发布广告
  • 那家网站做照片书好手机百度seo怎么优化
  • 长沙公司网站制作世界十大网站排名
  • 泰安招聘齐鲁人才网杭州seo培训
  • 保险公司网站建设方案搜外
  • 做文库网站怎么赚钱b2b网站源码
  • 如何做垂直网站优化课程体系
  • 有做的小说网站提高基层治理效能
  • 建站做网站哪家好今日头条站长平台
  • 网站开发规划书网络运营师
  • 大学生网站设计大作业手机版谷歌浏览器入口
  • 企业运营管理名词解释优化绿松石什么意思
  • 广州网站建设定制seo网页推广
  • 哪家网站建设服务好搜狗收录查询
  • 长春做网站用的软件专业seo优化公司