常見問題(已下線)
本文介紹使用數據遷移工具ossimport的常見問題及解決方法。
通用說明
本文提到的所有涉及ossimport的命令均為簡寫,實際操作時,需補全命令。
Windows系統需加上console.bat進行補全,例如submit實際為console.bat submit。
Linux系統需要加上bash console.sh進行補全,例如submit實際為sudo bash console.sh submit。
如何驗證ossimport工具數據遷移是否遷移完成?
執行全量遷移任務后,您可以執行以下命令查看任務狀態。
Windows下在cmd.exe中執行console.bat stat。
Linux下在終端執行sudo bash console.sh stat。
當任務狀態為Succeed時,表示遷移成功。
如果您在Job中配置了增量模式(即isIncremental為true),ossimport會根據您配置的間隔時間定期掃描源端目錄,檢查有無新增或修改的文件,并將增量數據同步到OSS。您可以在對應的OSS Bucket中查看增量后的文件。
ossimport不對遷移文件進行校驗,無法保證遷移結果的正確性和一致性。在遷移任務完成后,請您務必自行做好源端和目的端數據的一致性校驗。
如您在未校驗源端和目的端數據一致性前,刪除源數據,由此所引起的一切損失和后果均由您自行承擔。更多信息,請參見閃電立方服務協議。
遷移失敗常見問題
如果遷移文件失敗,建議您先查看遷移失敗日志,確認失敗的原因。您可以在解決這些問題后使用retry命令進行重試。遷移失敗日志的路徑為master/jobs/${JobName}/failed_tasks/${TaskName}/audit.log。
使用stat命令查看任務狀態顯示失敗
執行命令如下:
sudo bash console.sh stat
返回結果中如果JobState為failed,則遷移任務失敗。
解決方法:遷移完成后使用retry命令進行重試。
部分文件遷移失敗后反復重試都無法成功遷移
解決方法:
查看遷移失敗文件列表master/jobs/${JobName}/failed_tasks/${TaskName}/error.list,獲取失敗文件的相對路徑。
確認是否有這部分文件的權限訪問、文件是否被刪除、是否是軟鏈接文件、文件名是否存在亂碼等。
解決以上問題后,使用retry命令進行重試。
遷移失敗日志報錯The bucket you are attempting to access must be addressed using the specified endpoint.
Exception:com.aliyun.oss.OSSException: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
<Error>
<Code>AccessDenied</Code>
<Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message>
<RequestId>56EA98DE815804**21B23EE6</RequestId>
<HostId>my-oss-bucket.oss-cn-qingdao.aliyuncs.com</HostId>
<Bucket>my-oss-bucket</Bucket>
<Endpoint>oss-cn-hangzhou.aliyuncs.com</Endpoint>
</Error>
問題原因:srcDomain或destDomain填寫錯誤。
解決方法:請參見OSS訪問域名、數據中心、開放端口填寫正確的Endpoint。
遷移失敗日志報錯The request signature we calculated does not match the signature you provided.
Exception:com.aliyun.oss.OSSException: The request signature we calculated does not match the signature you provided. Check your key and signing method.
[ErrorCode]: SignatureDoesNotMatch
[RequestId]: xxxxxxx
[HostId]: xxx.oss-cn-shanghai.aliyuncs.com
問題原因:destAccessKey和destSecretKey填寫錯誤。
解決方法:請填寫正確的AccessKey信息。
遷移失敗日志報錯The bucket name “xxx/xx” is invalid.
java.lang.IllegalArgumentException: The bucket name "xxx/xx" is invalid. A bucket name must: 1) be comprised of lower-case characters, numbers or dash(-); 2) start with lower case or numbers; 3) be between 3-63 characters long.
問題原因:destBucket填寫錯誤。
解決方法:填寫正確的Bucket名稱。關于Bucket名稱的命名規范,請參見存儲空間命名。
遷移失敗日志報錯Connect to xxx.oss-cn-beijing-internal.aliyuncs.com:80 timed out.
Unable to execute HTTP request: Connect to xxx.oss-cn-beijing-internal.aliyuncs.com:80 timed out
[ErrorCode]: ConnectionTimeout
[RequestId]: Unknown
問題原因:這個是連接超時的報錯,通常原因是遷移用的設備非ECS實例或不是與OSS同地域的ECS實例,但是配置文件使用了OSS的內網域名。OSS內網域名僅支持同地域ECS實例訪問。
解決方法:
修改配置文件中域名為外網Endpoint,清除任務后重新提交任務。
使用與OSS同地域的ECS實例運行遷移任務。
遷移失敗日志報錯The specified bucket is not valid.
com.aliyun.oss.OSSException: The specified bucket is not valid.
[ErrorCode]: InvalidBucketName
[RequestId]: 57906B4DD0EBAB0FF553D661
[HostId]: you-bucket.you-bucketoss-cn-hangzhou-internal.aliyuncs.com
問題原因:destDomian配置錯誤。
解決方法:destDomian配置的域名是Bucket所在地域的Endpoint地址,而不是帶Bucket名稱的二級域名。例如Bucket所在地域為華北2(北京),應填寫oss-cn-beijing.aliyuncs.com。詳情請參見配置文件示例。
遷移失敗日志報錯Unable to execute HTTP request: The Difference between … is too large.
Unable to execute HTTP request: The Difference between the request time and the current time is too large.
[ErrorCode]: RequestTimeTooSkewed
[RequestId]: xxxxxxx
問題原因
本地機器時間不對,與OSS服務器時間相差15分鐘以上,該情況居多。
可能是并發太高,尤其是CPU占用率很高,導致并發上傳慢。
解決方法
修改本地機器時間,與OSS服務器一致。
如果是并發問題,可以通過降低sys.properties文件的workerTaskThreadNum參數調整并發。
遷移失敗日志報錯No route to host.
問題原因:可能本地防火墻或者iptables等原因導致網絡不通。
解決方法:通過ping命令測試遷移服務器到源端和目的端網絡是否正常。
如果網絡正常,檢查電腦防火墻和本地的防火墻設備是否有限制,可嘗試關閉防火墻進行測試。
如果網絡異常,排查網絡原因進行相關處理后重試。
使用HTTP模式遷移,遷移失敗日志報錯Unknown http list file format.
問題原因:指定的HTTP列表文件格式錯誤或內容不符合規范。
解決方法:
如果是從其他操作系統上拷貝的文件,Linux系統可以用mac2unix、dos2unix等相關命令轉換文件格式;Windows系統可以使用notepad等工具轉換格式。
如果是列表文件內容的格式不正確,請修改為正確的格式。關于列表文件內容的格式,請參見說明及配置。
遷移失敗日志報錯The object key “/xxxxx.jpg” is invalid.
Exception:java.lang.IllegalArgumentException: The object key "/xxxxx.jpg" is invalid. An object name should be between 1 - 1023 bytes long when encoded as UTF-8 and cannot contain LF or CR os unsupported chars in XML1.0, and cannot begin with "/" or "\".
問題原因:srcPrefix或者destPrefix填寫錯誤。
解決方法
檢查srcPrefix是否為目錄。如果是目錄,請以正斜線(/)結尾。
檢查destPrefix是否以正斜線(/)或者反斜線(\)開頭。如果是,請刪除正斜線(/)或反斜線(\)。
任務運行常見問題
如果在遷移運行過程中出現問題,您可以先查看任務運行日志。
單機部署:運行日志的文件路徑為logs/ossimport2.log。
分布式部署:運行日志的文件路徑為logs/import.log。
執行任何命令均報錯UnsupportedClassVersionError.
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/aliyun/ossimport2/OSSImport2 : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at com.simontuffs.onejar.JarClassLoader.defineClass(JarClassLoader.java:693)
at com.simontuffs.onejar.JarClassLoader.findClass(JarClassLoader.java:599)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.simontuffs.onejar.Boot.run(Boot.java:300)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
問題原因:Java版本過低。
解決方法:將Java版本升級為1.7或1.8版本。
使用submit命令提交任務報錯InvocationTargetException.
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
Caused by: java.lang.NullPointerException
at com.aliyun.ossimport2.config.JobConfig.load(JobConfig.java:44)
at com.aliyun.ossimport2.OSSImport2.doSubmitJob(OSSImport2.java:289)
at com.aliyun.ossimport2.OSSImport2.main(OSSImport2.java:120)
... 6 more
問題原因:系統檢查配置文件時發現配置文件不完整,例如某些配置項被刪除或已注釋。
解決方法:還原配置文件中被刪除或注釋的配置項。對于不需要配置的內容請在等號后留空刪除配置項。配置示例請參見配置文件示例。
任務運行日志報錯com.aliyun.oss.ClientException: Unknown.
com.aliyun.oss.ClientException: Unknown
[ErrorCode]: NonRepeatableRequest
[RequestId]: Cannot retry request with a non-repeatable request entity. The cause lists the reason the original request failed.
問題原因:com.aliyun.oss.ClientException: Unknown.以及SocketTimeoutException錯誤通常是網絡被占滿。
解決方法:ossimport會自動進行重試,如果重試完后仍然失敗,您可以在任務完成后調用retry命令再次重試。
Linux系統運行日志報錯too many open files.
解決方法:使用ulimit -n查看系統句柄。
如果值在10,000以下,先通過ulimit -n 65536增大該值,然后重啟進程。
如果值在10,000以上,先通過sudo lsof -n排查是哪些進程打開了句柄。然后評估這些進程是否需要保留。如果不需要請釋放相應的句柄。
Windows系統啟動任務后秒退
問題原因
沒安裝Java或Java版本低于1.7。
配置文件錯誤。
解決方法
安裝1.8版本的Java。
按照示例正確編輯配置文件。配置示例,請參見配置文件示例。
使用submit命令提交任務后,通過stat命令查看任務狀態一直顯示no jobs is running or finished.
sudo bash console.sh stat
[WARN] List files dir not exist : /home/<user>/ossimport/workdir/master/jobs/
no jobs is running or finished.
問題原因:任務開始運行時,未啟動服務。任務已提交且服務已啟動后,才能通過stat命令才能查看到任務的運行狀態。
解決方法
使用start命令啟動服務。
如果服務已啟動,且任務剛提交,Master需要先去掃描文件列表,這時Task還沒有真正生成和分發,因此出現該報錯是正?,F象。
如果服務已啟動,且任務已提交一段時間后仍然出現該錯誤,需查看該進程啟動后是否異常退出。如果是單機部署,請通過logs/ossimport2.log查看日志文件。如果是分布式部署,請通過logs/ossimport.log查看日志文件。找到異常原因并解決,然后再啟動服務進程。
使用stat命令查看任務狀態一直顯示scanFinished:false.
解決方法:觀察Task的總數是否增加。
如果Task總數增加,則表明Job的文件列表還在List新的文件,是正?,F象。
如果Task總數沒變化,且Job配置的是增量模式,scanFinished不為true的情況下,ossimport會根據您配置的間隔時間定期掃描源端目錄,檢查有無新增或修改的文件。
如果不是增量模式,Task數不會增多,此時應檢查運行日志是否異常。如果是單機部署,請通過logs/ossimport2.log查看日志文件。如果是分布式部署,請通過logs/ossimport.log查看日志文件。找到異常原因并解決,然后再啟動服務進程。
Linux系統服務進程異常,日志卻沒有輸出異常
問題原因:如果機器的可用內存少于2 GB,服務進程可能因為內存不足出現異常。
解決方法:請檢查dmesg日志是否存在因內存不足導致進程異常的記錄。
進程異常后,重啟服務時需要執行哪些操作
解決方法:如果沒有使用clean命令清除同名任務,所有提交過的Job都會有斷點記錄。您可以直接調用start命令啟動服務即可,已經提交的Job不需要重新提交。
如何將Linux系統中文件名亂碼的文件上傳到OSS
解決方法:
確認亂碼文件的編碼格式。
使用export LANG="<your file name encode>"命令解析編碼。
使用clean命令清除原來的Job,然后使用submit命令重新提交Job。
啟動服務時報錯java.nio.file.AccessDeniedException.
問題原因:沒有權限訪問配置文件。
解決方法
將配置文件的權限設置為所有人可讀。
將操作系統賬號切換為管理員后啟動服務。
Task個數顯示為0,但JobState顯示成功
[2015-12-28 16:12:35] [INFO] JobName:dir_data
[2015-12-28 16:12:35] [INFO] Pending Task Count:0
[2015-12-28 16:12:35] [INFO] Dispatched Task Count:0
[2015-12-28 16:12:35] [INFO] Succeed Task Count:0
[2015-12-28 16:12:35] [INFO] Failed Task Count:0
[2015-12-28 16:12:35] [INFO] Is Scan Finished:true
[2015-12-28 16:12:35] [INFO] JobState:SUCCEED
問題原因
srcPrefix填寫錯誤,導致列舉不出來文件。
srcPrefix下只有目錄,沒有文件,因為目錄概念是OSS模擬出來的,不會被真正上傳。
解決方法:填寫正確的srcPrefix參數,并確保srcPrefix中有可用文件。
提交任務時報錯InvocationTargetException.
sudo submit job:/disk2/ossimport2/local_job.cfg
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.simontuffs.onejar.Boot.run(Boot.java:306)
at com.simontuffs.onejar.Boot.main(Boot.java:159)
Caused by: java.lang.NullPointerException
at com.aliyun.ossimport2.OSSImport2.doSubmitJob(OSSImport2.java:289)
at com.aliyun.ossimport2.OSSImport2.main(OSSImport2.java:120)
... 6 more
問題原因:配置文件錯誤或配置文件路徑錯誤。
解決方法
正確配置conf/sys.properties中的配置項workingDir。
檢查配置文件路徑是否正確。
同步過程中顯示源端的文件不存在
問題原因:Master執行遷移任務時,會先List文件列表,然后按照文件列表遷移數據。如果List操作完成后,源端某些文件被刪除,則出現源端文件不存在的情況。此時,Master會跳過已刪除的源端文件,并在錯誤列表里輸出此類文件。
Job配置文件正確,但遷移任務時,運行狀態和Job配置文件不符。
問題原因:如果之前提交過遷移任務,任務被中止后,對Job配置文件的修改不生效。
解決方法:使用clean命令清除之前的任務,待Job配置文件修改完成后重新提交任務。
文件正常傳輸,但報錯NullPointerException.
問題原因:ossimport2.3.5版本新增文件統計功能,該功能需要加載cpt文件,而HTTP任務的cpt加載格式與其他源不同,導致程序不匹配出現異常。
解決方法
將ossimport回退至2.3.4版本。
忽略該報錯。該問題只是打印報錯,不影響遷移任務。
又拍云遷移常見問題
又拍云遷移的任務數一直顯示0
解決方法:查看任務運行日志。
[2016-07-21 10:21:46] [INFO] [name=YoupaiList, totalRequest=1729925, avgLatency=38,
recentLatency=300000]
如果日志中
recentLatency
小于或等于30,000,表示正常List文件。又拍云List過程較慢,通常會超出30秒的超時時間。返回文件的個數取決于30秒內List的文件個數,請等待List操作完成。如果
recentLatency
數值較低,通常是賬號密碼填寫錯誤。又拍云的SDK出錯只返回null,不返回錯誤結果。這種情況下,需要通過抓包的方式獲取又拍云返回的錯誤碼進行排查。
又拍云遷移時如何填寫srcAccessKey
和srcSecretKey
解決方法:填寫又拍云操作員的賬號和密碼 。
又拍云遷移時一直顯示HTTP 429錯誤
問題原因:又拍云對SDK訪問間隔進行了限速處理。
解決方法:請聯系又拍云解除限速限制。
任務完成OSS控制臺顯示的數據量比源數據量小
問題現象:Job全部成功上傳完后,OSS控制臺里顯示Bucket大小無變化,但是Linux系統下使用du命令統計的大小與數據量實際大小相差較大。
問題原因
OSS控制臺的Bucket數據量會延遲1~2小時更新,請在1~2小時后查看Bucket大小是否有變化。
Linux系統的du命令統計的是數據塊大小,數據塊大小大于數據量實際大小。建議使用 ls -lR <目錄絕對路徑> | grep "\-rw" | awk '{sum+=$5}END{print sum}'命令統計本地目錄的實際大小。
Linux系統執行時命令時出現unknown command “java”、 unknown command “nohup“等提示
問題原因:沒有安裝對應命令。
解決方法:請使用yum、apt-get或zypper命令安裝相應的命令。
配置文件中的srcPrefix
是否支持指定為文件格式
不支持。srcPrefix
只支持目錄或者前綴級別。
ossimport是否支持設置代理
不支持。
OSS之間的遷移為什么還會產生費用
如果配置了內網域名,將不收取流量費用,但仍然收取訪問次數的費用。
開啟增量模式后,OSS是否會同步刪除本地已刪除的文件
不刪除。本地刪除操作不會同步到OSS。
開啟增量模式后,本地新增的文件沒有被同步到OSS
增量模式通過對比文件最后修改時間來判斷文件是否為增量。Linux的mv、Windows的cp、mv以及rsync帶-t
或者-a
參數等操作不會修改文件的最后修改時間,因此通過此類操作修改的文件不會被掃描,也不會同步遷移至OSS。
遷移文件到OSS時是否支持同步遷移文件權限
不支持。您可以在遷移完成后使用命令行工具ossutil的set-meta命令修改文件權限。具體操作,請參見set-meta(管理文件元數據)。