【趙渝強老師】大數據交換引擎Sqoop

在這里插入圖片描述

Sqoop是SQL To Hadoop的簡稱,它是一款開源的工具,主要用于在Hadoop(Hive)與傳統的數據庫(Oracle、MySQL等)間進行數據的傳遞。通過使用Sqoop可以將一個關系型數據庫中的數據導進到Hadoop的HDFS中,也可以將HDFS的數據導進到關系型數據庫中。Sqoop是基于MapReduce完成數據的交換,因此在使用Sqoop之前需要部署Hadoop環境;另一方面,由于Sqoop交換的是關系型數據庫中的數據,因此底層需要JDBC驅動的支持。

Sqoop項目開始于2009年,最早是作為Hadoop的一個第三方模塊存在,后來為了讓使用者能夠快速部署,也為了讓開發人員能夠更快速的迭代開發,Sqoop獨立成為一個Apache項目。

視頻講解如下

【趙渝強老師】大數據交換引擎Sqoop

一、 準備Sqoop環境

Apache Sqoop的安裝部署比較簡單,直接解壓后就可以使用。由于Sqoop底層需要JDBC的支持。因此需要將對應關系型數據庫的JDBC Driver復制到Sqoop的lib目錄下。這里將在bigdata111的虛擬主機上來完成安裝和部署,并采集之前部署好的MySQL數據庫中的數據。下面通過具體的步驟來演示Sqoop的部署。

(1)將Sqoop的安裝包解壓到/root/training目錄。

tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ~/training/

(2)將Sqoop的目錄進行重命名。

cd ~/training/
mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop/

(3)將MySQL的JDBC Driver復制到Sqoop的lib目錄下。

cp mysql-connector-java-5.1.43-bin.jar ~/training/sqoop/lib/

(4)編輯文件/root/.bash_profile設置Sqoop相應的環境變量。

SQOOP_HOME=/root/training/sqoop
export SQOOP_HOMEPATH=$SQOOP_HOME/bin:$PATH
export PATH

(5)生效環境變量。

source /root/.bash_profile

(6)啟動Hadoop環境。

start-all.sh

(7)登錄MySQL數據庫執行下面的腳本建立測試數據。

create database if not exists demo;
use demo;create table emp 
(empno int primary key,
ename varchar(10),
job varchar(10),
mgr int,
hiredate varchar(10),
sal int,
comm int,
deptno int);create table dept
(deptno int primary key,
dname varchar(10),
loc varchar(10)
);insert into emp values(7369,'SMITH','CLERK',7902,'1980/12/17',800,0,20);
insert into emp values(7499,'ALLEN','SALESMAN',7698,'1981/2/20',1600,300,30);
insert into emp values(7521,'WARD','SALESMAN',7698,'1981/2/22',1250,500,30);
insert into emp values(7566,'JONES','MANAGER',7839,'1981/4/2',2975,0,20);
insert into emp values(7654,'MARTIN','SALESMAN',7698,'1981/9/28',1250,1400,30);
insert into emp values(7698,'BLAKE','MANAGER',7839,'1981/5/1',2850,0,30);
insert into emp values(7782,'CLARK','MANAGER',7839,'1981/6/9',2450,0,10);
insert into emp values(7788,'SCOTT','ANALYST',7566,'1987/4/19',3000,0,20);
insert into emp values(7839,'KING','PRESIDENT',-1,'1981/11/17',5000,0,10);
insert into emp values(7844,'TURNER','SALESMAN',7698,'1981/9/8',1500,0,30);
insert into emp values(7876,'ADAMS','CLERK',7788,'1987/5/23',1100,0,20);
insert into emp values(7900,'JAMES','CLERK',7698,'1981/12/3',950,0,30);
insert into emp values(7902,'FORD','ANALYST',7566,'1981/12/3',3000,0,20);
insert into emp values(7934,'MILLER','CLERK',7782,'1982/1/23',1300,0,10);insert into dept values(10,'ACCOUNTING','NEW YORK');
insert into dept values(20,'RESEARCH','DALLAS');
insert into dept values(30,'SALES','CHICAGO');
insert into dept values(40,'OPERATIONS','BOSTON');

