成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

hive使用過程中有哪些調(diào)優(yōu)策略

這篇文章主要介紹hive使用過程中有哪些調(diào)優(yōu)策略,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司IDC提供業(yè)務(wù):重慶服務(wù)器托管,成都服務(wù)器租用,重慶服務(wù)器托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。

下面是hive使用過程中一些調(diào)優(yōu)策略

一、fetch抓取

Fetch抓取是指,Hive中對某些情況的查詢可以不必使用MapReduce計(jì)算。例如:SELECT * FROM employees;在這種情況下,Hive可以簡單地讀取employee對應(yīng)的存儲(chǔ)目錄下的文件,然后輸出查詢結(jié)果到控制臺(tái)。
  在hive-default.xml.template文件中hive.fetch.task.conversion默認(rèn)是more,老版本hive默認(rèn)是minimal,該屬性修改為more以后,在全局查找、字段查找、limit查找等都不走mapreduce。

<property>
    <name>hive.fetch.task.conversion</name>
    <value>more</value>
    <description>
      Expects one of [none, minimal, more].
      Some select queries can be converted to single FETCH task minimizing latency.
      Currently the query should be single sourced not having any subquery and should not have
      any aggregations or distincts (which incurs RS), lateral views and joins.
      0. none : disable hive.fetch.task.conversion     禁用fetch抓取
      1. minimal : SELECT STAR, FILTER on partition columns, LIMIT 
                   只有select分區(qū)字段,以及l(fā)imit時(shí)才能使用fetch(不走M(jìn)apReduce)
      2. more  : SELECT, FILTER, LIMIT only (support TABLESAMPLE and virtual columns)
                  字段查找,limit都不走M(jìn)apReduce
    </description>
  </property>

也可以通過在hive命令行下臨時(shí)修改該參數(shù)的值:

hive (default)> set hive.fetch.task.conversion=more;

二、本地模式

有時(shí)Hive的輸入數(shù)據(jù)量是非常小的。在這種情況下,為查詢觸發(fā)執(zhí)行任務(wù)消耗的時(shí)間可能會(huì)比實(shí)際job的執(zhí)行時(shí)間要多的多。對于大多數(shù)這種情況,Hive可以通過本地模式在單臺(tái)機(jī)器上處理所有的任務(wù)。對于小數(shù)據(jù)集,執(zhí)行時(shí)間可以明顯被縮短。即只啟動(dòng)一個(gè)map和reduce任務(wù),且在單臺(tái)主機(jī)上執(zhí)行。相關(guān)參數(shù)設(shè)置如下:

//開啟本地mr,自動(dòng)根據(jù)下面的配置決定是否使用本地模式
set hive.exec.mode.local.auto=true;  

//設(shè)置local mr的最大輸入數(shù)據(jù)量,當(dāng)輸入數(shù)據(jù)量小于這個(gè)值時(shí)采用local  mr的方式,默認(rèn)為134217728bytes,即128M
set hive.exec.mode.local.auto.inputbytes.max=50000000;

//設(shè)置local mr的最大輸入文件個(gè)數(shù),當(dāng)輸入文件個(gè)數(shù)小于這個(gè)值時(shí)采用local mr的方式,默認(rèn)為4
set hive.exec.mode.local.auto.input.files.max=10;

三、表的優(yōu)化

3.1 小表join大表

將key相對分散,并且數(shù)據(jù)量小的表放在join的左邊,這樣可以有效減少內(nèi)存溢出錯(cuò)誤發(fā)生的幾率,因?yàn)槭菍⒆筮叺谋硐茸x取的;再進(jìn)一步,可以使用Group變小的維度表(1000條以下的記錄條數(shù))先進(jìn)內(nèi)存。在map端完成reduce。
實(shí)際測試發(fā)現(xiàn):新版的hive已經(jīng)對小表JOIN大表和大表JOIN小表進(jìn)行了優(yōu)化。小表放在左邊和右邊已經(jīng)沒有明顯區(qū)別。

3.2 大表join大表

這個(gè)實(shí)驗(yàn)過程中可以打開hadoop的jobhistory server來查看job的執(zhí)行情況,包括執(zhí)行的時(shí)間等。

配置 mapred-site.xml
<property>
<name>mapreduce.jobhistory.address</name>
<value>bigdata111:10020</value>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>bigdata111:19888</value>
</property>

