一つは:ハイブ何ですか
ハイブは、大規模データのためのデータウェアハウスであるSQLツールをMapReduceのに変換されます。
II:基本的なプロセスや業務のMapReduce段階の最適化を行うことができます
(しかし、実際には次のセクションで設定された基準を理解して、長い時間のために実行した後、デフォルトの設定や設定値を設定する必要はありません多くあります)
(ハッハッハ、しかし古いが、非常に代表)オンライン古いの地図を添付
上記のチャート、finalresult、MapReduceのタスクを減らす、より数歩、入力、分割、マッピング、Shuffingに分けることができるため、我々はこれらの各段階を最適化することができます知っています!!
分割位相の最適化:サブセクションに応じて、入力データのサイズ、異なるブロックに。
最適化ポイント:1切断ブロックのサイズを増加させることが適切である(MAXSIZEセグメンテーションを追跡する単一のノード、残りを合わせ、次いで、MinSizeプロパティノード間のサイズ、およびラックの間に最終的に合併を組み合わされます。)
設定mapreduce.input.fileinputformat.split.minsize = 1024000000;
セットmapreduce.input.fileinputformat.split.maxsize = 1024000000;(默认256M)は
mapreduce.input.fileinputformat.split.minsize.per.node = 1024000000を設定します。
設定mapreduce.input.fileinputformat.split.maxsize.per.node = 1024000000;(默认1B)
mapreduce.input.fileinputformat.split.minsize.per.rack = 1024000000セット。
設定mapreduce.input.fileinputformat.split.maxsize.per.rack = 1024000000;(默认1B)
に設定hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;(默认存在)
マッピングの位相最適化:同じキーに対応する遷移が、実際には、切断の最終段のデータブロックのマップ番号の数に依存します。
最適化ポイントマップ手動で所定数(例:タスク100マップ、地図を有するが、10ロットのバッチを実行することができます)。
mapreduce.job.running.map.limit = 20に設定。
2.並列にマップの所定数(例:タスク100マップ、地図を有するが、10ロットのバッチを実行することができます)
セットmapreduce.map.memory.mb = 3584;(3.5Gメモリ)2.1倍、デフォルトのキルになります
3.限界最大使用可能なメモリ・マップ
真hive.map.aggr = SETに
SET hive.groupby.mapaggr.checkinterval = 100000(データ100,000あたりの重合)
Shuffing相の最適化:に同じの鍵が実際にネットワーク伝送のプロセスを減らします。
最適化のポイント:圧縮後の1.map(自己解凍型の圧縮)
セットmapreduce.map.output.compress =真(マップ出力圧縮、MapReduceのパラメータ)
SET mapreduce.map.output.compress.codec = org.apache.hadoop.io.compress.GzipCodec(MAP出力圧縮形式、MapReduceのパラメータ)
2.map後にファイル操作をマージ
真= hive.merge.mapfilesを設定する(合併の新しいジョブの完了を開始し、組み合わせたセットがどのくらいかを決定hive.merge.size.per.task)
位相最適化を減少させる:運転データを蓄積し、対応するファイルへ結果を送信します。
最適化ポイント:1手動で所定の数を減らします
mapred.reduce.tasks = 20を設定します。
同時に2が所定の並列数を減らす(例:タスク100が低減しているが、バッチ10の数の実装を減らすことができます)
mapreduce.job.running.reduce.limitは80 =設定。
3.制限が使用できる最大メモリを削減します
2.1倍デフォルトキルになります(7Gメモリ);セットmapreduce.reduce.memory.mb = 7168
各データ処理のサイズは、(直接数を決定減らす)を低減することができるセット4
hive.exec.reducers.bytes.per.reducer = 1024×1000×1000に設定。
5.reduce最大数
= 2000 hive.exec.reducers.maxセット;(mapreduce.job.running.reduce.limit变相使用)
6.reduceファイルをマージすることができた後、
hive.merge.sparkfiles = falseを設定する(スパークエンジンを、マージファイルの後、新しいタスクを開始)
のSET hive.merge.tezfilesは=偽(TEZエンジンは、マージファイルの後、新しいタスクを開始)
のSET hive.merge.mapredfilesを=真(MapReduceのエンジンは、マージファイルの後、新しいタスクを開始する)
SETのhive.merge.smallfiles.avgsize =×1000×1000 100(出力ファイルの現在の値よりも小さいときに、タスクの終了後に合併のファイルサイズ)
SETハイブ。 merge.size.per.task×1000×1000 = 1024(ファイルがはるかになるマージ)
finalresult最適化の段階:実際には、ファイルを書き込むプロセス。
最適化のポイント:書かれたHDFSを圧縮する1.reduce後(各ノードには、単独のタスクを実行しているが、最終的な結果はに収束する必要があります)
set mapreduce.output.fileoutputformat.compress=false // 默认值是 false reduce属性
set mapreduce.output.fileoutputformat.compress.type=BLOCK // 默认值是 Record reduce属性
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec // 默认值是 org.apache.hadoop.io.compress.DefaultCodec
其他优化:
JVM优化:一个JVM运行的job数是有上限的,我们可以设置最大执行的个数
set mapreduce.job.jvm.numtasks=100
并发及并发线程数优化:job的子查询可能没关系,所以可以开启并发查询
set hive.exec.parallel = true;
set hive.exec.parallel.thread.number=8;
数据倾斜优化:可进行key值个数的判断,判断时候发生数据倾斜
set hive.optimize.skewjoin=true;
set hive.skewjoin.key=100000;(超过10000个相同的key就认为是数据倾斜,需要进行打散处理)
分区优化:hive有桶表和分区表,可开启动态分区(其实就是不同文件夹)
set hive.exec.dynamic.partition=true
set hive.exec.dynamic.partition.mode=nonstrict(分区表分为严格模式和非严格模式)
job之间优化:
set hive.exec.compress.output=true;(最终结果压缩。若map压缩和reduce压缩都没有用,改参数使用的话。两个job第一个job后数据不压缩,第二个job输出压缩)
set hive.exec.compress.intermediate=true(若map压缩reduce压缩最终输出压缩都没有用,改参数使用的话。两个job第一个job后数据压缩,第二个job输出不压缩)
SQL优化:
小表往前放
三:常用hive参数优化
其实上面是对每一个阶段都进行数据优化,有很多参数都是默认开启或者有默认值的。
只需要用到常用的几个就行,其他的作为了解。下面列举出比较常用的:
Splitting阶段:将输入小文件合并成为大文件
set mapreduce.input.fileinputformat.split.minsize = 1024000000;(参数mapreduce.map.memory.mb=3584 默认2.1倍会杀掉,一个map申请3.5G内存不用浪费了)
set mapreduce.input.fileinputformat.split.maxsize = 1024000000;
set mapreduce.input.fileinputformat.split.minsize.per.node= 1024000000;
set mapreduce.input.fileinputformat.split.maxsize.per.node= 1024000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack= 1024000000;
set mapreduce.input.fileinputformat.split.maxsize.per.rack= 1024000000;
map阶段一般很快,参数可以不设置
reduce阶段
set mapreduce.job.running.reduce.limit=80;(例子:任务中有100个reduce,但是可以使reduce分批执行一批10个)
合并文件
hive合并文件是新启动一个任务合并文件,感觉这个参数不太合适,有这个时间不如直接输出(map和reduce阶段都是一样的)。
压缩文件
(这个参数十分好,压缩不仅仅节约空间而且在网络传输的时候比较省宽带,mapreduce和spark都是默认可以解压缩的,比较方便。)
set mapreduce.map.output.compress=true(map输出压缩,map阶段参数)
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec(map输出压缩格式,map阶段参数)
set mapreduce.output.fileoutputformat.compress=false // 默认值是 false reduce阶段参数
set mapreduce.output.fileoutputformat.compress.type=BLOCK // 默认值是 Record reduce阶段参数
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec // 默认值是 org.apache.hadoop.io.compress.DefaultCodec
set hive.exec.compress.output=true;(最终结果压缩。若map压缩和reduce压缩都没有用,改参数使用的话。两个job第一个job后数据不压缩,第二个job输出压缩)
set hive.exec.compress.intermediate=true(若map压缩reduce压缩最终输出压缩都没有用,改参数使用的话。两个job第一个job后数据压缩,第二个job输出不压缩)
Jvm优化(建议不设置)
并发优化
set hive.exec.parallel = true;
set hive.exec.parallel.thread.number=8;
数据倾斜优化:
set hive.optimize.skewjoin=true;
set hive.skewjoin.key=100000;(超过10000个相同的key就认为是数据倾斜,需要进行打散处理)
分区优化(建表的时候要partation by ):
set hive.exec.dynamic.partition=true
set hive.exec.dynamic.partition.mode=nonstrict(分区表分为严格模式和非严格模式)
SQL优化
小表往前放
四:hivesql内存计算过程,mapreduce确定及常用UI端口
1.hive参数配置:
Hive UI------>>>>Hive Configuration页签找到(版本与版本之间参数的名字不太一样一定要看清楚配置的名字,最好使用最新的配置名称)
2.hivesql使用内存资源
hivesql使用资源可在YARN的管理界面中RUNNING中看到,需要时不时刷新因为是动态的。(一般为3.5g*map个数字+7g*reduce个数)
3.hivesql生成的job的map个数reduce个数
可在YARN的管理界面中FINISHED中找到job后点击History,进去之后就会看到map数和reduce数
Splitting块个数决定map个数,reduce个数取决于输出的大小(1G一个reduce)
4.常用UI:
1、HDFS页面:50070
2、YARN的管理界面:8088
3、HistoryServer的管理界面:19888
4、Zookeeper的服务端口号:2181
5、Hive.server2=10002
6、Kafka的服务端口号:9092
7、Hbase界面:16010,60010
8、Spark的界面:8080