全部產品
Search
文件中心

Data Online Migration:常見問題(已下線)

更新時間:Oct 24, 2024

本文介紹使用資料移轉工具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命令進行重試。

部分檔案遷移失敗後反覆重試都無法成功遷移

解決方案:

  1. 查看遷移失敗檔案清單master/jobs/${JobName}/failed_tasks/${TaskName}/error.list,擷取失敗檔案的相對路徑。

  2. 確認是否有這部分檔案的許可權訪問、檔案是否被刪除、是否是軟連結檔案、檔案名稱是否存在亂碼等。

  3. 解決以上問題後,使用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>

遷移失敗日誌報錯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
  • 問題原因:destAccessKeydestSecretKey填寫錯誤。

  • 解決方案:請填寫正確的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還沒有真正產生和分發,因此出現該報錯是正常現象。

    • 如果服務已啟動,且任務已提交一段時間後仍然出現該錯誤,需查看該進程啟動後是否異常退出。如果是單機部署,請通過logs/ossimport2.log查看記錄檔。如果是分布式部署,請通過logs/ossimport.log查看記錄檔。找到異常原因並解決,然後再啟動服務進程。

使用stat命令查看任務狀態一直顯示scanFinished:false.

解決方案:觀察Task的總數是否增加。

  • 如果Task總數增加,則表明Job的檔案清單還在List新的檔案,是正常現象。

  • 如果Task總數沒變化,且Job配置的是增量模式,scanFinished不為true的情況下,ossimport會根據您配置的間隔時間定期掃描源端目錄,檢查有無新增或修改的檔案。

  • 如果不是增量模式,Task數不會增多,此時應檢查作業記錄是否異常。如果是單機部署,請通過logs/ossimport2.log查看記錄檔。如果是分布式部署,請通過logs/ossimport.log查看記錄檔。找到異常原因並解決,然後再啟動服務進程。

Linux系統服務進程異常,日誌卻沒有輸出異常

  • 問題原因:如果機器的可用記憶體少於2 GB,服務進程可能因為記憶體不足出現異常。

  • 解決方案:請檢查dmesg日誌是否存在因記憶體不足導致進程異常的記錄。

進程異常後,重啟服務時需要執行哪些操作

解決方案:如果沒有使用clean命令清除同名任務,所有提交過的Job都會有斷點記錄。您可以直接調用start命令啟動服務即可,已經提交的Job不需要重新提交。

如何將Linux系統中檔案名稱亂碼的檔案上傳到OSS

解決方案:

  1. 確認亂碼檔案的編碼格式。

  2. 使用export LANG="<your file name encode>"命令解析編碼。

  3. 使用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,不返回錯誤結果。這種情況下,需要通過抓包的方式擷取又拍雲返回的錯誤碼進行排查。

又拍雲遷移時如何填寫srcAccessKeysrcSecretKey

解決方案:填寫又拍雲操作員的帳號和密碼 。

又拍雲遷移時一直顯示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“等提示

  • 問題原因:沒有安裝對應命令。

  • 解決方案:請使用yumapt-getzypper命令安裝相應的命令。

設定檔中的srcPrefix是否支援指定為檔案格式

不支援。srcPrefix只支援目錄或者首碼層級。

ossimport是否支援設定代理

不支援。

OSS之間的遷移為什麼還會產生費用

如果配置了內網網域名稱,將不收取流量費用,但仍然收取訪問次數的費用。

開啟增量模式後,OSS是否會同步刪除本地已刪除的檔案

不刪除。本地刪除操作不會同步到OSS。

開啟增量模式後,本地新增的檔案沒有被同步到OSS

增量模式通過對比檔案最後修改時間來判斷檔案是否為增量。Linux的mv、Windows的cp、mv以及rsync帶-t或者-a參數等操作不會修改檔案的最後修改時間,因此通過此類操作修改的檔案不會被掃描,也不會同步遷移至OSS。

遷移檔案到OSS時是否支援同步遷移檔案許可權

不支援。您可以在遷移完成後使用命令列工具ossutil的set-meta命令修改檔案許可權。具體操作,請參見set-meta(管理檔案中繼資料)