1、 set hive.auto.convert.join = true;
mapJoin的主要意思就是,當鏈接的兩個表是一個比較小的表和一個特別大的表的時候,我們把比較小的table直接放到內存中去,然后再對比較大的表格進行map操作。join就發生在map操作的時候,每當掃描一個大的table中的數據,就要去去查看小表的數據,哪條與之相符,繼而進行連接。這里的join並不會涉及reduce操作。map端join的優勢就是在於沒有shuffle。在本質上mapjoin根本就沒有運行MR進程,僅僅是在內存就進行了兩個表的聯合。
2、 set mapred.job.priority = VERY_HIGH; --設置任務優先級
3、set mapred.output.compress = true;
set hive.exec.compress.output = true;
壓縮最終結果
4、SET hive.default.fileformat = Orc; -- 設置默認文件格式
ORC File,它的全名是Optimized Row Columnar (ORC) file,其實就是對RCFile做了一些優化。據官方文檔介紹,這種文件格式可以提供一種高效的方法來存儲Hive數據。
它的設計目標是來克服Hive其他格式的缺陷。運用ORC File可以提高Hive的讀、寫以及處理數據的性能。
5、set hive.exec.dynamic.partition=true; 是開啟動態分區
set hive.exec.dynamic.partition.mode=nonstrict; 這個屬性默認值是strict,就是要求分區字段必須有一個是靜態的分區值,隨后會講到,當前設置為nonstrict,那么可以全部動態分區.
7、動態分區參數設置
set hive.exec.max.dynamic.partitions = 130000;
set hive.exec.max.dynamic.partitions.pernode = 130000;
set hive.exec.max.created.files = 200000;
當對hive分區未做設置時,報錯如下: Caused by: org.apache.hadoop.hive.ql.metadata.HiveFatalException: [Error 20004]: Fatal error occurred when node tried to create too many dynamic partitions. The maximum number of dynamic partitions is controlled by hive.exec.max.dynamic.partitions and hive.exec.max.dynamic.partitions.pernode. Maximum was set to: 5000 at org.apache.hadoop.hive.ql.exec.FileSinkOperator.getDynOutPaths(FileSinkOperator.java:877) at org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:657) at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815) at org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84) at org.apache.hadoop.hive.ql.exec.mr.ExecReducer.reduce(ExecReducer.java:244) ... 7 more 超過了最大的分區數設置 解決辦法: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; set hive.exec.max.dynamic.partitions.pernode=600000; set hive.exec.max.dynamic.partitions=6000000; set hive.exec.max.created.files=6000000;
8、set mapreduce.map.cpu.vcores = 4; -- 每個Map Task需要的虛擬CPU個數
set mapreduce.reduce.cpu.vcores = 8; -- 每個Reduce Task需要的虛擬CPU個數
9、set mapreduce.map.memory.mb = 8192; -- 每個Map Task需要的內存量
set mapreduce.reduce.memory.mb = 10500; -- 每個Reduce Task需要的內存量
10、set hive.exec.parallel = true;
set hive.exec.parallel.thread.number = 16;
ive.exec.parallel可以控制一個sql中多個可並行執行的job的運行方式.
當hive.exec.parallel為true的時候,同一個sql中可以並行執行的job會並發的執行.
而參數hive.exec.parallel.thread.number就是控制對於同一個sql來說同時可以運行的job的最大值,該參數默認為8.此時最大可以同時運行8個job.
比如union操作
11、set yarn.app.mapreduce.am.resource.mb = 10000; -- MR ApplicationMaster占用的內存量
set yarn.app.mapreduce.am.command - opts = - Xmx10000m; --
12、
set mapreduce.map.java.opts = - Xmx9192m; -- 設置Map任務JVM的堆空間大小,默認-Xmx1024m
set mapreduce.reduce.java.opts = - Xmx10000m; -- 設置reduce任務JVM的堆空間大小,默認-Xmx1024m
13、
set spark.sql.hive.mergeFiles=true; 合並小文件