hive優(yōu)化參數(shù)說明

1,一個Hive查詢生成多個Map Reduce Job,一個Map Reduce Job又有Map,Reduce,Spill,Shuffle,Sort等多個階段,所以針對Hive查詢的優(yōu)化可以大致分為針對MR中單個步驟的優(yōu)化(其中又會有細(xì)分),針對MR全局的優(yōu)化,和針對整個查詢(多MR Job)的優(yōu)化


? hive.exec.mode.local.auto

? ? 決定 Hive 是否應(yīng)該自動地根據(jù)輸入文件大小,在本地運行(在GateWay運行)

? ? true

? ?hive.exec.mode.local.auto.inputbytes.max

? ? 如果 hive.exec.mode.local.auto 為 true,當(dāng)輸入文件大小小于此閾值時可以自動在本地模式運行,默認(rèn)是 128兆。

? ? 134217728L

? ? hive.exec.mode.local.auto.tasks.max

? ? 如果 hive.exec.mode.local.auto 為 true,當(dāng) Hive Tasks(Hadoop Jobs)小于此閾值時,可以自動在本地模式運行。

? ? 4

? hive.auto.convert.join

? ? 是否根據(jù)輸入小表的大小,自動將 Reduce 端的 Common Join 轉(zhuǎn)化為 Map Join,從而加快大表關(guān)聯(lián)小表的 Join 速度。

? ? false

? ?hive.mapred.local.mem

? ? Mapper/Reducer 在本地模式的最大內(nèi)存量,以字節(jié)為單位,0為不限制。

? ? 0

? ?mapred.reduce.tasks

? ? 所提交 Job 的 reduer 的個數(shù),使用 Hadoop Client 的配置。

? ? 1

? hive.exec.scratchdir

? ? HDFS路徑,用于存儲不同 map/reduce 階段的執(zhí)行計劃和這些階段的中間輸出結(jié)果。

? ? /tmp/<user.name>/hive

? hive.metastore.warehouse.dir

? ? Hive 默認(rèn)的數(shù)據(jù)文件存儲路徑,通常為 HDFS 可寫的路徑。

? ? hive.groupby.skewindata

? ? 決定 group by 操作是否支持傾斜的數(shù)據(jù)。

? ? false

? ? hive.merge.mapfiles

? ? 是否開啟合并 Map 端小文件,對于 Hadoop 0.20 以前的版本,起一首新的 Map/Reduce Job,對于 0.20 以后的版本,則是起使用 CombineInputFormat 的 MapOnly Job。

? ? true

? ?hive.merge.mapredfiles

? ? 是否開啟合并 Map/Reduce 小文件,對于 Hadoop 0.20 以前的版本,起一首新的 Map/Reduce Job,對于 0.20 以后的版本,則是起使用 CombineInputFormat 的 MapOnly Job。

? ? false

? hive.default.fileformat

? ? Hive 默認(rèn)的輸出文件格式,與創(chuàng)建表時所指定的相同,可選項為 'TextFile' 、 'SequenceFile' 或者 'RCFile'。

? ? 'TextFile'

? ?hive.mapred.mode

? ? Map/Redure 模式,如果設(shè)置為 strict,將不允許笛卡爾積。

? ? 'nonstrict'

? hive.exec.parallel

? ? 是否開啟 map/reduce job的并發(fā)提交。

? ? false

? ?hive.security.authorization.enabled

? ? Hive 是否開啟權(quán)限認(rèn)證。

? ? false

? ?hive.exec.plan

? ? Hive 執(zhí)行計劃的路徑,會在程序中自動進(jìn)行設(shè)置

? ? null

? ?hive.exec.submitviachild

? ? 決定 map/reduce Job 是否應(yīng)該使用各自獨立的 JVM 進(jìn)行提交(Child進(jìn)程),默認(rèn)情況下,使用與 HQL compiler 相同的 JVM 進(jìn)行提交。

? ? false

? hive.exec.script.maxerrsize

