首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Sqoop 導出多張表至 MySQL 失敗的解決方案

     編輯:程式設計疑難解答

問題現象

單表導出正常,但在 Shell 腳本中連續執行多條 sqoop export 命令時,第二張表數據導出失敗。

原因分析

  • Sqoop 每次導出會啟動 MapReduce 作業,若腳本直接順序執行,前一個作業未完全釋放資源(如 YARN 容器、數據庫連接),導致後續作業失敗。
  • 未捕獲上一條命令的退出碼,腳本繼續執行掩蓋錯誤。

解決方案

  1. 串行執行並檢查退出碼:
    #!/bin/bash
    tables=("RST_ERR_1" "RST_ERR_2")
    for t in "${tables[@]}"; do
        sqoop export \
            --connect jdbc:mysql://192.168.80.101:3306/test \
            --username root --password root \
            --table "$t" \
            --export-dir /user/hive/warehouse/hubei.db/"$t" \
            --input-fields-terminated-by '\001'
        if [ $? -ne 0 ]; then
            echo "導出 $t 失敗"
            exit 1
        fi
    done
  2. 使用定時任務分開執行(如原回答建議):在 crontab 中分不同時段調度,避免資源衝突。
    36 16 * * * /home/analysis.sh >> /dev/null 2>&1
  3. 合併為單次作業:若表結構相同,可先在 Hive 中 UNION ALL 合併數據,再單次導出。

最佳實踐

生產環境建議使用調度系統(如 Azkaban、Airflow)管理依賴與重試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved