Hadoop学习
2024-03-09 12:13:06 0 举报
AI智能生成
登录查看完整内容
Hadoop学习是指掌握大数据处理技术的过程,该技术以Hadoop框架为核心。Hadoop是一个由Apache开发的开源软件,主要用于分布式存储和计算,能够处理大数据量。学习Hadoop包括理解其核心组件如Hadoop分布式文件系统(HDFS)、MapReduce以及YARN等。学习者需要掌握如何配置Hadoop环境,如何使用MapReduce进行数据分析,以及如何优化Hadoop集群以提高性能。此外,学习Hadoop还需了解如何与其他大数据工具集成,如Hive、性能优化等,以提高数据处理的效率。
作者其他创作
大纲/内容
Hadoop Distribute File System,Hadoop 分布式⽂件系统
分布式存储服务
储存超大规模数据
定义
文件切分:将文件切分成block上传存储在hadoop
上传,访问文件,与namenode交互,获取文件信息
与datanode交互,读写数据
提供命令管理HDFS
HDFSclient
分割多少块
每块大小
每个块的路径
记录元数据信息,
管理块的映射信息
配置副本策略
处理客户端读写请求
datanode01
datanode02
datanode03
datanode ......
从datanode调用
分割储存
namenode
听命于namenode
存储实际数据块
执行数据块的 i/o 操作
datanode
分担工作量
辅助namenode
并非NN的热备,NN挂掉时不能马上替换NN提供服务
secondary namenode
HDFS基本操作
查看备注或连接
Hadoop (HDFS)分布式文件系统基本操作
组件
Client node通过Distributed FileSystem模块向Namenode请求上传文件
正常就通知client node可以上传
存在则返回异常,停止上传
Namenode会检查目标文件是否已存在
client node会向namenode请求第一个block上传到哪一个data node上
namenode会给client node返回若干个atanode节点的信息(根据当前HDFS文件系统设置)
distributed filesystem会向client node返回一个支持文件定位的输出流对象,FSData Outputstream用于client node写数据
client node通过FSData Outputstream模块请求向Datenode 1(假设三个datanode)上传数据
datenode 1收到请求会继续调用datenode 2,然后 dn2调用dn3将这个通信管道建立完成
dn1每传一个packet会放入一个应答队列,等待应答
当一个block传输完成之后,客户端再次向namenode请求上传第二个block的datanode节点列表
开始新一轮的数据上传操作
写入数据(上传)
HDFS通过这样的一个逐级传输,逐级反馈的写入流程,保证了每个datanode上保存的副本数据都是一致的。链式的写入方式
Client node通过Distributed file system向namenode请求获得的文件的开始部分或全部block列表(列表中对于每个返回的block都包含其对应数据所在的datenode地址)
对应的datenode会按照hadoop的定义的集群拓扑结构计算得出与client node之间的距离,排序
client node会优先从距离最近的datanode上读取数据,在极端条件下,如果client node本身就是一个datanode且保存要读取的数据,那么它将从本地读取数据
用来管理data node和。和namenode之间的I/O
FSDataInputstream包含dfsinputstream对象
distributed filesystem会向client node返回一个支持文件定位的输入流对象,FSDataInputstream,用于client node读取数据
开始读数据时clientnode会调用read()方法
若有读取失败等异常情况,dfsinputstream会尝试连接下一个离它最近的datanode
dfsinputstream就会找出离client node最近的datanode,并连接datanode
连接成功后在数据流中重复调用read函数,直到这个块儿全部读完为止
当第一个block块儿的数据读完就会关闭指向第一个block块儿的data node连接,接着读取下一个block块儿
第一批block都读取,完了dfsinputstream就会去namenode拿下一批block的地址信息,然后继续读
所有的block块儿都读完,这时就会关闭掉所有的流,最终读取出来的所有的block块儿合并成一个完整的最终文件
读取数据(下载)
就近读取,加快读取速率
读写流程
HDFS
分布式处理和计算
把输入的数据经过切割,全部标记1,因此输出就是<单词,1>。
将复杂任务分解成若干个简单的任务
map
本意是洗牌、混洗的意思
在MapReduce中,指的是将map端的无规则输出,按指定的规则“打乱”成具有一定规则的数据,以便reduce端接收处理
经过MR程序内部自带默认的排序分组等功能,把key相同的单词会作为一组数据构成新的kv对。
从Map产生输出开始到Reduce取得数据作为输入之前的过程称作shuffle
shuffle
处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是单词的总次数。
对map阶段的结果全局汇总
reduce
三个map task
三个切片
txt1 300m
两个map task
两个切片
txt2 200m
逻辑切片规划/ 例如:→
·第一阶段∶把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认切片大小Split size = Block size ( 128M ),每一个切片由一个MapTask处理。( getSplits )·
第四阶段∶按照一定的规则对Map输出的键值对进行分区partition。默认不分区,因为只有一个reducetask.分区的数量就是reducetask运行的数量。
第五阶段:Map输出数据写入内存缓冲区memory buffer,达到比例溢出到磁盘上(溢写)。溢出spill的时候根据key进行排序sort。默认根据key字典序排序。
·第六阶段:对所有溢出文件进行最终的merge合并,成为一个文件。
Map阶段执行过程
第一阶段:ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据。
第二阶段︰把拉取来数据,全部进行合并merge,即把分散的数据合并成一个大的数据。再对合并后的数据排序。
第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。
Reduce阶段执行过程
Collect阶段∶将MapTask的结果收集输出到默认大小为100M的环形缓冲区,保存之前会对key进行分区的计算,默认Hash分区
Spill阶段:当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了combiner,还会将有相同分区号和key的数据进行排序。
Merge阶段︰把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。
Map端Shuffle过程
Copy阶段: ReduceTask启动Fetcher线程到已经完成MapTask的节点上复制一份属于自己的数据。
Merge阶段∶在ReduceTask远程复制数据的同时,会在后台开启两个线程对内存到本地的数据文件进行合并操作。
Sort阶段∶在对数据进行合并的同时,会进行排序操作,由于MapTask阶段已经对数据进行了局部的排序,ReduceTask只需保证Copy的数据的最终整体有效性即可。
Reduce端Shuffle过程
Shuffle是MapReduce程序的核心与精髓,是MapReduce的灵魂所在
Shuffle也是MapReduce被诟病最多的地方所在。MapReduce相比较于Spark、Flink计算引擎慢的原因,跟Shuffle机制有很大的关系。
Shuffle中频繁涉及到数据在内存、磁盘之间的多次往复。
shuffle机制弊端
shuffle机制
技术层面运算过程
整体流程
mapreduce
调度资源
管理任务
是hadoop集群中的资源管理调度系统
调度器根据容量、队列等限制条件,将系统中的资源分配给各个正在运行的应用程序。调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位是Container。Shceduler不负责监控或者跟踪应用程序的状态。总之,调度器根据应用程序的资源要求,以及集群机器的资源情况,为应用程序分配封装在 Container中的资源。
调度器(Scheduler)
应用程序管理器负责管理整个系统中所有应用程序,包括应用程序提交、与调度器协商资源以启动ApplicationMaster、监控 ApplicationMaster运行状态并在失败时重新启动等,跟踪分给的Container的进度、状态也是其职责。
应用程序管理器(Applications Manager)
主要由两个组件构成:调度器和应用程序管理器:
ResourceManager(RM)
NodeManager是每个节点上的资源和任务管理器。它会定时地向 ResourceManager汇报本节点上的资源使用情况和各个Container的运行状态;同时会接收并处理来自ApplicationMaster的Container启动/停止等请求。
NodeManager(NM)
用户提交的应用程序均包含一个ApplicationMaster,负责应用的监控,跟踪应用执行状态,重启失败任务等。ApplicationMaster是应用框架,它负责向 ResourceManager协调资源,并且与NodeManager协同工作完成Task的执行和监控。
ApplicationMaster(AM)
Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当ApplicationMaster向ResourceManager申请资源时,ResourceManager为ApplicationMaster返回的资源便是用Container表示的。
Container
主要组件
主从结构,master/slave
Yarn
Hadoop三大组件
底层是java语言
MapReduce 开发难度大
项目周期长
成本大
使用MapReduce框架进行开发
HDFS 文件没有字段名,没有数据类型,不方便进行数据的有效管理
直接使⽤MapReduce处理⼤数据问题
产生背景
将SQL转换为MapReduce的任务进⾏计算
Hive处理的数据存储在HDFS
Hive分析数据底层的实现是MapReduce
执行程序运行在Yarn上
是工具,并非数据库
是基于hadoop的⼀个数据仓库⼯具
把结构化的数据⽂件映射为⼀张表(类似RDBMS中的表),并提供类似SQL查询功能
底层由HDFS来提供数据存储;
1)操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
2)避免了去写MapReduce,减少开发人员的学习成本
离线数据分析
3)Hive优势在于处理大数据,对于处理小数据没有优势,因为Hive的执行延迟比较高
4)Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
优点
Hive自动生成的MapReduce作业,通常情况下不够智能化
Hive调优比较困难,粒度较粗
1)Hive的效率比较低
迭代式算法无法表达
数据挖掘方面不擅长
2)Hive的HQL表达能力有限
缺点
优缺点
如图
与关系型数据库对比
hive ql中没有number 、varchar2
常用:int 、string
基本数据类型
array
案例
集合型数据类型
CAST('1' AS INT)
CAST
类型转换
hive 数据类型
create database if not exists odscomment 'data warehouse ods'location '/ods';
create database [if not exists] database_name -- 创建数据库[comment dtabase_comment][location hdfs_path];
创库
对库的一些命令:查看、删除、切换
修改库
语法
退出后不保存
临时表
temporary table
因为数据由hdfs管理
外部表
external table
hive自己管理
内部表/管理表
table
创表
内转外→alter table student2 set tblproperties('EXTERNAL'='TRUE');外传内→alter table student2 set tblproperties('EXTERNAL'='FALSE');
转换
--以month字段分区,
partitioned by (month string)
针对存储路径分,分文件夹
分区表
转化hash code ,和4做hash运算来分,一般取余
以id字段分4个桶
clustered by(id) into 4 buckets
针对的文件分,分数据文件
分桶表
create table ods_emp2 as select * from test.ods_emp1;
表结构和数据 as
create table ods_emp4 like ods_emp2 location '/test/ods_emp2';
表结构
复制表
ALTER TABLE table_name RENAME TO new_table_name
重命名
alter table dept_partition add columns(deptdesc string);
添加列
替换列
alter table dept_partition change column deptdesc desc int;
更新列
修改表
drop table dept_partition;
ALTER TABLE xxx SET TBLPROPERTIES('EXTERNAL'='False');drop table xxx;
转成内部表再删
删除元数据信息后,去HDFS删除数据
删外部表
删表
DDL
可以先分区再分桶
向表中加载load
基本插入
查询插入
多插入
向表中插入insert
create table as select.........
As select
import table student2 partition(month='201709') from '/opt/hive/warehouse/export/student';
Import数据到指定Hive表中
多个分区时
不同文件分别加载到不同分区
静态分区
set hive.exec.dynamic.partition=true;
开动态分区
set hive.exec.dynamic.partition.mode=nonstrict;
设置非严格模式
同一文件,加载到普通表后再通过查询插入分区表
动态分区
set hive.enforce.bucketing=true;
开启分桶
set mapreduce.job.reduces=3;
设置reduce个数
文件加载到普通表后通过查询插入分桶表
导入分桶表
数据导入
insert overwrite local directory '/opt/datas' select * from dept_partition;
查询结构导出
insert overwrite local directory '/opt/datas/dept1'row format delimitedfields terminated by '|'select * from dept_partition;
查询结果格式化导出
本地
insert overwrite directory '/opt/datas/dept'row format delimitedfields terminated by '|'select * from dept_partition;
HDFS没有(local)
Insert导出
dfs -get /opt/hive/warehouse/employee/employee.txt /opt/datas/dept2/dept.txt;
Hadoop命令导出到本地
export table hivetest.dept_partition to '/opt/datas/dept2';
Export导出到HDFS上
数据导出
Trancate table
清除数据
DML
DQL
HIVE语法
分支主题
hive 总
HIVE
可以通过hive-site.xml文件中的hive.execution.engine属性控制
Hive支持的执行引擎:MapReduce,Tez,Spark
(要求引擎为Tez,文件格式为ORC)一次批量执行1024行而非一行来提高扫描,聚合,过滤器和连接等操作的性能。
实现方式
向量优化器
(基于apatch Calcite),通过查询成本(收集表的信息,例如表的大小,有多少条数据,数据如何分布)而生成有效率的执行计划,最终减少执行的时间和资源的利用。除了一下设置要配置之外还需要定期执行表(analyze)的分析,分析后的数据放在元数据库中。
成本优化器(CBO)
优化器
执行引擎
减少数据扫描范围,只看需要的独立目录
提高查询的性能
指定分区列的值来过滤数据
提高数据过滤效率
使用分区表
基于分桶字段查询时,减少全表扫描
JOIN时可以提高MR程序效率,减少笛卡尔积数量
分桶表数据进行高效抽样
使用分桶表
提高Hive数据存储HDFS后的读写性能
创表时,stored as… 指定表的存储格式
有的可以降低存储空间
有的可以提高查询性能
不同的文件存储格式具有不同的存储特点,
详情
行式存储和列式存储
小数据储存,一般用于第一层数据加载和测试
应用场景
简单,可直接查看;支持任意隔符分割;搭配压缩使用
耗空间,性能差;
hive中默认格式,行式储存
TextFile
适用于字段数多,不更新。只取部分列查询
高效的数据压缩和编码;可压缩、可分割;
不支持update,insert,delete,ACID
列式储存
Parquet
适用于小量数据,但查询列较多
底层交互好,性能快,查询效率高;可分割,压缩;可用于储存小文件
耗空间大,不兼容Hadoop生态外工具
以二进制的KV形式
SequenceFile
适用于hive大型储存和查询
效率非常高;支持索引,支持矢量查询
性能消耗大
查询时可根据索引提前过滤
写入时构建指定索引
Row Group index
Bloom Filter index
ORC文件索引
每批1024行,一次性整个记录整合
ORC矢量化查询
ORC
设置文件格式
ORC、SequenceFile、Parquet:都不能由文件直接导入数据,必须由TextFile来做中转,做跳板
数据规模大且工作负载密集时,Mapreduce运行时,磁盘i/o操作,数据传输花大量时间。
数据压缩 有利于对节省资源,最小化磁盘读写和网络传输
减少储存空间;减少io次数,加快传输效率
使用文件时需要解压,压缩算法越复杂,解压越长
Lz4>Lzo>Gzip>Bzip2
性能速度比较
Lzo>Gzip>Bzip2
压缩后文件大小比较
格式比较
开启hive中间传输数据压缩功能
开启Reduce输出阶段压缩
数据压缩
架构优化
设置某条件下自动使用本地模式
处理数据量小,用分布式处理浪费资源
输入文件的大小小于hive.exec.mode.local.auto.inputbytes.max 配置的大小
map任务的数量小于 hive.exec.mode.local.auto.input.files.max 配置的大小
reduce任务的数量是1或者0
会启用的条件
本地模式
该模式下用户不能执行有风险的HiveQL语句,避免出现资源耗费风险
查询分区表时不限定分区列的语句
两表join产生了笛卡尔积的语句
用没有指定limit的order by排序语句。
启用后,无法操作
严格模式
Hadoop为每一个map或者reduce启动一个JVM,这样可以并行执行map和reduce
JVM启动进程所耗费的时间比作业执行的时间还要久
map或reduce运行的作业非常小
默认
仅适用与同一个作业的map和reduce,对于不同作业的task不能共享JVM
重用JVM,通过共享JVM以串行而非并行的方式运行map或者reduce
SET mapreduce.job.jvm.numtasks=5;
配置一个作业最大task数。默认为1,若设置为-1代表不限制
优化
其会一直占用使用到的task插槽,以便进行重用直到任务完成后才能释放
JVM重用
Hive的查询通常会转换成一系列的stage(阶段)
stage(阶段)之间并不是一直相互依赖
并行模式
并行执行这些stage,从而增加集群资源的利用率
原因背景
set mapreduce.map.speculative=true set mapreduce.reduce.speculative=true set hive.mapred.reduce.tasks.speculative.execution=true
优化解决
推测模式
实现
在map执行前合并小文件,减少map数
在Map-Reduce的任务结束时合并小文件
避免元数据信息
多个map task
合并小文件
Hive中某些情况的查询可以不必使用MapReduce计算
背景
可以简单地读取表对应的存储目录下的文件,然后输出查询结果到控制台
解决
开启fetch模式之后,在全局查找、字段查找、limit查找等都不启动 MapReduce
Fetch模式
参数优化
只读取某字段
只读取某分区
列裁剪、分布裁剪
只读取需要的,不读取多余的数据
启动多个reduce进行排序
保证每个reduce内部有序
可控制map端数据分配到reduce的key
否则map端的数据就会随机分配到reduce
配合distribute by一同使用
sort by
导致所有map端都进入一个reduce中
将结果按某字段全局排序
order by
sort by 代替order by
-- 原始SQL select count(distinct uid) from tab;
-- 优化后的SQL select count(1) from (select uid from tab group by uid) tmp;
代替count(district)
group by时,如果先起一个combiner在map端做部分预聚合,可以有效减少shuffle数据量
-- 默认为true set hive.map.aggr = true
map端预聚合
set hive.groupby.mapaggr.checkinterval = 100000
调整Map端进行聚合操作的条目数
--默认为falseset hive.groupby.skewindata = true
开启该参数以后,当前程序会自动通过两个MapReduce来运行
第一个MapReduce自动进行随机分区,然后实现聚合
第二个MapReduce将聚合的结果再按照业务进行处理,得到结果
开启后
原理:其是在group by时启动两个MR job。第一个job会将map端数据随机输入reducer,每个reducer做部分聚合,相同的key就会分布在不同的reducer中。第二个job再将前面预处理过的数据按key聚合并输出结果,这样就起到了均衡的效果。
倾斜均衡配置项:修改参数配置
group by配置调整
group by
普通连接
缺点:性能较差(要将数据分区,有shuffle)优点:操作简单,普适性强
common join
一般
大表与小表连接,小表数据量应该能够完全加载到内存
适用场景:
一般数据倾斜发生在reduce阶段map阶段不会
不会有reduce阶段存在,连接在map端完成
适用场景单一,范围小,只适用大小表连接
set hive.auto.convert.join = true; --是否开自动mapjoinset hive.mapjoin.smalltable.filesize; --mapjoin的表size大小
生效
tablelist 可以是一个表,或以逗号连接的表的列表。tablelist 中的表将会读入内存,通常应该是将小表写在这里。
/*+mapjoin(tablelist)*/
命令
map join
两个表的join key 就是bucket column 的时候
参与join的表均为分桶表,且其中一张表的分桶数量是另外一张表分桶数量的整数倍
应用在map join的场景中
适用场景
set hive.optimize.bucketmapjoin = true
Hive优化--Bucket Map Join
csdn链接
Bucket Join
被认为同一key值分到同一reduce
因为shuffle阶段的hash操作,只要key的hash结果是一样的,它们就会被拉到同一个reduce中。
join时这些空值就会非常集中,拖累进度
,就提前写 where 语句过滤掉
不需要空值数据
空值key用随机方式打散
需要空值
处理空值或无意义值
专门为了避免数据倾斜而设计
原理:是将Map Join和Reduce Join进行合并
将产生数据倾斜的数据单独使用Map Join来实现
其他没有产生数据倾斜的数据由Reduce Join来实现
set hive.optimize.skewjoin=true;
开启
--key的出现的次数超过这个范围时
set hive.skewjoin.key=100000;
设置
-- 在编译时判断是否会产生数据倾斜
set hive.optimize.skewjoin.compiletime=true;
判断
set hive.optimize.union.remove=true;
Hive的底层走的是MapReduce,必须开启这个属性,才能实现不合并(处理包含多个层级目录的数据)
set mapreduce.input.fileinputformat.input.dir.recursive=true;
使用Skew Join
将Map Join的结果和Reduce Join的结果进行Union合并
join基础优化
SQL优化
在 MapReduce 计算框架中,大量相同的key被分配到了同一个任务上,
查看任务监控页面,发现只有少量 reduce子任务未完成
任务进度长时间维持在 99%或者 100%的附近
因为其处理的数据量和其他的 reduce 差异过大。单一 reduce 处理的记录数和平均记录数相差太大,通常达到好几倍之多,最长时间远大于平均时长。
表现为
一般是由于 HDFS 数据存储不均匀造成的(一般存储都是均匀分块存储,每个文件大小基本固定)
发生在 Map阶段
没有考虑到某种key值数据量偏多的情况而导致的
Reduce阶段最容易出现数据倾斜的两个场景分别是Join和Count Distinct
发生在Reduce阶段
什么情况下会出现
key分布不均匀
业务数据本身的特性
建表时考虑不周
某些SQL语句本身就有数据倾斜
原因
分发到某一个或几个reduce上的数据远高于平均值
其中一个表较小,但是key集中
空值都由一个reduce处理,非常慢
大表与大表,但是分桶的判断字段0值或空值过多
join
处理此特殊值的reduce耗时
某特殊值过多
Count Distinct
处理某值的reduce耗时
group by 维度过小,某值的数量过多
group by
容易出现
解决策略是对key值进行加严处理:
某一特殊key值大量出现,语句中仅出现group by,没有相应的聚合函数一起(聚合函数可以在map阶段提前进行聚合,降低数据倾斜风险),会造成对应key的reduce出现数据倾斜
一、优先开启负载均衡
使用map join避开shulffle和reduce
大表与小表相连时用map join
①提前用where过滤
②给空值添加随机key值,这样它们的hash结果就不一样将其分散到不同的reduce中处理
表中作为关联条件的字段值为0或空值的较多
row_number ()over(partition by去重
表中作为关联条件的字段重复值过多
默认的Hash操作会按int型的code来进行分配
所有的string类型都被分配成同一个code
结果所有的string类型的字段进入到一个reduce中
例如:a表key为int;b表key有string和int
SELECT * FROM users a LEFT JOIN logs bON a.usr_id = CAST(b.user_id AS string);
用cast将int转为string
两表连接的key数据类型不同
表连接的key存在倾斜,那么在 Shuffle 阶段必然会引起数据倾斜
二、表连接时
Distinct操作本身会有一个全局排序的过程
不存在分组字段时,Count Distinct操作仅生成一个Reduce 任务对全部数据进行去重统计
存在分组字段时,可能某些 Reduce 任务需要去重统计的数量非常大
三、count distinct 大量相同特殊值
概要
进行分组聚合的字段过多,且数据量很大
多维聚合计算时
Map端的聚合不能很好地起到数据压缩的情况下,会导致Map端产出的数据急速膨胀
容易导致作业内存溢出的异常。如果log表含有数据倾斜key,会加剧Shuffle过程的数据倾斜
四、数据膨胀引发的数据倾斜
采样倾斜key并分拆join操作
增加并行度
等等
五、其他情况
数据倾斜
hive的性能优化
按照字段进行分区
按照时间范围进行分区
按照地理位置进行分区
数据分区
使用Snappy压缩算法
使用LZO压缩算法
使用Gzip压缩算法
创建索引
合理使用索引
数据索引
使用随机数进行数据倾斜处理
使用MapJoin进行数据倾斜处理
使用Reduce端的负载均衡进行数据倾斜处理
数据倾斜处理
查询优化
使用Tez引擎
调整并行度
合理设置内存参数
合理设置IO参数
使用CBO(Cost Based Optimization)优化器
查询调优
使用动态分区
使用Bucket表
使用MapJoin
使用索引
使用分区和分桶
使用压缩
使用向量化查询
查询性能优化
优化查询计划
避免全表扫描
合理使用缓存
适当增加硬件资源
优化数据模型
调优技巧
调整内存参数
调整并行度参数
调整IO参数
调整参数设置
性能优化
数据分布不均匀
数据倾斜的键
数据倾斜的操作
数据倾斜的原因
重新分区或分桶
使用随机前缀
使用MapReduce调整数据倾斜
使用Join优化
使用聚合函数优化
使用SMB Join优化
使用数据倾斜优化工具
使用Hive on Tez优化
使用Spark SQL优化
使用Presto优化
使用Flink优化
使用数据倾斜解决方案评估工具
使用数据倾斜监控工具
使用数据倾斜自动修复工具输出:hive的性能优化和数据倾斜的解决的相关资料查询性能优化
解决方案
数据倾斜的解决
AI生成的Hive性能优化
linux
Unix
开源
开放性
windows属于单用户多任务
多用户多任务
特点
web应用系统,数据库服务器,游戏服务器
服务器系统
路由器,防火墙,手机,交换器,家电的微电脑控制器
嵌入式系统
IBM的watson超级计算机使用的 linux 系统
高性能计算、精密值应用
桌面应用系统
安卓
手机系统
应用领域
配置IP
虚拟机
安装
操作命令
linux命令
${ }
使用变量
所有变量加 { }
字符串里有变量用双引号
输出字符长度
截取、提取字符
变量
传参
参数
算数运算符
关系运算符
字符运算符
逻辑运算符
文件测试运算
运算符
if thenelif thenelse fi
多分支
if条件判断
for循环
while循环
until循环
函数function
流程控制
自我加强记忆
脚本命令
grep详解
sed详解
awk详解
正则表达
grep 、sed、awk
三剑客
shell语言
linux系统
hadoop相关
800
0 条评论
回复 删除
下一页