啟動(dòng)歷史服務(wù)器:
mr-jobhistory-daemon.sh start historyserver

進(jìn)入historyserver 的web頁面:
http://192.168.1.102:19888

hive使用過程中有哪些調(diào)優(yōu)策略

圖 3.1 hive大表join結(jié)果圖

可以看到j(luò)ob結(jié)果有很多執(zhí)行結(jié)果狀態(tài)參數(shù),比如執(zhí)行時(shí)間等。

3.2.1 空key過濾

有時(shí)join超時(shí)是因?yàn)槟承﹌ey對應(yīng)的數(shù)據(jù)太多,而相同key對應(yīng)的數(shù)據(jù)都會(huì)發(fā)送到相同的reducer上,從而導(dǎo)致內(nèi)存不夠。此時(shí)我們應(yīng)該仔細(xì)分析這些異常的key,很多情況下,這些key對應(yīng)的數(shù)據(jù)是異常數(shù)據(jù),我們需要在SQL語句中進(jìn)行過濾。比如說key是null,如果是異常數(shù)據(jù)的話,就應(yīng)該過濾掉。例如:

 insert overwrite table jointable 
select n.* from (select * from nullidtable where id is not null ) n  left join ori o on n.id = o.id;
這里就事先對 nullidtable 表中 id 為null 的行過濾掉。
但是要注意,確定key是null的數(shù)據(jù)是無效數(shù)據(jù)時(shí)才過濾,如果是有效數(shù)據(jù)就不能采用這種方式了

3.2.2空key轉(zhuǎn)換

有時(shí)雖然某個(gè)key為空對應(yīng)的數(shù)據(jù)很多,但是相應(yīng)的數(shù)據(jù)不是異常數(shù)據(jù),必須要包含在join的結(jié)果中,此時(shí)我們可以表a中key為空的字段賦一個(gè)隨機(jī)的值,使得數(shù)據(jù)隨機(jī)均勻地分不到不同的reducer上。例如:

insert overwrite table jointable
select n.* from nullidtable n full join ori o on 
case when n.id is null then concat('hive', rand()) else n.id end = o.id;

使用 case when xxx then value1 else id end  語句判斷id是否為空,為空則用隨機(jī)數(shù)替代,否則直接

3.3 開啟自動(dòng)map join

如果不指定MapJoin或者不符合MapJoin的條件,那么Hive解析器會(huì)將Join操作轉(zhuǎn)換成Common Join,即:在Reduce階段完成join。容易發(fā)生數(shù)據(jù)傾斜??梢杂肕apJoin把小表全部加載到內(nèi)存在map端進(jìn)行join,避免reducer處理。
  我們可以指定當(dāng)小表超過多少時(shí)采用reduce join,小于就采用map join

(1)設(shè)置自動(dòng)選擇Mapjoin
set hive.auto.convert.join = true; 默認(rèn)為true

(2)大表小表的閾值設(shè)置(默認(rèn)25M一下認(rèn)為是小表):
set hive.mapjoin.smalltable.filesize=25000000;

3.4 group by自動(dòng)負(fù)載均衡

采取reduce聚合默認(rèn)情況下,Map階段同一Key數(shù)據(jù)分發(fā)給一個(gè)reduce,當(dāng)一個(gè)key數(shù)據(jù)過大時(shí)就傾斜了。并不是所有的聚合操作都需要在Reduce端完成,很多聚合操作都可以先在Map端進(jìn)行部分聚合,最后在Reduce端得出最終結(jié)果。

(1)是否在Map端進(jìn)行聚合,默認(rèn)為True
    hive.map.aggr = true
(2)在Map端進(jìn)行聚合操作的條目數(shù)目
    hive.groupby.mapaggr.checkinterval = 100000
(3)有數(shù)據(jù)傾斜的時(shí)候進(jìn)行負(fù)載均衡(默認(rèn)是false)
    hive.groupby.skewindata = true
