基于Sqoop的MySQL-Hive全量/增量同步解決方案(支持多表批量處理

一、全量同步方案設計

1.1 基礎命令模板

sqoop import \
--connect jdbc:mysql://mysql_host:3306/db_name \
--username user \
--password pass \
--table source_table \
--hive-import \
--hive-table target_table \
--hive-overwrite \  # 覆蓋已有表
--num-mappers 8 \    # 并行度(根據集群資源調整)
--split-by id \      # 分片字段(需為數字類型)
--fields-terminated-by '\001' \
--lines-terminated-by '\n' \
--null-string '\\N' \
--null-non-string '\\N'

1.2 關鍵參數說明

參數說明必須項
--hive-import啟用Hive表自動創建
--hive-drop-import-delims刪除Hive默認分隔符推薦
--mapreduce.job.name自定義任務名稱
--autoreset-to-one-mapper無主鍵表自動單線程推薦

1.3 多表批量處理腳本

#!/bin/bash# 配置參數
DB_CONFIG="mysql_host:3306/db_name"
USER="root"
PASS="password"
HIVE_DB="dw"
TABLES=("user" "order" "product")  # 表名列表# 循環處理每個表
for TABLE in "${TABLES[@]}"
doecho "正在同步表: $TABLE"sqoop import \--connect "jdbc:mysql://$DB_CONFIG" \--username $USER \--password $PASS \--table $TABLE \--hive-import \--hive-database $HIVE_DB \--hive-overwrite \--num-mappers $(get_conf $TABLE) \  # 動態獲取并行度--split-by $(get_split_col $TABLE) \  # 動態獲取分片字段--null-string '\\N' \--null-non-string '\\N'
done

二、增量同步方案設計

2.1 Append模式(新增數據)

sqoop import \
--connect jdbc:mysql://mysql_host:3306/db_name \
--username user \
--password pass \
--table source_table \
--hive-import \
--hive-table target_table \
--incremental append \
--check-column update_time \  # 時間戳字段
--last-value '2024-05-01 00:00:00' \
--num-mappers 4

2.2 LastModified模式(更新數據)

sqoop import \
--connect jdbc:mysql://mysql_host:3306/db_name \
--username user \
--password pass \
--table source_table \
--hive-import \
--hive-table target_table \
--incremental lastmodified \
--check-column update_time \
--last-value '2024-05-01 00:00:00' \
--merge-key id \  # 主鍵合并
--num-mappers 4

2.3 自動化增量管理

# 動態獲取最后同步時間
LAST_VALUE=$(hive -e "SELECT MAX(update_time) FROM target_table")# 執行增量同步
sqoop import \
--check-column update_time \
--last-value "$LAST_VALUE" \
--incremental append \
--hive-import \
--hive-table target_table

三、多表同步增強方案

3.1 配置驅動模式

?table_sync.conf?

[user]
table=user
split_col=id
parallel=8[order]
table=order
split_col=order_id
parallel=12[product]
table=product
split_col=product_id
parallel=6

?批量執行腳本?

#!/bin/bashCONFIG_FILE="table_sync.conf"
HIVE_DB="dw"while IFS='=' read -r key value
doif [[ $key == "table" ]]; thenTABLE=${value}echo "處理表: $TABLE"sqoop import \--connect "jdbc:mysql://mysql_host:3306/db_name" \--username user \--password pass \--table $TABLE \--hive-import \--hive-database $HIVE_DB \--hive-overwrite \--num-mappers $(grep "^${TABLE}=" $CONFIG_FILE | cut -d'=' -f2) \--split-by $(grep "^${TABLE}=" $CONFIG_FILE | cut -d'=' -f3) \--null-string '\\N'fi
done < $CONFIG_FILE

3.2 全量+增量混合模式

#!/bin/bash# 全量同步配置
FULL_SYNC_TABLES=("config" "lookup")# 增量同步配置
INCREMENTAL_TABLES=("user" "order")# 執行全量同步
for TABLE in "${FULL_SYNC_TABLES[@]}"
dosqoop import \--table $TABLE \--hive-import \--hive-overwrite
done# 執行增量同步
for TABLE in "${INCREMENTAL_TABLES[@]}"
dosqoop import \--table $TABLE \--incremental append \--check-column update_time \--last-value $(hive -e "SELECT MAX(update_time) FROM $TABLE")
done

四、關鍵問題解決方案

4.1 數據類型映射

# 顯式指定類型映射(解決TINYINT轉BOOLEAN問題)
sqoop import \
--map-column-hive status=STRING \
--map-column-hive is_valid=BOOLEAN

4.2 分區表同步

# 按日期分區
sqoop import \
--hive-partition-key dt \
--hive-partition-value $(date +%Y-%m-%d) \
--where "dt='${DATE}'"

4.3 性能優化參數

# 壓縮傳輸(提升30%網絡效率)
sqoop import \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec# 內存調優(避免OOM)
sqoop import \
--driver-memory 4G \
--executor-memory 8G

五、監控與容錯機制

5.1 同步狀態記錄

-- 創建同步狀態表
CREATE TABLE sync_status (table_name VARCHAR(50) PRIMARY KEY,last_sync_time TIMESTAMP,sync_type VARCHAR(20)  -- FULL/APPEND
);

5.2 自動重試策略

MAX_RETRY=3
RETRY_COUNT=0while [ $RETRY_COUNT -lt $MAX_RETRY ]; dosqoop import ... || {RETRY_COUNT=$((RETRY_COUNT+1))sleep 300}
done

5.3 異常檢測腳本

#!/bin/bash# 檢查Hive表行數
HIVE_COUNT=$(hive -e "SELECT COUNT(*) FROM target_table")# 檢查MySQL行數
MYSQL_COUNT=$(mysql -uroot -ppass -D db -e "SELECT COUNT(*) FROM source_table")if [ $HIVE_COUNT -ne $MYSQL_COUNT ]; thenecho "數據不一致!差異行數:$(expr $MYSQL_COUNT - $HIVE_COUNT)"# 觸發告警send_alert "Sqoop同步異常"
fi

六、生產環境最佳實踐

  1. ?元數據管理?
    使用sqoop import-all-tables同步全庫時,需提前在Hive創建對應數據庫

  2. ?增量同步策略?

    增量頻率 | 適用場景 | 檢查字段
    ---------|----------|----------
    每分鐘   | 實時日志 | log_ts
    每小時   | 交易流水 | update_time
    每天     | 統計報表 | dt
  3. ?資源隔離方案?

    # 為不同業務分配獨立隊列
    sqoop import \
    --queue hadoop_yarn_queue_olap
  4. ?版本兼容性?

    MySQL版本推薦Sqoop版本注意事項
    5.71.4.7需添加JDBC驅動
    8.01.4.7需升級Connector/J

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85170.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85170.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85170.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端學習(7)—— HTML + CSS實現博客系統頁面

目錄 一&#xff0c;效果展示 二&#xff0c;實現博客列表頁 2.1 實現導航欄 2.2 實現個人信息 2.3 實現博客列表 三&#xff0c;實現博客正文頁 3.2 復用 3.4 實現博客正文 四&#xff0c;實現博客登錄頁 4.1 版心 4.2 登錄框 五&#xff0c;實現博客編輯頁 5.1 …

【技能拾遺】——家庭寬帶單線復用布線與配置(移動2025版)

&#x1f4d6; 前言&#xff1a;在家庭網絡拓撲中&#xff0c;客廳到弱電箱只預埋了一根網線&#xff0c;由于已將廣電的有線電視取消并改用IPTV。現在需要解決在客廳布置路由器和觀看IPTV問題&#xff0c;這里就用到單線復用技術。 目錄 &#x1f552; 1. 拓撲規劃&#x1f55…

VTK|實現類似CloundCompare的測量功能

文章目錄 CloundCompare在點、線、面三種模式下的顯示內容? 圖1&#xff1a;點模式? 圖2&#xff1a;線模式? 圖3&#xff1a;面模式 增加控制菜單欄實現測量功能類如何調用項目git鏈接 CloundCompare在點、線、面三種模式下的顯示內容 點 線 面 三張圖展示了 CloudComp…

4000萬日訂單背后,餓了么再掀即時零售的“效率革命”

當即時零售轉向價值深耕&#xff0c;贏面就是綜合實力的強弱。 文&#xff5c;郭夢儀 編&#xff5c;王一粟 在硝煙彌漫的外賣行業“三國殺”中&#xff0c;餓了么與淘寶閃購的日訂單量竟然突破了4000萬單。 而距淘寶閃購正式上線&#xff0c;還不到一個月。 在大額福利優惠…

vedio.ontimeupdate()和video.onloadeddata()

video.onloadeddata &#xff08;&#xff09; video.onloadeddata 是 JavaScript 中用于監聽 HTML <video> 元素 「當前幀數據已加載」 的事件處理器。當視頻的第一幀畫面數據加載完成&#xff08;足以開始播放&#xff09;時&#xff0c;會觸發此事件。 1. 基本用法 …

Baklib內容中臺革新企業知識實踐

Baklib智能知識中樞構建 作為現代企業知識管理的核心架構&#xff0c;Baklib內容中臺通過整合多源異構數據形成智能化知識中樞&#xff0c;實現從信息采集到價值轉化的全鏈路管理。其底層采用跨平臺數據貫通技術&#xff0c;支持API接口與企業現有CRM、ERP系統無縫對接&#x…

用不太嚴謹的文字介紹遙測自跟蹤天線的基本原理

前兩天跟一個客戶見面的時候&#xff0c;客戶問我&#xff1a;遙測自跟蹤天線能夠跟蹤目標&#xff0c;是什么原理&#xff1f;不需要目標的位置&#xff0c;怎么做到自跟蹤的&#xff1f; 突然一瞬間&#xff0c;有點語塞。 難道要介紹天線、饋源、極化、左旋、右旋、和差網…

VS配置redis環境、redis簡單封裝

一、安裝redis數據庫 1.下載redis的壓縮包 wget https://download.redis.io/releases/redis-6.0.5.tar.g 2.解壓縮redis壓縮包&#xff0c;一般就在當前路徑 tar -zvxf redis-6.0.5.tar.gz -C /usr/local/redis 方便找我把它解壓縮在/usr/local/redis&#xff0c;如果沒有r…

C++23 已移除特性解析

文章目錄 引言C23 已移除特性介紹1. 垃圾收集的支持和基于可達性的泄漏檢測&#xff08;P2186R2&#xff09;背景與原理存在的問題移除的影響 2. 混合寬字符串字面量拼接非良構&#xff08;P2201R1&#xff09;寬字符串編碼概述混合拼接的問題示例分析移除的意義 3. 不可編碼寬…

Cloudflare

Cloudflare 是一個網絡基礎設施和網站安全服務提供商&#xff0c;它的主要作用是讓網站 更快、更安全、更可靠。簡單來說&#xff0c;它是一個“護盾 加速器”。 &#x1f9e9; Cloudflare 的主要功能&#xff1a; 1. &#x1f680; 加速網站訪問&#xff08;CDN&#xff09…

Spring Boot啟動慢?Redis緩存擊穿?Kafka消費堆積?——Java后端常見問題排查實戰

Spring Boot啟動慢&#xff1f;Redis緩存擊穿&#xff1f;Kafka消費堆積&#xff1f;——Java后端常見問題排查實戰 引言 Java后端系統因其豐富的技術棧和復雜的業務邏輯&#xff0c;常常面臨啟動延遲、性能瓶頸、異常錯誤等多種挑戰。從核心語言、Web框架到分布式微服務及緩…

數字人引領政務新風尚:智能設備助力政務服務

在信息技術飛速發展的今天&#xff0c;政府機構不斷探索提升服務效率和改善服務質量的新途徑。實時交互數字人在政務服務中的應用正成為一大亮點&#xff0c;通過將“數字公務員”植入各種橫屏智能設備中&#xff0c;為民眾辦理業務提供全程輔助。這種創新不僅優化了政務大廳的…

ToolsSet之:十六進制及二進制編輯運算工具

ToolsSet是微軟商店中的一款包含數十種實用工具數百種細分功能的工具集合應用&#xff0c;應用基本功能介紹可以查看以下文章&#xff1a; Windows應用ToolsSet介紹https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Number菜單下的Hex Operate工具可以進…

DSP處理數字信號做什么用的?

DSP&#xff08;數字信號處理器&#xff09;的核心任務是高效、實時地處理數字信號&#xff0c;通過專用硬件架構和算法優化&#xff0c;完成對信號的轉換、增強、分析和控制。以下是DSP處理數字信號的主要用途及典型場景&#xff1a; 1. 信號增強與優化 降噪&#xff08;Noise…

電腦如何保養才能用得更久

在這個數字化的時代&#xff0c;電腦已經成為了我們生活和工作中不可或缺的伙伴。無論是處理工作文檔、追劇娛樂&#xff0c;還是進行創意設計&#xff0c;電腦都發揮著至關重要的作用。那么&#xff0c;如何讓我們的電腦“健康長壽”&#xff0c;陪伴我們更久呢&#xff1f;今…

設計模式-監聽者模式

文章目錄 監聽者模式 監聽者模式 監聽器模式指的是事件源經過事件的封裝傳給監聽器&#xff0c;當事件源觸發事件之后&#xff0c;監聽器收到事件的通知并執行事件回調方法。 -監聽者觀察者概念定義當范圍對象的狀態發生變化時&#xff0c;服務器自動調用監聽器對象中的方法來…

小程序33-列表渲染

列表渲染 就是指通過循環遍歷一個數組或對象&#xff0c;將其中的每個元素渲染到頁面上 在組件上使用 wx:for 屬性綁定一個數組或對象&#xff0c;既可使用每一項數據重復渲染當前組件 每一項的變量名默認為item&#xff0c;下標變量名默認為index 在使用 wx:for進行遍歷的時候…

[ Qt ] | QRadioButton和QCheckBox的使用

目錄 QRadioButton 常用屬性 clicked(bool)信號、pressed信號、released信號 小項目 QRadioButton QRadioButton是一個單選按鈕&#xff0c;也是繼承自QAbstractButton(繼承自QWidget) 常用屬性 checkable 是否能選中 checked 是否已經被選中 autoExclusive 是否排…

[網頁五子棋][匹配模式]創建房間類、房間管理器、驗證匹配功能,匹配模式小結

文章目錄 創建房間類創建房間類實現房間管理器 實現匹配器(3)驗證匹配功能問題&#xff1a;匹配按鈕不改變驗證多開 小結 創建房間類 LOL&#xff0c;通過匹配的方式&#xff0c;自動給你加入到一個房間&#xff0c;也可手動創建游戲房間 這一局游戲&#xff0c;進行的“場所…

Apifox 5 月產品更新|數據模型支持查看「引用資源」、調試 AI 接口可實時預覽 Markdown、性能優化

Apifox 新版本上線啦&#xff01; 看看本次版本更新主要涵蓋的重點內容&#xff0c;有沒有你所關注的功能特性&#xff1a; 自動解析 JSON 參數名和參數值調試 AI 接口時&#xff0c;可預覽 Markdown 格式的內容性能優化&#xff1a;新增「實驗性功能」選項 使用獨立進程執行…