《從大數據到云原生系列課程》

二、 使用Sqoop完成數據交換

下面將通過具體的操作步驟來演示如何使用Sqoop完成與關系型數據庫MySQL的數據交換。

(1)使用Sqoop執行一個簡單的查詢。這里將查詢10號部門的員工姓名、職位、薪水和部門號,結果如下圖所示。

sqoop eval --connect jdbc:mysql://localhost:3306/demo?useSSL=false \
--username root --password Welcome_1 --query \
"select ename,job,sal,deptno from emp where deptno=10"

在這里插入圖片描述

(2)根據MySQL數據庫中的表結構生成對應的Java Class。

sqoop codegen --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1 --table emp# 輸出的日志如下所示:
2021-04-22 14:34:42,491 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /root/training/hadoop-3.1.2
Note: /tmp/sqoop-root/compile/2abad54ace6665327b12e83a02b14a8f/emp.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
2021-04-22 14:34:45,173 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/2abad54ace6665327b12e83a02b14a8f/emp.jar# 執行成功后,會自動將/tmp目錄下生成的emp.java拷貝至當前目錄,部分代碼如下:
public class emp extends SqoopRecord  implements DBWritable, Writable {private final int PROTOCOL_VERSION = 3;public int getClassFormatVersion() { return PROTOCOL_VERSION; }public static interface FieldSetterCommand {void setField(Object value);  }  protected ResultSet __cur_result_set;private Map<String, FieldSetterCommand> setters = new HashMap<String, FieldSetterCommand>();private void init0() {setters.put("empno", new FieldSetterCommand() {@Overridepublic void setField(Object value) {emp.this.empno = (Integer)value;}});setters.put("ename", new FieldSetterCommand() {@Override# 這里可以看到emp類實現了Writable接口。按照開發MapReduce程序的要求,
# 該類可以作為MapReduce的Key或者Value。

(3)根據MySQL數據庫中的表結構生成對應的Hive表結構。命令執行完成后,查看Hive中的表結構信息如下圖所示。

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*sqoop create-hive-table --connect jdbc:mysql://localhost:3306/demo  \
--username root --password Welcome_1 --table emp --hive-table emphive

在這里插入圖片描述

(4)將MySQL數據庫中的emp表導入到HDFS。命令執行完成后,查看HDFS目錄的內容,如下圖所示。

sqoop import --connect jdbc:mysql://localhost:3306/demo  \
--username root --password Welcome_1 --table emp --target-dir /myempdata

在這里插入圖片描述

(5)將HDFS的數據導出到MySQL數據庫中。命令執行完成后,在MySQL中驗證數據是否導入如下圖所示。

# 先在MySQL中創建對應的表
create table mynewemp like emp;# 執行導入
sqoop export --connect jdbc:mysql://localhost:3306/demo  \
--username root --password Welcome_1 \
--table mynewemp --export-dir /myempdata

在這里插入圖片描述

(6)將MySQL數據庫中的所有表導入到HDFS。執行完成后默認將導入HDFS的/user/root目錄,如下圖所示。

sqoop import-all-tables --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1

在這里插入圖片描述

(7)列出MySQL的所有數據庫。命令執行完成后,如下圖所示。

sqoop list-databases --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1

在這里插入圖片描述

(8)列出MySQL數據庫中所有的表,執行結果如下圖所示。

sqoop list-tables --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1

在這里插入圖片描述

《從大數據到云原生系列課程》

(9)將MySQL表的數據導入HBase。

#進入HBase Shell創建表
create 'emp','empinfo'#執行導入
sqoop import --connect jdbc:mysql://localhost:3306/demo \
--username root --password Welcome_1 --table emp \
--columns empno,ename,sal,deptno \
--hbase-table emp --hbase-row-key empno --column-family empinfo# Sqoop導入數據到HBase時,HBase的版本不能太高,建議使用HBase 1.3.6。

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

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

相關文章

C++進階-map的應用

目錄 1.預備知識 2.map的補充知識 2.1map的插入方式 2.2訪問鍵和值 2.3map::operator[]的補充 2.4另外一些map的成員函數的補充 3.map的應用實踐-力扣刷題-前k個高頻單詞 3.1解法1 3.2解法2 3.3解法3 4.map的應用實踐-力扣刷題-隨機鏈表的復制 4.1C語言解法 4.2C解…

【三維重建工具】NeRFStudio、3D GaussianSplatting、Colmap安裝與使用指南

目錄 一、NeRFStudio安裝1.安裝&#xff08;ubuntu系統&#xff09;2.安裝&#xff08;windows系統&#xff09; 二、安裝tinycudann三、Colmap安裝與使用1. 安裝依賴2. 安裝colmap3.使用colmap3.1 可視化界面使用3.2 Nerfstudio命令行調用Colmap3.3 colmap結果不準時的修復3.4…

Mybatis05-動態sql

一、應用場景MyBatis 的 動態 SQL 是指根據不同的條件動態拼接生成 SQL 語句的能力。它的最大優勢是&#xff1a;避免寫多個 XML 映射語句、避免 SQL 冗余、提升代碼復用性和可維護性。示例1&#xff1a;用戶可以通過勾選框&#xff0c;勾選不同的數據進行批量刪除&#xff0c;…

VSCODE 選中多行 需要同時按住alt鍵才可以

在 VS Code 中&#xff0c;如果你發現 必須按住 Alt 鍵才能選中多行&#xff08;即“列選擇”或“塊選擇”模式&#xff09;&#xff0c;而直接拖動鼠標無法多選&#xff0c;可能是由于以下原因導致的&#xff1a;1. 檢查是否啟用了“列選擇模式”VS Code 默認情況下&#xff1…

2025前端面試真題以及答案-不斷整理中,問題來源于牛客真題

一、 項目內存泄露react與vue的渲染機制有哪些不同react fiber架構vue2與3&#xff0c;為什么用proxy代替defineproperty性能優化有哪些三欄布局實現方式重排與重繪一個對話聊天框如何減少重排&#xff08;我回答的是絕對定位&#xff0c;將聊天框定位在下面&#xff0c;類似于…

雷軍的 IP 革命:人格化力量如何重塑商業規則|創客匠人

小米 YU7 發布會 3 分鐘售罄 20 萬臺的奇跡&#xff0c;撕開了一個時代真相&#xff1a;當商業競爭進入深水區&#xff0c;決定勝負的不再是產品參數&#xff0c;而是創始人 IP 的人格穿透力。雷軍僅憑個人影響力撬動數十億級交易&#xff0c;這絕非偶然&#xff0c;而是人格化…

SpringBoot3:應對C10K并發挑戰的優化指南

嘿&#xff0c;哥們&#xff01;還在為服務的并發量上不去而頭疼嗎&#xff1f;用戶量一上來&#xff0c;CPU、內存就告急&#xff0c;接口響應慢得像蝸牛&#xff1f;別慌&#xff0c;今天我們就來盤一盤&#xff0c;怎么用最新的Spring Boot 3&#xff0c;把服務性能調教到極…

響應式編程入門教程第三節:ReactiveCommand 與 UI 交互

響應式編程入門教程第一節&#xff1a;揭秘 UniRx 核心 - ReactiveProperty - 讓你的數據動起來&#xff01; 響應式編程入門教程第二節&#xff1a;構建 ObservableProperty&#xff1c;T&#xff1e; — 封裝 ReactiveProperty 的高級用法 響應式編程入門教程第三節&#x…

500+技術棧覆蓋:Web測試平臺TestComplete的對象識別技術解析

在用戶界面&#xff08;UI&#xff09;測試領域&#xff0c;傳統的測試工具往往依賴于XPath或CSS選擇器來定位頁面元素。然而&#xff0c;在面對動態變化的界面、多語言支持或是跨越多種技術框架的應用時&#xff0c;這些傳統方法常導致腳本失效&#xff0c;增加了維護成本。 …

研究人員利用提示注入漏洞繞過Meta的Llama防火墻防護

Trendyol應用安全團隊發現了一系列繞過技術&#xff0c;使得Meta的Llama防火墻在面對復雜的提示注入攻擊時防護失效。這一發現引發了人們對現有大語言模型&#xff08;LLM&#xff09;安全措施準備情況的擔憂&#xff0c;并凸顯出在企業日益將大語言模型嵌入工作流程時&#xf…

Shell 腳本系統學習 · 第5篇:多命令順序執行的三種方式詳解(`;`、``、`||`)

在日常的 Linux 運維與腳本編寫中&#xff0c;我們經常需要依次執行多條命令。本篇將帶你徹底搞懂三種命令順序執行方式&#xff1a;;、&& 和 ||&#xff0c;并通過實用示例掌握它們的區別與應用場景。一、為什么要了解多命令執行方式&#xff1f; 在實際運維或腳本編寫…

K8s存儲系統(通俗易懂版)

Kubernetes中存儲中有四個重要的概念&#xff1a;Volume、PersistentVolume PV、PersistentVolumeClaim PVC、StorageClass一、存儲系統核心概念Volume&#xff08;卷&#xff09;定義&#xff1a;Kubernetes 中最基礎的存儲單元&#xff0c;用于將外部存儲掛載到 Pod 中的容器…

小白學Python,標準庫篇——隨機庫、正則表達式庫

一、隨機庫1.隨機生成數值在random庫中可以隨機生成數值的方法有uniform()、random()、randint()、randrange()等。&#xff08;1&#xff09;uniform()方法uniform(參數1, 參數2)方法用于生成參數1到參數2之間的隨機小數&#xff0c;其中參數的類型都為數值類型。示例代碼&…

Qt窗口:菜單欄

目錄 一、窗口預覽 二、菜單欄 快捷鍵 子菜單 分割線 圖標 內存泄露 一、窗口預覽 在前面幾篇文章中&#xff0c;或者說&#xff0c;Qt初學階段&#xff0c;接觸到的都是QWidget&#xff0c;QWidget指控件&#xff0c;往往作為一個窗口的一部分出現。所謂的窗口&#x…

STM32裸機開發(中斷,輪詢,狀態機)與freeRTOS

裸機&#xff1a;沒有操作系統&#xff0c;程序是單流程的&#xff08;比如一個大循環里依次執行各個功能&#xff0c;或者用中斷嵌套處理事件&#xff09;。優點是資源占用極少&#xff08;幾乎不占 RAM/Flash&#xff09;、執行流程直觀&#xff1b;但復雜項目里&#xff0c;…

電腦上如何查看WiFi密碼

打開控制面板>點擊網絡和Internet在查看網絡和共享中心找到網絡狀態和任務點擊進去點擊連接的WLAN在WLAN狀態中點擊無線屬性在無線網絡屬性中點擊安全&#xff0c;點擊顯示字符&#xff08;H&#xff09;就可以顯示密碼了

文心一言4.5企業級部署實戰:多模態能力與Docker容器化測評

隨著大語言模型在企業服務中的應用日益廣泛&#xff0c;如何選擇一款既能滿足多模態創作需求&#xff0c;又具備良好企業級適配性的AI模型成為了關鍵問題。文心一言4.5作為百度最新開源的大模型&#xff0c;不僅在傳統的文本處理上表現出色&#xff0c;更是在多模態理解和企業級…

VUE Promise基礎語法

目錄 異步和同步 異步的問題 new Promise語法 promise的狀態 promise.then() Promise.resolve() Promise.reject() Promise.all() Promise.race() Promise.catch() Promise.finally() 異步和同步 同步模式下&#xff0c;代碼按順序執行&#xff0c;前一條執行完畢后…

用TensorFlow進行邏輯回歸(六)

import tensorflow as tfimport numpy as npfrom tensorflow.keras.datasets import mnistimport time# MNIST數據集參數num_classes 10 # 數字0到9, 10類num_features 784 # 28*28# 訓練參數learning_rate 0.01training_steps 1000batch_size 256display_step 50# 預處…

【HTTP版本演變】

在瀏覽器中輸入URL并按回車之后會發生什么1. 輸入URL并解析輸入URL后&#xff0c;瀏覽器會解析出協議、主機、端口、路徑等信息&#xff0c;并構造一個HTTP請求&#xff08;瀏覽器會根據請求頭判斷是否又HTTP緩存&#xff0c;并根據是否有緩存決定從服務器獲取資源還是使用緩存…