? ? 通過 TRANSFROM/MAP/REDUCE 所執(zhí)行的用戶腳本所允許的最大的序列化錯誤數(shù)。

? ? 100000

? hive.exec.script.allow.partial.consumption

? ? 是否允許腳本只處理部分?jǐn)?shù)據(jù),如果設(shè)置為 true ,因 broken pipe 等造成的數(shù)據(jù)未處理完成將視為正常。

? ? false

? ?hive.exec.compress.output

? ? 決定查詢中最后一個 map/reduce job 的輸出是否為壓縮格式。

? ? false

? ?hive.exec.compress.intermediate

? ? 決定查詢的中間 map/reduce job (中間 stage)的輸出是否為壓縮格式。

? ? false

? hive.intermediate.compression.codec

? ? 中間 map/reduce job 的壓縮編解碼器的類名(一個壓縮編解碼器可能包含多種壓縮類型),該值可能在程序中被自動設(shè)置。

? hive.intermediate.compression.type

? ? 中間 map/reduce job 的壓縮類型,如 "BLOCK" "RECORD"。

? ? hive.exec.reducers.bytes.per.reducer

? ? 每一個 reducer 的平均負(fù)載字節(jié)數(shù)。

? ? 1000000000

? ?hive.exec.reducers.max

? ? reducer 個數(shù)的上限。

? ? 999

? ? hive.exec.pre.hooks

? ? 語句層面,整條 HQL 語句在執(zhí)行前的 hook 類名。

? ? hive.exec.post.hooks

? ? 語句層面,整條 HQL 語句在執(zhí)行完成后的 hook 類名。

? ?hive.exec.parallel.thread.number

? ? 并發(fā)提交時的并發(fā)線程的個數(shù)。

? ? 8

? ? hive.mapred.reduce.tasks.speculative.execution

? ? 是否開啟 reducer 的推測執(zhí)行,與 mapred.reduce.tasks.speculative.execution 作用相同。

? ? false

? ?hive.exec.counters.pull.interval

? ? 客戶端拉取 progress counters 的時間,以毫秒為單位。

? ? 1000L

? ?hive.exec.dynamic.partition

? ? 是否打開動態(tài)分區(qū)。

? ? false

? ? hive.exec.dynamic.partition.mode

? ? 打開動態(tài)分區(qū)后,動態(tài)分區(qū)的模式,有 strict 和 nonstrict 兩個值可選,strict 要求至少包含一個靜態(tài)分區(qū)列,nonstrict 則無此要求。

? ? strict

? ? hive.exec.max.dynamic.partitions

? ? 所允許的最大的動態(tài)分區(qū)的個數(shù)。

? ? 1000

? ?hive.exec.max.dynamic.partitions.pernode

? ? 單個 reduce 結(jié)點所允許的最大的動態(tài)分區(qū)的個數(shù)。

? ? 100

? ? hive.exec.default.partition.name

? ? 默認(rèn)的動態(tài)分區(qū)的名稱,當(dāng)動態(tài)分區(qū)列為''或者null時,使用此名稱。''

? ? '__HIVE_DEFAULT_PARTITION__'

? ? ?hadoop.bin.path

? ? Hadoop Client 可執(zhí)行腳本的路徑,該路徑用于通過單獨的 JVM 提交 job,使用 Hadoop Client 的配置。

? ? $HADOOP_HOME/bin/hadoop

? ? hadoop.config.dir

? ? Hadoop Client 配置文件的路徑,使用 Hadoop Client 的配置。

? ? $HADOOP_HOME/conf

? ? fs.default.name

? ? Namenode 的 URL,使用 Hadoop Client 的配置。

? ? file:///

? ?map.input.file

? ? Map 的輸入文件,使用 Hadoop Client 的配置。

? ? null

? ?mapred.input.dir

? ? Map 的輸入目錄,使用 Hadoop Client 的配置。

? ? null

? ? mapred.input.dir.recursive

? ? 輸入目錄是否可遞歸嵌套,使用 Hadoop Client 的配置。

? ? false

? ? mapred.job.tracker