當(dāng)這一項(xiàng)設(shè)置為true時(shí),生成的查詢計(jì)劃會(huì)有兩個(gè)MR Job。第一個(gè)MR Job中,Map的輸出結(jié)果會(huì)隨機(jī)分布到Reduce中,每個(gè)Reduce做部分聚合操作,并輸出結(jié)果,這樣處理的結(jié)果是相同的Group By Key有可能被分發(fā)到不同的Reduce中,從而達(dá)到負(fù)載均衡的目的;第二個(gè)MR Job再根據(jù)預(yù)處理的數(shù)據(jù)結(jié)果按照Group By Key分布到Reduce中(這個(gè)過程可以保證相同的Group By Key被分布到同一個(gè)Reduce中),最后完成最終的聚合操作。

3.5 去重統(tǒng)計(jì)先group by再count

普通情況選,我們統(tǒng)計(jì)去重后的數(shù)據(jù)行數(shù)時(shí),是這樣的統(tǒng)計(jì)的:

select count(distinct id) from bigtable;

這種方式有一個(gè)巨大的缺陷,因?yàn)槭钦w去重的,所以MapReduce時(shí),無法使用多個(gè)reducer任務(wù),如果使用了,就變成局部去重,但整體不能保證去重。這樣的話一個(gè)reducer 的負(fù)載其實(shí)是很大的,可以采用下面的方式優(yōu)化:

select count(id) from (select id from bigtable group by id) a;

先啟動(dòng)MapReduce根據(jù)id進(jìn)行g(shù)roup by,這個(gè)過程中其實(shí)已經(jīng)去重了,而且group by中是可以用多個(gè)reducer任務(wù),這樣的就可以減輕單個(gè)reducer 的壓力。接著再啟動(dòng)另外一個(gè)MapReduce,用于count統(tǒng)計(jì)group by之后的數(shù)據(jù)的行數(shù)。所以這里是變成兩個(gè)MapReduce job執(zhí)行的任務(wù),所以要注意僅當(dāng)數(shù)據(jù)量大時(shí)采用這種方式,否則多任務(wù)的調(diào)度反而占用更多資源,并且效率也不好。

3.6 join之前進(jìn)行行列過濾

列過濾:盡量不使用select * 而是指定要查詢的字段
行過濾:在我們進(jìn)行外部join時(shí),如果某個(gè)表要過濾到某些行。要先在join之前進(jìn)行過濾,不要兩表join之后再過濾,因?yàn)閖oin之后數(shù)據(jù)量比原來增大了,過濾要更久。
join之后過濾:

select o.id from bigtable b
join ori o on o.id = b.id
where o.id <= 10;

所以where語句不要放在join之后,這是不好的,大數(shù)據(jù)量的時(shí)候耗時(shí)很長

join之前過濾:

select b.id from bigtable b
join (select id from ori where id <= 10 ) o on b.id = o.id;

這里就是先對ori表進(jìn)行id列的過濾,過濾后的數(shù)據(jù)再和bigtable表join

3.7 開啟動(dòng)態(tài)分區(qū)調(diào)整

如果hive表是一張分區(qū)表,一般情況下,我們進(jìn)行insert插入時(shí)間時(shí),需要明顯指定插入到哪個(gè)分區(qū)中。而如果開啟了動(dòng)態(tài)分區(qū),那么就會(huì)根據(jù)導(dǎo)入數(shù)據(jù)的分區(qū)字段,自動(dòng)導(dǎo)入到指定分區(qū),如果分區(qū)不存在,就自動(dòng)創(chuàng)建。

(1)開啟動(dòng)態(tài)分區(qū)功能(默認(rèn)true,開啟)
hive.exec.dynamic.partition=true

(2)設(shè)置為非嚴(yán)格模式(動(dòng)態(tài)分區(qū)的模式,默認(rèn)strict,表示必須指定至少一個(gè)分區(qū)為靜態(tài)分區(qū),nonstrict模式表示允許所有的分區(qū)字段都可以使用動(dòng)態(tài)分區(qū)。)
hive.exec.dynamic.partition.mode=nonstrict

(3)在所有執(zhí)行MR的節(jié)點(diǎn)上,最大一共可以創(chuàng)建多少個(gè)動(dòng)態(tài)分區(qū)。
hive.exec.max.dynamic.partitions=1000

