摘要:?分別描述使用MaxCompute Tunnel命令行工具上傳數(shù)據(jù)的數(shù)據(jù)類、網(wǎng)絡(luò)類、計(jì)費(fèi)類問(wèn)題,長(zhǎng)期更新,歡迎大家拍磚~~
數(shù)據(jù)問(wèn)題
Q:使用Tunnel Java SDK上傳數(shù)據(jù),上傳數(shù)據(jù)可以自動(dòng)分配到各個(gè)分區(qū)嗎?
A:目前Tunnel是無(wú)法自動(dòng)上傳數(shù)據(jù)并自動(dòng)分配到各個(gè)分區(qū)的:每一次上傳只支持?jǐn)?shù)據(jù)上傳到一張表或表的一個(gè)分區(qū),有分區(qū)的表一定要指定上傳的分區(qū),多級(jí)分區(qū)一定要指定到末級(jí)分區(qū)。關(guān)于JAVA SDK可參考:Java SDK。
Q:使用Tunnel Java SDK上傳數(shù)據(jù),如果是分區(qū)表,SDK能夠動(dòng)態(tài)根據(jù)數(shù)據(jù)創(chuàng)建不同的分區(qū)嗎?
A:分區(qū)需要首先創(chuàng)建好,在使用SDK上傳數(shù)據(jù)時(shí)指定。您也可以先把數(shù)據(jù)上傳到MaxCompute上的表中,再用SQL語(yǔ)句動(dòng)態(tài)分區(qū)。
Q:使用Tunnel命令行tunnel upload D:\test test/pt="time"?在 DataIDE上進(jìn)行分區(qū)上傳為什么報(bào)錯(cuò):FAILED: error occurred while running tunnel command?
A:DataIDE是不支持MaxCompute Tunnel命令行工具的upload語(yǔ)句的。
Q:利用Tunnel命令行工具上傳數(shù)據(jù)時(shí),共分為50個(gè)block,開(kāi)始一切正常,但是在第22個(gè)block時(shí),出現(xiàn)Upload fail,retry 5次后,直接跳過(guò)開(kāi)始上傳第23個(gè)block,為什么會(huì)發(fā)生這種情況?
A:Block 的概念:一個(gè) block 對(duì)應(yīng)一個(gè)HTTP request,多個(gè) block 的上傳可以并發(fā)而且是原子的,一次同步請(qǐng)求要么成功要么失敗,不會(huì)污染其他的 block。
重傳retry有次數(shù)的限制的,當(dāng)重傳的次數(shù)超過(guò)了這個(gè)限制,就會(huì)繼續(xù)上傳下一個(gè)block。上傳完成后,可以通過(guò)select count(*)語(yǔ)句,檢查是否有數(shù)據(jù)丟失。
Q:本地服務(wù)器每天采集的網(wǎng)站日志有10GB,需要上傳至MaxCompute,在使用Tunnel Upload命令上傳達(dá)到的速度約300KB/S 如何提升上傳速度?
A:Tunnel Upload命令上傳是不設(shè)速度限制的。上傳速度的瓶頸在網(wǎng)絡(luò)帶寬以及服務(wù)器性能。為了提升性能,可以考慮分區(qū)分表,在多臺(tái)ECS上傳下載數(shù)據(jù)。
Q:如何在Shell腳本中將一個(gè)TXT文件中的數(shù)據(jù)上傳到MaxCompute的表中, 即把這兩條命令組合成一條?命令如下:
/odpscmd/bin/odpscmd
tunnel upload "$FILE" project.table
A:可參考客戶端設(shè)置命令行客戶端的啟動(dòng)參數(shù),在Shell中啟動(dòng)命令是:
/odpscmd/bin/odpscmd -e “tunnel upload "$FILE" project.table”
Q:MaxCompute使用TunnelUpload命令上傳數(shù)據(jù),如果數(shù)據(jù)里面有回車(chē)或空格為什么上傳失???
A:如果數(shù)據(jù)里有回車(chē)或空格,可以給數(shù)據(jù)設(shè)置不同與回車(chē)或空格的分隔符后,用-rd和-fd指定對(duì)應(yīng)的分隔符實(shí)現(xiàn)數(shù)據(jù)的上傳。如果無(wú)法更換數(shù)據(jù)中的分隔符,可以將數(shù)據(jù)作為單獨(dú)一行上傳,然后使用UDF解析。
例如下列數(shù)據(jù)中包含回車(chē),使用“,”作為列分隔符rd,使用“@”作為行分隔符fd,可以正常上傳:
數(shù)據(jù)內(nèi)容:
shopx,x_id,100@ shopy,y_id,200@ shopz,z_i d,300@
上傳命令:
odps@ MaxCompute_DOC>tunnel u d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false -fd "," -rd "@";
上傳結(jié)果:
+-----------+-------------+-------------+-----------+--------+|?shop_name?|?customer_id?|?total_price?|?sale_date?|?region?| +-----------+-------------+-------------+-----------+--------+|?shopx?????|?x_id????????|?100.0???????|?201312????|?hangzhou?| |?shopy???|?y_id????????|?200.0???????|?201312????|?hangzhou?| |?shopz???|?z_id d??????|?300.0???????|?201312????|?hangzhou?| +-----------+-------------+-------------+-----------+--------+
Q:MaxCompute使用TunnelUpload命令上傳數(shù)據(jù),使用的","進(jìn)行列分割, 現(xiàn)在description字段里, 數(shù)據(jù)有逗號(hào), 或者"|"符號(hào), 這種情況怎么分割?
A:如果數(shù)據(jù)描述字段內(nèi)本身有逗號(hào),可以考慮轉(zhuǎn)換數(shù)據(jù)的分隔符為其他符號(hào),再通過(guò)-fd指定為其他分隔符進(jìn)行上傳,舉例如下:
用戶有一個(gè)崗位需求的EXCEL數(shù)據(jù)在Windows環(huán)境下需要通過(guò)Tunnel Upload命令上傳,表格內(nèi)本身包含“,”。首先可通過(guò)Windows環(huán)境設(shè)置EXCEL轉(zhuǎn)換為CSV文件的默認(rèn)分隔符:Win7系統(tǒng)在控制面板?時(shí)鐘、語(yǔ)言和區(qū)域?選擇?更改日期、時(shí)間或數(shù)字格式,點(diǎn)擊其他設(shè)置。本例中考慮到原始數(shù)據(jù)中沒(méi)有“”字符,設(shè)置分隔符為“”字符,設(shè)置分隔符為“”,如下圖所示:
完成設(shè)置后,使用EXCEL將數(shù)據(jù)另存為CSV文件,并且利用Notepad++等文本編輯工具轉(zhuǎn)碼為UTF-8編碼(Tunnel默認(rèn)使用的編碼格式),檢查是否文件分隔符已變成“$”:
標(biāo)題$所在地$薪資$公司$公司介紹鏈接$公司類型$公司規(guī)模$所屬行業(yè)$工作經(jīng)驗(yàn)$學(xué)歷$所招人數(shù)$發(fā)布時(shí)間$標(biāo)簽$職位信息$上班地址$公司信息$頁(yè)面網(wǎng)址$采集時(shí)間
使用TunnelUpload命令上傳數(shù)據(jù)并指定分隔符(需預(yù)先在MaxCompute上創(chuàng)建好表格),即可成功上傳:
odps@?MaxCompute_DOC>tunnel?u?d:\12JD.CSV?JD2?-s?false?-fd?"$"; Upload?session:?201808201531180d47df0b0b18fa45Start?upload:d:\12JD.CSVUsing?\r\n?to?split?recordsUpload?in?strict?schema?mode:?trueTotal?bytes:111028???????Split?input?to?1?blocks2018-08-20?15:31:18?????upload?block:?'1'2018-08-20?15:31:18?????upload?block?complete,?blockid=1upload?complete,?average?speed?is?108.4?KB/s OK
Q:MaxCompute使用Tunnel Upload命令上傳數(shù)據(jù)。Tunnel Upload命令默認(rèn)使用逗號(hào)分割的,但數(shù)據(jù)CSV文件也是用逗號(hào)分割的:文件里面有一列數(shù)據(jù)里面本身就含有用引號(hào)引起來(lái)的逗號(hào)。這種情況如何處理?
A:CSV文件使用其他分隔符,可以通過(guò) -fd參數(shù)指定。
通常來(lái)說(shuō),如果數(shù)據(jù)例有很多符號(hào),可能與分隔符發(fā)生沖突,可以自定義數(shù)據(jù)中分隔符來(lái)避免沖突,比如#@#@@ 或者)*#@*#@@$。
Q:MaxCompute使用Tunnel Upload命令上傳數(shù)據(jù)時(shí)失敗,內(nèi)存溢出報(bào)錯(cuò)java.lang.OutOfMemoryError:Java heap space是什么原因?
A:從報(bào)錯(cuò)上看是數(shù)據(jù)上傳的時(shí)候的內(nèi)存溢出了。目前TunnelUpload命令是支持海量數(shù)據(jù)的上傳的,如果出現(xiàn)內(nèi)存溢出,可能是因?yàn)閿?shù)據(jù)的行分隔符和列分隔符設(shè)置錯(cuò)誤,導(dǎo)致整個(gè)文本會(huì)被認(rèn)為是同一條數(shù)據(jù),緩存到內(nèi)存里再做split,導(dǎo)致內(nèi)存溢出報(bào)錯(cuò)。
這種情況下可以先拿少量的數(shù)據(jù)測(cè)試,把-td及-fd調(diào)試過(guò)了后再上傳拿全量的數(shù)據(jù)。
Q:MaxCompute使用Tunnel Upload命令上傳數(shù)據(jù),需要上傳很多個(gè)數(shù)據(jù)文件到一個(gè)表中,是否有方法寫(xiě)一個(gè)腳本就可以把文件夾下的所有數(shù)據(jù)文件循環(huán)上傳上去?
A:TunnelUpload命令上傳支持文件或目錄(指一級(jí)目錄)的上傳。
例如下述命令,上傳數(shù)據(jù)為文件夾d:data,上傳命令為:
odps@ MaxCompute_DOC>tunnel u d:\data sale_detail/sale_date=201312,region=hangzhou -s false;
詳情請(qǐng)參見(jiàn)Tunnel命令操作。
Q:導(dǎo)入文件夾會(huì)報(bào)錯(cuò):字段不匹配colum mismatch,但是這個(gè)文件夾下的文件單獨(dú)導(dǎo)入時(shí)又是可以導(dǎo)入的,是因?yàn)槲募髥幔?/h4>
A:這種情況下,可以在upload命令后加上-dbr=false -s true對(duì)數(shù)據(jù)格式進(jìn)行驗(yàn)證。出現(xiàn)column mismatch通常是由于列數(shù)對(duì)不上導(dǎo)致的:可能性較大的原因包括列分隔符設(shè)置的不對(duì)或文件的最后有空行,導(dǎo)致空行進(jìn)行分隔符分割的時(shí)候分不出那么多列。
Q:MaxCompute使用Tunnel Upload命令上傳兩個(gè)文件,上傳完第一個(gè)文件命令結(jié)束之后,第二個(gè)文件不會(huì)上傳是什么原因?沒(méi)有報(bào)錯(cuò)信息,就是第一個(gè)文件上傳之后第二個(gè)文件上傳命令不執(zhí)行了。上傳命令如下:
D:\odps\bin\odpscmd.bat -e"tunnel upload d:\data1.txt sale_detail/sale_data=201312 -fd="$" -mbr=5 --scan=true; "
D:\odps\bin\odpscmd.bat -e"tunnel upload d:\data2.txt sale_detail/sale_data=201312 -fd="$" -mbr=5 --scan=true; "
A:當(dāng)使用老版本MaxCompute命令行客戶端,上傳參數(shù)有--scan的時(shí)候,續(xù)跑模式的參數(shù)傳遞有問(wèn)題,將--scan=true?去掉重試即可。
Q:MaxCompute使用Tunnel Upload命令把一個(gè)目錄下的所有文件上傳到一個(gè)表里,并且想要自動(dòng)建立分區(qū),具體的命令是?tunnel upload /data/2018/20180813/*.json app_log /dt=20180813 -fd '@@' -acp true;?,執(zhí)行報(bào)錯(cuò):
Unrecognized?option:?-acp FAILED:?error?occurred?while?running?tunnel?command
A:出現(xiàn)這種報(bào)錯(cuò)通常是因?yàn)槭怯昧瞬恢С值拿罨蜃址axCompute使用Tunnel Upload命令上傳不支持通配符及正則表達(dá)式。
Q:MaxCompute使用Tunnel Upload命令上傳文件數(shù)據(jù)報(bào)錯(cuò),是否有像MySQL的-f的強(qiáng)制跳過(guò)錯(cuò)誤數(shù)據(jù)繼續(xù)進(jìn)行上傳的命令?
A:出現(xiàn)這種錯(cuò)誤是因?yàn)閿?shù)據(jù)格式問(wèn)題,例如數(shù)據(jù)類型不對(duì),可參考Tunnel命令操作,使用-dbr true參數(shù)忽略臟數(shù)據(jù)(多列,少列,列數(shù)據(jù)類型不匹配等情況)。-dbr參數(shù)默認(rèn)用false,表示不忽視臟數(shù)據(jù),當(dāng)值為true時(shí),將不符合表定義的數(shù)據(jù)全部忽略。
Q:MaxCompute使用Tunnel Upload命令上傳文件數(shù)據(jù)報(bào)錯(cuò)如下是為什么?
java.io.IOException:?RequestId=XXXXXXXXXXXXXXXXXXXXXXXXX,?ErrorCode=StatusConflict,?ErrorMessage=You?cannot?complete?the?specified?operation?under?the?current?upload?or?download?status. ????????at?com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93) ????????at?com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:92) ????????at?com.xgoods.utils.aliyun.maxcompute.OdpsTunnel.upload(OdpsTunnel.java:45) ????????at?com.xeshop.task.SaleStatFeedTask.doWork(SaleStatFeedTask.java:119) ????????at?com.xgoods.main.AbstractTool.excute(AbstractTool.java:90) ????????at?com.xeshop.task.SaleStatFeedTask.main(SaleStatFeedTask.java:305)
A:這個(gè)錯(cuò)誤的提示是當(dāng)前已經(jīng)是在上傳或下載中,所以無(wú)法再操作。
Q:MaxCompute使用Tunnel SDK上傳文件數(shù)據(jù)報(bào)錯(cuò)重復(fù)提交是為什么?
RequestId=20170116xxxxxxx,?ErrorCode=StatusConflict,?ErrorMessage=You?cannot?complete?the?specified?operation?under?the?current?upload?or?download?status.?java.io.IOException:?RequestId=20170116xxxxxxx,?ErrorCode=StatusConflict,?ErrorMessage=You?cannot?complete?the?specified?operation?under?the?current?upload?or?download?status. at?com.aliyun.odps.tunnel.io.TunnelRecordWriter.close(TunnelRecordWriter.java:93)
A:由上述報(bào)錯(cuò)可見(jiàn),這個(gè)問(wèn)題是在準(zhǔn)備close這個(gè)writer時(shí)出現(xiàn)的,可能有以下幾種情況:
對(duì)一個(gè)已經(jīng)關(guān)閉的writer做了關(guān)閉操作。
這個(gè)writer對(duì)應(yīng)的session已經(jīng)關(guān)閉。
該session已經(jīng)被提交過(guò)。
可以針對(duì)上述可能出現(xiàn)的原因進(jìn)行排查,比如打印當(dāng)前writer和session的狀態(tài)。
Q:MaxCompute使用Tunnel SDK上傳數(shù)據(jù)時(shí),編寫(xiě)完UDF打成Jar包后上傳,對(duì)Jar包大小有要求嗎?
A:Jar包不能超過(guò)10M, 如果Jar超過(guò)10M,建議轉(zhuǎn)用MaxCompute Tunnel Upload命令行上傳數(shù)據(jù)。
Q:MaxCompute使用Tunnel Upload命令行上傳數(shù)據(jù),對(duì)數(shù)據(jù)大小有限制嗎?
A:Tunnel Upload命令行通常不會(huì)限制需上傳的數(shù)據(jù)大小。
Q:MaxCompute使用Tunnel Upload命令行上傳CSV文件,如何跳過(guò)第一行表頭上傳其他數(shù)據(jù)?
A:建議使用-h true參數(shù),跳過(guò)table header.
Q:使用Tunnel批量數(shù)據(jù)通道SDK來(lái)導(dǎo)入MaxCompute數(shù)據(jù)庫(kù)是否有分區(qū)限制?
A:使用Tunnel批量數(shù)據(jù)通道SDK來(lái)導(dǎo)入MaxCompute數(shù)據(jù)庫(kù)。目前支持的是6萬(wàn)個(gè)分區(qū)。
分區(qū)數(shù)量過(guò)多,會(huì)給統(tǒng)計(jì)和分析帶來(lái)極大的不便。MaxCompute會(huì)限制單個(gè)作業(yè)中最多不能超過(guò)一定數(shù)量的instance。作業(yè)的instance和用戶輸入的數(shù)據(jù)量和分區(qū)數(shù)量是密切相關(guān)的,所以建議首先評(píng)估下業(yè)務(wù),選擇合適的分區(qū)策略,避免分區(qū)過(guò)多帶來(lái)的影響。
關(guān)于分區(qū)表的更多信息請(qǐng)參考分區(qū)。
此外,MaxCompute也支持通過(guò)Python SDK來(lái)進(jìn)行Tunnel批量上傳,請(qǐng)參考Python SDK中的數(shù)據(jù)上傳/下載配置。
Q:要一次性上傳8000W的數(shù)據(jù),最后在odps tunnel recordWriter.close()時(shí)報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容如下:
ErrorCode=StatusConflict, ErrorMessage=You cannot complete the specified operation under the current upload or download status.
A:這個(gè)報(bào)錯(cuò)說(shuō)明session的狀態(tài)錯(cuò)誤,建議重新創(chuàng)建個(gè)session重新上傳一下數(shù)據(jù)。從報(bào)錯(cuò)上看,很可能是前面的操作里已經(jīng)close了這個(gè)session,或者已經(jīng)commit了。對(duì)于不同的分區(qū),需要每個(gè)分區(qū)都是單獨(dú)的一個(gè)session。
為了防止多次commit導(dǎo)致的這種報(bào)錯(cuò),可以先檢查數(shù)據(jù)上傳是否已經(jīng)傳成功,如果失敗的話重新上傳一次??蓞⒖?a href="http://www.socialnewsupdate.com/outside?redirect=https://help.aliyun.com/document_detail/27845.html" target="_blank">多線程上傳示例。
Q:如何使用TunnelBufferedWriter規(guī)避使用Tunnel SDK進(jìn)行批量數(shù)據(jù)上傳出錯(cuò)的問(wèn)題?
A:MaxCompute Java SDK在0.21.3-public版本之后新增了BufferredWriter的SDK,簡(jiǎn)化了數(shù)據(jù)上傳,并且提供了容錯(cuò)功能。
BufferedWriter對(duì)用戶隱藏了block的概念:從用戶角度看,就是在session上打開(kāi)一個(gè)writer然后進(jìn)行寫(xiě)記錄即可。具體實(shí)現(xiàn)時(shí),BufferedWriter先將記錄緩存在客戶端的緩沖區(qū)中,并在緩沖區(qū)填滿之后打開(kāi)一個(gè)http連接進(jìn)行上傳。
BufferedWriter會(huì)盡最大可能容錯(cuò),保證數(shù)據(jù)上傳上去。使用方法請(qǐng)參考BufferedWriter使用指南。
Q:MaxCompute使用TunnelUpload命令行上傳CSV文件,為什么導(dǎo)入成功后原文本中有很大一部分內(nèi)容莫名消失,被“ - ”取代?
A:這種情況很可能是因?yàn)閿?shù)據(jù)編碼格式不對(duì)導(dǎo)致上傳到表的數(shù)據(jù)不對(duì),或者是分隔符使用錯(cuò)誤。建議規(guī)范原始數(shù)據(jù)后上傳.
Q:MaxCompute使用Tunnel Upload命令行上傳是否支持引用一個(gè)表的配置?
A:可以shell腳本方式執(zhí)行Tunnel Upload命令行上傳實(shí)現(xiàn)??赏ㄟ^(guò)/odpscmd/bin/odpscmd -e執(zhí)行腳本,并在腳本內(nèi)粘貼表格配置。
Q:MaxCompute使用Tunnel SDK上傳數(shù)據(jù)時(shí),經(jīng)常會(huì)發(fā)現(xiàn)Select查詢慢,SQL語(yǔ)句的執(zhí)行性能不好的情況。
遇到類似情況,可能原因是MaxCompute小文件過(guò)多,從而影響性能導(dǎo)致的。如何處理小文件過(guò)多的問(wèn)題?
A:
小文件產(chǎn)生的原因:
MaxCompute使用的分布式文件系統(tǒng)是按塊Block存放,通常文件大小比塊大小小的文件(默認(rèn)塊大小為64M),叫做小文件。
目前MaxCompute有以下場(chǎng)景可以產(chǎn)生小文件:
Reduce計(jì)算過(guò)程會(huì)產(chǎn)生大量小文件;
Tunnel數(shù)據(jù)采集過(guò)程中會(huì)生成小文件;
Job執(zhí)行過(guò)程中生成的各種臨時(shí)文件、回收站保留的過(guò)期的文件等,主要分類為:
TABLE_BACKUP:回收站中超過(guò)保留天數(shù)的表
FUXI_JOB_TMP:作業(yè)運(yùn)行臨時(shí)目錄
TMP_TABLE:作業(yè)運(yùn)行中產(chǎn)生的臨時(shí)表
INSTANCE:作業(yè)運(yùn)行時(shí)保留在meta表中的日志
LIFECYCLE:超過(guò)生命周期的的數(shù)據(jù)表或分區(qū)
INSTANCEPROFILE:作業(yè)提交及執(zhí)行完成后的profile信息
VOLUME_TMP:沒(méi)有meta信息,但在pangu上有路徑的數(shù)據(jù)
TEMPRESOURCE:用戶自定義函數(shù)使用的一次性臨時(shí)資源文件
FAILOVER:系統(tǒng)發(fā)生failover時(shí)保留的臨時(shí)文件
小文件過(guò)多會(huì)帶來(lái)以下影響:
影響Map Instance性能:默認(rèn)情況下一個(gè)小文件對(duì)應(yīng)一個(gè)instance,造成浪費(fèi)資源,影響整體的執(zhí)行性能。
過(guò)多的小文件給分布式文件系統(tǒng)帶來(lái)壓力,且影響空間的有效利用,嚴(yán)重時(shí)會(huì)直接導(dǎo)致文件系統(tǒng)不可用。
查看表中的小文件數(shù)量命令:
desc extended + 表名
小文件處理方式
不同原因產(chǎn)生的小文件,需要有不同的處理方法:
(1)Reduce過(guò)程中產(chǎn)生的小文件
使用insert overwrite源表(或分區(qū)),或者寫(xiě)入到新表刪除源表。
(2)Tunnel數(shù)據(jù)采集過(guò)程中產(chǎn)生的小文件
調(diào)用Tunnel SDK時(shí),當(dāng)buffer達(dá)到64MB時(shí)提交一次;
使用console時(shí)避免頻繁上傳小文件,建議積累較大時(shí)一次性上傳;
如果導(dǎo)入的是分區(qū)表,建議給分區(qū)設(shè)置生命周期,過(guò)期不用的數(shù)據(jù)自動(dòng)清理;
Insert overwrite源表(或分區(qū)):
ALTER合并模式,通過(guò)命令行進(jìn)行合并:set?odps.merge.cross.paths=true; set?odps.merge.max.partition.count=100;?--默認(rèn)優(yōu)化10個(gè)分區(qū),此時(shí)設(shè)置為優(yōu)化100個(gè)分區(qū)。 ALTER?TABLE?tablename?[PARTITION]?MERGE?SMALLFILES;
臨時(shí)表
在用臨時(shí)表建議創(chuàng)建時(shí)都加上生命周期,到期后垃圾回收自動(dòng)回收。
網(wǎng)絡(luò)問(wèn)題
Q:MaxCompute使用Tunnel Upload命令上傳數(shù)據(jù)時(shí)為什么報(bào)錯(cuò)java.io.IOException: Error writing request body to server?
A:這是一個(gè)上傳數(shù)據(jù)到服務(wù)器的時(shí)的異常,通常是因?yàn)樯蟼鬟^(guò)程中的網(wǎng)絡(luò)鏈接斷開(kāi)/超時(shí)導(dǎo)致的:
可能是用戶的數(shù)據(jù)源并非是來(lái)自本地文件,而是需要從諸如數(shù)據(jù)庫(kù)等一類的地方獲取,導(dǎo)致數(shù)據(jù)在寫(xiě)入的過(guò)程中還需要等待數(shù)據(jù)獲取導(dǎo)致的超時(shí)。目前UploadSession在上傳數(shù)據(jù)的過(guò)程中,如果600秒沒(méi)有數(shù)據(jù)上傳,則被認(rèn)為超時(shí)。
用戶通過(guò)公網(wǎng)的Endpoint來(lái)做數(shù)據(jù)上傳,由于公網(wǎng)網(wǎng)絡(luò)質(zhì)量不穩(wěn)定導(dǎo)致超時(shí)。
解決方法:
在上傳的過(guò)程中,先把獲取數(shù)據(jù),再調(diào)用Tunnel SDK上傳數(shù)據(jù)。
一個(gè)block可以上傳64M-1G的數(shù)據(jù),最好不要超過(guò)1萬(wàn)條數(shù)據(jù)以免帶來(lái)重試的時(shí)間導(dǎo)致的超時(shí)。一個(gè)Session可以掛最多2萬(wàn)個(gè)block。
如果用戶的數(shù)據(jù)是在ECS上,可以參考訪問(wèn)域名和數(shù)據(jù)中心配置合適的Endpoint,可以提速并節(jié)省費(fèi)用。
Q:MaxCompute使用Tunnel Upload命令行上傳數(shù)據(jù),設(shè)置了經(jīng)典網(wǎng)絡(luò)的Endpoint,但為什么會(huì)連接到外網(wǎng)的Tunnel Endpoint?
A:配置文件odps_config.ini里除了endpoint之外還需要配置tunnel_endpoint。請(qǐng)參考訪問(wèn)域名和數(shù)據(jù)中心進(jìn)行配置。目前只有上海region不需要設(shè)置tunnel endpoint
Q:MaxCompute使用Tunnel Upload命令行上傳數(shù)據(jù)是否支持限速?上傳速率太快的話可能會(huì)占用服務(wù)器過(guò)多的I/O性能。
A:目前MaxCompute使用Tunne lUpload命令行不支持限速,需要通過(guò)SDK單獨(dú)處理。
計(jì)費(fèi)問(wèn)題
Q:MaxCompute使用Tunnel Upload命令行上傳數(shù)據(jù)計(jì)費(fèi)的帶寬,是按照數(shù)據(jù)壓縮前還是壓縮后的大小計(jì)費(fèi)?
A:按照Tunnel壓縮后的帶寬進(jìn)行計(jì)費(fèi)。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
評(píng)論