? ? Job Tracker 的 URL,使用 Hadoop Client 的配置,如果這個配置設(shè)置為 'local',將使用本地模式。

? ? local

? ?mapred.job.name

? ? Map/Reduce 的 job 名稱,如果沒有設(shè)置,則使用生成的 job name,使用 Hadoop Client 的配置。

? ? null

? ?mapred.reduce.tasks.speculative.execution

? ? Map/Reduce 推測執(zhí)行,使用 Hadoop Client 的配置。

? ? null

? hive.metastore.metadb.dir

? ? Hive 元數(shù)據(jù)庫所在路徑。

? ? ?hive.metastore.uris

? ? Hive 元數(shù)據(jù)的 URI,多個 thrift://地址,以英文逗號分隔。

? ? hive.metastore.connect.retries

? ? 連接到 Thrift 元數(shù)據(jù)服務(wù)的最大重試次數(shù)。

? ? 3

? ? javax.jdo.option.ConnectionPassword

? ? JDO 的連接密碼。

? ? ?hive.metastore.ds.connection.url.hook

? ? JDO 連接 URL Hook 的類名,該 Hook 用于獲得 JDO 元數(shù)據(jù)庫的連接字符串,為實現(xiàn)了 JDOConnectionURLHook 接口的類。

? ? javax.jdo.option.ConnectionURL

? ? 元數(shù)據(jù)庫的連接 URL。

? ? hive.metastore.ds.retry.attempts

? ? 當(dāng)沒有 JDO 數(shù)據(jù)連接錯誤后,嘗試連接后臺數(shù)據(jù)存儲的最大次數(shù)。

? ? 1

? ? hive.metastore.ds.retry.interval

? ? 每次嘗試連接后臺數(shù)據(jù)存儲的時間間隔,以毫秒為單位。

? ? 1000

? ?hive.metastore.force.reload.conf

? ? 是否強(qiáng)制重新加載元數(shù)據(jù)配置,一但重新加載,該值就會被重置為 false。

? ? false

? ?hive.metastore.server.min.threads

? ? Thrift 服務(wù)線程池的最小線程數(shù)。

? ? 8

? ? hive.metastore.server.max.threads

? ? Thrift 服務(wù)線程池的最大線程數(shù)。

? ? 0x7fffffff

? ? hive.metastore.server.tcp.keepalive

? ? Thrift 服務(wù)是否保持 TCP 連接。

? ? true

? ? hive.metastore.archive.intermediate.original

? ? 用于歸檔壓縮的原始中間目錄的后綴,這些目錄是什么并不重要,只要能夠避免沖突即可。

? ? '_INTERMEDIATE_ORIGINAL'

? ?hive.metastore.archive.intermediate.archived

? ? 用于歸檔壓縮的壓縮后的中間目錄的后綴,這些目錄是什么并不重要,只要能夠避免沖突即可。

? ? '_INTERMEDIATE_ARCHIVED'

? ?hive.metastore.archive.intermediate.extracted

? ? 用于歸檔壓縮的解壓后的中間目錄的后綴,這些目錄是什么并不重要,只要能夠避免沖突即可。

? ? '_INTERMEDIATE_EXTRACTED'

? ? hive.cli.errors.ignore

? ? 是否忽略錯誤,對于包含多的 SQL 文件,可以忽略錯誤的行,繼續(xù)執(zhí)行下一行。

? ? false

? ?hive.session.id

? ? 當(dāng)前會話的標(biāo)識符,格式為“用戶名_時間”用于記錄在 job conf 中,一般不予以手動設(shè)置。

? ? ?hive.session.silent

? ? 當(dāng)前會話是否在 silent 模式運行。 如果不是 silent 模式,所以 info 級打在日志中的消息,都將以標(biāo)準(zhǔn)錯誤流的形式輸出到控制臺。

? ? false

? ?hive.query.string

? ? 當(dāng)前正在被執(zhí)行的查詢字符串。

? ? hive.query.id

? ? 當(dāng)前正在被執(zhí)行的查詢的ID。