(4)在每個(gè)執(zhí)行MR的節(jié)點(diǎn)上,最大可以創(chuàng)建多少個(gè)動(dòng)態(tài)分區(qū)。該參數(shù)需要根據(jù)實(shí)際的數(shù)據(jù)來設(shè)定。比如:源數(shù)據(jù)中包含了一年的數(shù)據(jù),即day字段有365個(gè)值,那么該參數(shù)就需要設(shè)置成大于365,如果使用默認(rèn)值100,則會(huì)報(bào)錯(cuò)。
hive.exec.max.dynamic.partitions.pernode=100

(5)整個(gè)MR Job中,最大可以創(chuàng)建多少個(gè)HDFS文件。
hive.exec.max.created.files=100000

(6)當(dāng)有空分區(qū)生成時(shí),是否拋出異常。一般不需要設(shè)置。
hive.error.on.empty.partition=false

例子:
需求:將ori中的數(shù)據(jù)按照時(shí)間(如:20111230000008),插入到目標(biāo)表ori_partitioned_target的相應(yīng)分區(qū)中

(1)創(chuàng)建分區(qū)表
create table ori_partitioned(id bigint, time bigint, uid string, keyword string, url_rank int, click_num int, click_url string) 
partitioned by (p_time bigint) 
row format delimited fields terminated by '\t';
(2)加載數(shù)據(jù)到分區(qū)表中
hive (default)> load data local inpath '/opt/module/datas/ds1' into table ori_partitioned partition(p_time='20111230000010') ;
hive (default)> load data local inpath '/opt/module/datas/ds2' into table ori_partitioned partition(p_time='20111230000011') ;
(3)創(chuàng)建目標(biāo)分區(qū)表
create table ori_partitioned_target(id bigint, time bigint, uid string, keyword string, url_rank int, click_num int, click_url string) PARTITIONED BY (p_time STRING) row format delimited fields terminated by '\t';
(4)設(shè)置動(dòng)態(tài)分區(qū)
set hive.exec.dynamic.partition = true;
set hive.exec.dynamic.partition.mode = nonstrict;
set hive.exec.max.dynamic.partitions = 1000;
set hive.exec.max.dynamic.partitions.pernode = 100;
set hive.exec.max.created.files = 100000;
set hive.error.on.empty.partition = false;

hive (default)> insert overwrite table ori_partitioned_target partition (p_time) 
select id, time, uid, keyword, url_rank, click_num, click_url, p_time from ori_partitioned;

四、數(shù)據(jù)傾斜

4.1 合理設(shè)置map數(shù)

4.1.1 大量小文件導(dǎo)致大量map

這個(gè)問題在MapReduce中說過了,默認(rèn)是按每個(gè)文件一個(gè)整體去切片的,一個(gè)文件至少是一個(gè)切片,大量小文件時(shí),勢必產(chǎn)生很多map任務(wù)。這個(gè)問題在hive中也是一樣的。
解決方案:
在map執(zhí)行前合并小文件,減少map數(shù):CombineHiveInputFormat具有對小文件進(jìn)行合并的功能(系統(tǒng)默認(rèn)的格式)。HiveInputFormat沒有對小文件合并功能。
set hive.input.format= org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

4.1.2 單個(gè)map工作量過大

當(dāng)每個(gè)map執(zhí)行都非常緩慢時(shí),可能是因?yàn)樘幚磉壿嫃?fù)雜,這時(shí)候可以考慮將切片大小設(shè)置的小點(diǎn),增加map數(shù)目,減輕每個(gè)map工作量。
  增加map的方法為:根據(jù)computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M公式,調(diào)整maxSize最大值。讓maxSize最大值低于blocksize就可以增加map的個(gè)數(shù)。

設(shè)置最大切片值為100個(gè)字節(jié)
hive (default)> set mapreduce.input.fileinputformat.split.maxsize=100;

這里只是例子,具體設(shè)置為多大,根據(jù)具體情況決定

4.2 合理設(shè)置reduce數(shù)

調(diào)整方式:

(1)每個(gè)Reduce處理的數(shù)據(jù)量默認(rèn)是256MB
hive.exec.reducers.bytes.per.reducer=256000000
(2)每個(gè)任務(wù)最大的reduce數(shù),默認(rèn)為1009
hive.exec.reducers.max=1009
(3)計(jì)算reducer數(shù)的公式
N=min(參數(shù)2,總輸入數(shù)據(jù)量/參數(shù)1)

要注意:

1)過多的啟動(dòng)和初始化reduce也會(huì)消耗時(shí)間和資源;
2)另外,有多少個(gè)reduce,就會(huì)有多少個(gè)輸出文件,如果生成了很多個(gè)小文件,那么如果這些小文件作為下一個(gè)任務(wù)的輸入,則也會(huì)出現(xiàn)小文件過多的問題;
在設(shè)置reduce個(gè)數(shù)的時(shí)候也需要考慮這兩個(gè)原則:處理大數(shù)據(jù)量利用合適的reduce數(shù);使單個(gè)reduce任務(wù)處理數(shù)據(jù)量大小要合適;

五、開啟并發(fā)執(zhí)行

Hive會(huì)將一個(gè)查詢轉(zhuǎn)化成一個(gè)或者多個(gè)階段。這樣的階段可以是MapReduce階段、抽樣階段、合并階段、limit階段?;蛘逪ive執(zhí)行過程中可能需要的其他階段。默認(rèn)情況下,Hive一次只會(huì)執(zhí)行一個(gè)階段。不過,某個(gè)特定的job可能包含眾多的階段,而這些階段可能并非完全互相依賴的,也就是說有些階段是可以并行執(zhí)行的,這樣可能使得整個(gè)job的執(zhí)行時(shí)間縮短。不過,如果有更多的階段可以并行執(zhí)行,那么job可能就越快完成。
  通過設(shè)置參數(shù)hive.exec.parallel值為true,就可以開啟并發(fā)執(zhí)行。不過,在共享集群中,需要注意下,如果job中并行階段增多,那么集群利用率就會(huì)增加。

set hive.exec.parallel=true;              //打開任務(wù)并行執(zhí)行
set hive.exec.parallel.thread.number=16;  //同一個(gè)sql允許最大并行度,默認(rèn)為8。

六、開啟嚴(yán)格模式

Hive提供了一個(gè)嚴(yán)格模式,可以防止用戶執(zhí)行那些可能意向不到的不好的影響的查詢。通過設(shè)置屬性hive.mapred.mode值為默認(rèn)是非嚴(yán)格模式nonstrict 。開啟嚴(yán)格模式需要修改hive.mapred.mode值為strict,開啟嚴(yán)格模式可以禁止3種類型的查詢。

<property>
    <name>hive.mapred.mode</name>
    <value>strict</value>
    <description>
      The mode in which the Hive operations are being performed. 
      In strict mode, some risky queries are not allowed to run. They include:
        Cartesian Product.
        No partition being picked up for a query.
        Comparing bigints and strings.
        Comparing bigints and doubles.
        Orderby without limit.
    </description>
  </property>

限制以下三種情況的sql語句的執(zhí)行:
1)對于分區(qū)表,除非where語句中含有分區(qū)字段過濾條件來限制范圍,否則不允許執(zhí)行。換句話說,就是用戶不允許掃描所有分區(qū)。進(jìn)行這個(gè)限制的原因是,通常分區(qū)表都擁有非常大的數(shù)據(jù)集,而且數(shù)據(jù)增加迅速。沒有進(jìn)行分區(qū)限制的查詢可能會(huì)消耗令人不可接受的巨大資源來處理這個(gè)表。
2)對于使用了order by語句的查詢,要求必須使用limit語句。因?yàn)閛rder by為了執(zhí)行排序過程會(huì)將所有的結(jié)果數(shù)據(jù)分發(fā)到同一個(gè)Reducer中進(jìn)行處理,強(qiáng)制要求用戶增加這個(gè)LIMIT語句可以防止Reducer額外執(zhí)行很長一段時(shí)間。
3)限制笛卡爾積的查詢。對關(guān)系型數(shù)據(jù)庫非常了解的用戶可能期望在執(zhí)行JOIN查詢的時(shí)候不使用ON語句而是使用where語句,這樣關(guān)系數(shù)據(jù)庫的執(zhí)行優(yōu)化器就可以高效地將WHERE語句轉(zhuǎn)化成那個(gè)ON語句。不幸的是,Hive并不會(huì)執(zhí)行這種優(yōu)化,因此,如果表足夠大,那么這個(gè)查詢就會(huì)出現(xiàn)不可控的情況。

七、開啟JVM重用