? ? ? hive.query.planid

? ? 當(dāng)前正在被執(zhí)行的 map/reduce plan 的 ID。

? ? ?hive.jobname.length

? ? 當(dāng)前 job name 的最大長度,hive 會根據(jù)此長度省略 job name 的中間部分。

? ? 50

? ?hive.jar.path

? ? 通過單獨的 JVM 提交 job 時,hive_cli.jar 所在的路徑

? ? hive.aux.jars.path

? ? 各種由用戶自定義 UDF 和 SerDe 構(gòu)成的插件 jar 包所在的路徑。

? ? ?hive.added.files.path

? ? ADD FILE 所增加的文件的路徑。

? hive.added.jars.path

? ? ADD JAR 所增加的文件的路徑。

? ? hive.added.archives.path

? ? ADD ARCHIEVE 所增加的文件的路徑。

? ? ? hive.table.name

? ? 當(dāng)前的 Hive 表的名稱,該配置將通過 ScirptOperator 傳入到用戶腳本中。

? ?hive.partition.name

? ? 當(dāng)前的 Hive 分區(qū)的名稱,該配置將通過 ScriptOperator 傳入到用戶腳本中。

? ? hive.script.auto.progress

? ? 腳本是否周期性地向 Job Tracker 發(fā)送心跳,以避免腳本執(zhí)行的時間過長,使 Job Tracker 認(rèn)為腳本已經(jīng)掛掉了。

? ? false

? hive.script.operator.id.env.var

? ? 用于識別 ScriptOperator ID 的環(huán)境變量的名稱。

? ? 'HIVE_SCRIPT_OPERATOR_ID'

? ? hive.alias

? ? 當(dāng)前的 Hive 別名,該配置將通過 ScriptOpertaor 傳入到用戶腳本中。

? hive.map.aggr

? ? 決定是否可以在 Map 端進(jìn)行聚合操作

? ? true

? ?hive.join.emit.interval

? ? Hive Join 操作的發(fā)射時間間隔,以毫秒為單位。

? ? 1000

? ? hive.join.cache.size

? ? Hive Join 操作的緩存大小,以字節(jié)為單位。

? ? 25000

? hive.mapjoin.bucket.cache.size

? ? Hive Map Join 桶的緩存大小,以字節(jié)為單位。

? ? 100

? hive.mapjoin.size.key

? ? Hive Map Join 每一行鍵的大小,以字節(jié)為單位。

? ? 10000

? hive.mapjoin.cache.numrows

? ? Hive Map Join 所緩存的行數(shù)。

? ? 25000

? ?hive.groupby.mapaggr.checkinterval

? ? 對于 Group By 操作的 Map 聚合的檢測時間,以毫秒為單位。

? ? 100000

? hive.map.aggr.hash.percentmemory

? ? Hive Map 端聚合的哈稀存儲所占用虛擬機(jī)的內(nèi)存比例。

? ? 0.5

? hive.map.aggr.hash.min.reduction

? ? Hive Map 端聚合的哈稀存儲的最小 reduce 比例。

? ? 0.5

? ?hive.udtf.auto.progress

? ? Hive UDTF 是否周期性地報告心跳,當(dāng) UDTF 執(zhí)行時間較長且不輸出行時有用。

? ? false

?hive.fileformat.check

? ? Hive 是否檢查輸出的文件格式。

? ? true

? hive.querylog.location

? ? Hive 實時查詢?nèi)罩舅诘哪夸?,如果該值為空,將不?chuàng)建實時的查詢?nèi)罩尽?/p>

? ? '/tmp/$USER'

? hive.script.serde

? ? Hive 用戶腳本的 SerDe。

? ? 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'

? ? hive.script.recordreader

? ? Hive 用戶腳本的 RecordRedaer。

? ? 'org.apache.hadoop.hive.ql.exec.TextRecordReader'

? hive.script.recordwriter

? ? Hive 用戶腳本的 RecordWriter。

? ? 'org.apache.hadoop.hive.ql.exec.TextRecordWriter'

? hive.hwi.listen.host

? ? HWI 所綁定的 HOST 或者 IP。

? ? '0.0.0.0'

? ? hive.hwi.listen.port

? ? HWI 所監(jiān)聽的 HTTP 端口。

? ? 9999

? ?hive.hwi.war.file

? ? HWI 的 war 文件所在的路徑。

? ? $HWI_WAR_FILE

? hive.test.mode

? ? 是否以測試模式運行 Hive

? ? false

? hive.test.mode.prefix

? ? Hive 測試模式的前綴。

? ? 'test_'

? ?hive.test.mode.samplefreq

? ? Hive 測試模式取樣的頻率,即每秒鐘取樣的次數(shù)。

? ? 32

? hive.test.mode.nosamplelist

? ? Hive 測試模式取樣的排除列表,以逗號分隔。

? ? "

? ?hive.merge.size.per.task

? ? 每個任務(wù)合并后文件的大小,根據(jù)此大小確定 reducer 的個數(shù),默認(rèn) 256 M。

? ? 256000000

? ? hive.merge.smallfiles.avgsize

? ? 需要合并的小文件群的平均大小,默認(rèn) 16 M。

? ? 16000000

? ?hive.optimize.skewjoin

? ? 是否優(yōu)化數(shù)據(jù)傾斜的 Join,對于傾斜的 Join 會開啟新的 Map/Reduce Job 處理。

? ? false

? ?hive.skewjoin.key

? ? 傾斜鍵數(shù)目閾值,超過此值則判定為一個傾斜的 Join 查詢。

? ? 1000000

? ?hive.skewjoin.mapjoin.map.tasks

? ? 處理數(shù)據(jù)傾斜的 Map Join 的 Map 數(shù)上限。

? ? 10000

? hive.skewjoin.mapjoin.min.split

? ? 處理數(shù)據(jù)傾斜的 Map Join 的最小數(shù)據(jù)切分大小,以字節(jié)為單位,默認(rèn)為32M。

? ? 33554432

? mapred.min.split.size

? ? Map Reduce Job 的最小輸入切分大小,與 Hadoop Client 使用相同的配置。

? ? 1

? hive.mergejob.maponly

? ? 是否啟用 Map Only 的合并 Job。

? ? true

? hive.heartbeat.interval

? ? Hive Job 的心跳間隔,以毫秒為單位。

? ? 1000

? hive.mapjoin.maxsize

? ? Map Join 所處理的最大的行數(shù)。超過此行數(shù),Map Join進(jìn)程會異常退出。

? ? 1000000

?hive.hashtable.initialCapacity

? ? Hive 的 Map Join 會將小表 dump 到一個內(nèi)存的 HashTable 中,該 HashTable 的初始大小由此參數(shù)指定。

? ? 100000

? hive.hashtable.loadfactor

? ? Hive 的 Map Join 會將小表 dump 到一個內(nèi)存的 HashTable 中,該 HashTable 的負(fù)載因子由此參數(shù)指定。

? ? 0.75

? ? hive.mapjoin.followby.gby.localtask.max.memory.usage

? ? MapJoinOperator后面跟隨GroupByOperator時,內(nèi)存的最大使用比例

? ? 0.55

? hive.mapjoin.localtask.max.memory.usage

? ? Map Join 的本地任務(wù)使用堆內(nèi)存的最大比例

? ? 0.9

? ? hive.mapjoin.localtask.timeout

? ? Map Join 本地任務(wù)超時,淘寶版特有特性

? ? 600000

?hive.mapjoin.check.memory.rows

? ? 設(shè)置每多少行檢測一次內(nèi)存的大小,如果超過 hive.mapjoin.localtask.max.memory.usage 則會異常退出,Map Join 失敗。

? ? 100000

? hive.debug.localtask

? ? 是否調(diào)試本地任務(wù),目前該參數(shù)沒有生效

? ? false

? ?hive.task.progress

? ? 是否開啟 counters ,以記錄 Job 執(zhí)行的進(jìn)度,同時客戶端也會拉取進(jìn)度 counters。