JVM重用是Hadoop調(diào)優(yōu)參數(shù)的內(nèi)容,其對Hive的性能具有非常大的影響,特別是對于很難避免小文件的場景或task特別多的場景,這類場景大多數(shù)執(zhí)行時(shí)間都很短。
  Hadoop的默認(rèn)配置通常是使用派生JVM來執(zhí)行map和Reduce任務(wù)的。這時(shí)JVM的啟動(dòng)過程可能會(huì)造成相當(dāng)大的開銷,尤其是執(zhí)行的job包含有成百上千task任務(wù)的情況。JVM重用可以使得JVM實(shí)例在同一個(gè)job中重新使用N次。N的值可以在Hadoop的mapred-site.xml文件中進(jìn)行配置。通常在10-20之間,具體多少需要根據(jù)具體業(yè)務(wù)場景測試得出。

<property>
  <name>mapreduce.job.jvm.numtasks</name>
  <value>10</value>
  <description>How many tasks to run per jvm. If set to -1, there is
  no limit. 
  </description>
</property>

當(dāng)前這個(gè)也有缺點(diǎn),這個(gè)功能的缺點(diǎn)是,開啟JVM重用將一直占用使用到的task插槽,以便進(jìn)行重用,直到任務(wù)完成后才能釋放,也就說等整個(gè)job執(zhí)行完畢后,占用的所有jvm才會(huì)釋放。如果某個(gè)“不平衡的”job中有某幾個(gè)reduce task執(zhí)行的時(shí)間要比其他Reduce task消耗的時(shí)間多的多的話,那么整個(gè)job保留的插槽就會(huì)一直空閑著卻無法被其他的job使用,直到所有的task都結(jié)束了才會(huì)釋放。

八、推測執(zhí)行

關(guān)于MapReduce的推測執(zhí)行見MapReduce部分的推測執(zhí)行相關(guān)的內(nèi)容,這里不重復(fù)。
而hive自己也有提供了配置項(xiàng)來控制reduce-side的推測執(zhí)行:

<property>
    <name>hive.mapred.reduce.tasks.lative.execution</name>
    <value>true</value>
    <description>Whether speculative execution for reducers should be turned on. </description>
  </property>

關(guān)于調(diào)優(yōu)這些推測執(zhí)行變量,還很難給一個(gè)具體的建議。如果用戶對于運(yùn)行時(shí)的偏差非常敏感的話,那么可以將這些功能關(guān)閉掉。如果用戶因?yàn)檩斎霐?shù)據(jù)量很大而需要執(zhí)行長時(shí)間的map或者Reduce task的話,那么啟動(dòng)推測執(zhí)行造成的浪費(fèi)是非常巨大大。

九、啟用壓縮

這個(gè)可以看“hive--基本原理”中壓縮相關(guān)內(nèi)容。主要就是從減少map和reduce傳遞的數(shù)據(jù)量,以及減少reduce輸出文件的大小進(jìn)行優(yōu)化。

十、查看執(zhí)行計(jì)劃

執(zhí)行sql任務(wù)時(shí),可以使用 explain查看執(zhí)行的預(yù)計(jì)過程,看看有沒有可優(yōu)化的點(diǎn)。

(1)查看下面這條語句的執(zhí)行計(jì)劃
hive (default)> explain select * from emp;

(2)查看詳細(xì)執(zhí)行計(jì)劃
hive (default)> explain extended select * from emp;

以上是“hive使用過程中有哪些調(diào)優(yōu)策略”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享標(biāo)題:hive使用過程中有哪些調(diào)優(yōu)策略
網(wǎng)址分享:http://jinyejixie.com/article18/jjppdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)軟件開發(fā)、關(guān)鍵詞優(yōu)化網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
抚远县| 宁安市| 获嘉县| 新竹县| 岳西县| 鹿邑县| 乐平市| 柳林县| 石楼县| 霍州市| 汝南县| 前郭尔| 哈尔滨市| 岢岚县| 嵩明县| 辽中县| 台江县| 九台市| 南宁市| 昔阳县| 潼南县| 深州市| 兰溪市| 丰县| 察雅县| 革吉县| 白水县| 峨眉山市| 万全县| 仁布县| 仁化县| 惠东县| 孝感市| 巢湖市| 花莲县| 兴仁县| 龙岩市| 江源县| 太白县| 阿巴嘎旗| 无极县|