? ? false

? ?hive.input.format

? ? Hive 的輸入 InputFormat。

? ? 默認(rèn)是org.apache.hadoop.hive.ql.io.HiveInputFormat,其他還有org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

? hive.enforce.bucketing

? ? 是否啟用強(qiáng)制 bucketing。

? ? false

? ?hive.enforce.sorting

? ? 是否啟用強(qiáng)制排序。

? ? false

? hive.mapred.partitioner

? ? Hive 的 Partitioner 類。

? ? 'org.apache.hadoop.hive.ql.io.DefaultHivePartitioner'

? hive.exec.script.trust

? ? Hive Script Operator For trust

? ? false

? hive.hadoop.supports.splittable.combineinputformat

? ? 是否支持可切分的 CombieInputFormat

? ? false

?hive.optimize.cp

? ? 是否優(yōu)化列剪枝。

? ? true

? hive.optimize.ppd

? ? 是否優(yōu)化謂詞下推。

? ? true

?hive.optimize.groupby

? ? 是否優(yōu)化 group by。

? ? true

? hive.optimize.bucketmapjoin

? ? 是否優(yōu)化 bucket map join。

? ? false

?hive.optimize.bucketmapjoin.sortedmerge

? ? 是否在優(yōu)化 bucket map join 時嘗試使用強(qiáng)制 sorted merge bucket map join。

? ? false

?hive.optimize.reducededuplication

? ? 是否優(yōu)化 reduce 冗余。

? ? true

?hive.hbase.wal.enabled

? ? 是否開啟 HBase Storage Handler。

? ? true

?hive.archive.enabled

? ? 是否啟用 har 文件。

? ? false

? ?hive.archive.har.parentdir.settable

? ? 是否啟用 har 文件的父目錄可設(shè)置。

? ? false

? ?hive.outerjoin.supports.filters

? ? 是否啟動外聯(lián)接支持過濾條件。

? ? true

? ?hive.fetch.output.serde

? ? 對于 Fetch Task 的 SerDe 類

? ? 'org.apache.hadoop.hive.serde2.DelimitedJSONSerDe'

? ?hive.semantic.analyzer.hook

? ? Hive 語義分析的 Hook,在語義分析階段的前后被調(diào)用,用于分析和修改AST及生成的執(zhí)行計劃,以逗號分隔。

? ? null

? ?hive.cli.print.header

? ? 是否顯示查詢結(jié)果的列名,默認(rèn)為不顯示。

? ? false

? hive.cli.encoding

? ? Hive 默認(rèn)的命令行字符編碼。

? ? 'UTF8'

? ?hive.log.plan.progress

? ? 是否記錄執(zhí)行計劃的進(jìn)度。

? ? true

? ? hive.pull.progress.counters

? ? 是否從 Job Tracker 上拉取 counters,淘寶特有配置項。

? ? true

? hive.job.pre.hooks

? ? 每個 Job 提交前執(zhí)行的 Hooks 列表,以逗號分隔,淘寶特有配置項。

? ? "

? hive.job.post.hooks

? ? 每個 Job 完成后執(zhí)行的 Hooks 列表,以逗號分隔,淘寶特有配置項。

? ? "

? ?hive.max.progress.counters

? ? Hive 最大的進(jìn)度 couters 個數(shù),淘寶特有配置項。

? ? 100

? ?hive.exec.script.wrapper

? ? Script Operator 腳本調(diào)用的封裝,通常為腳本解釋程序。例如,可以把該變量值的名稱設(shè)置為"python",那么傳遞到 Script Operator 的腳本將會以"python <script command>"的命令形式進(jìn)行調(diào)用,如果這個值為null或者沒有設(shè)置,那么該腳本將會直接以"<script command>"的命令形式調(diào)用。

? ? null

? ?hive.check.fatal.errors.interval

? ? 客戶端通過拉取 counters 檢查嚴(yán)重錯誤的周期,以毫秒為單位,淘寶特有配置項。

? ? 5000L

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容