關係資料庫數據與hadoop數據進行轉換的工具 - Sqoop

来源:https://www.cnblogs.com/hongten/archive/2019/01/05/hongten_sqoop.html
-Advertisement-
Play Games

Sqoop 本文所使用的Sqoop版本為1.4.6 1.官網 ...


Sqoop

本文所使用的Sqoop版本為1.4.6

1.官網

  http://sqoop.apache.org

2.作用

  A:可以把hadoop數據導入到關係資料庫裡面(e.g. Hive -> Mysql)

  B:可以把關係資料庫數據導入到hadoop裡面(e.g. Mysql -> Hive)

3.下載

  http://archive.apache.org/dist/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-1.0.0.tar.gz

4.安裝

--上傳到node1(我之前安裝的hive就在node1上面)本目錄,並且解壓
cd
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

--創建軟鏈
ln -sf /root/sqoop-1.4.6.bin__hadoop-2.0.4-alpha /home/sqoop-1.4.6

 

5.環境變數配置

--配置環境變數
vi /etc/profile

export HADOOP_PREFIX=$HADOOP_HOME
export PATH=$PATH:$SQOOP_HOME/bin

:wq

source /etc/profile

 

6.修改配置文件

--修改配置文件
cd /home/sqoop-1.4.6/conf/

cp sqoop-env-template.sh sqoop-env.sh

vi sqoop-env.sh

 

7.添加驅動包

--把mysql驅動包添加到sqoop的lib目錄下麵
cd
scp mysql-connector-java-5.1.23-bin.jar /home/sqoop-1.4.6/lib/

 

8.測試

sqoop version

[root@node1 ~]# sqoop version
Warning: /home/sqoop-1.4.6/../hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /home/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
Warning: /home/sqoop-1.4.6/../zookeeper does not exist! Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.
19/01/04 23:15:15 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
Sqoop 1.4.6
git commit id c0c5a81723759fa575844a0a1eae8f510fa32c25
Compiled by root on Mon Apr 27 14:38:36 CST 2015



sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password '!QAZ2wsx3edc'

[root@node1 ~]# sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password '!QAZ2wsx3edc'
Warning: /home/sqoop-1.4.6/../hbase does not exist! HBase imports will fail.
Please set $HBASE_HOME to the root of your HBase installation.
Warning: /home/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /home/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
Warning: /home/sqoop-1.4.6/../zookeeper does not exist! Accumulo imports will fail.
Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.
19/01/04 23:17:49 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
19/01/04 23:17:49 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
19/01/04 23:17:49 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
hive
mysql
performance_schema
result_db
spark
sys

你會發現,在輸出裡面會有很多Warning

我們可以通過以下操作去掉這些Warning

--去除Warning
cd /home/sqoop-1.4.6/bin/

vi configure-sqoop

--把下麵的行全部註釋掉 - 在每一行前面加 '#'
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HBASE_HOME}" ]; then
#  echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."
#  echo 'Please set $HBASE_HOME to the root of your HBase installation.'
#fi

## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
#  echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
#  echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi

#if [ ! -d "${ACCUMULO_HOME}" ]; then
#  echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
#  echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
#fi
#if [ ! -d "${ZOOKEEPER_HOME}" ]; then
#  echo "Warning: $ZOOKEEPER_HOME does not exist! Accumulo imports will fail."
#  echo 'Please set $ZOOKEEPER_HOME to the root of your Zookeeper installation.'
#fi

:wq

--再次測試
[root@node1 bin]# sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password '!QAZ2wsx3edc'
19/01/04 23:34:21 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6 19/01/04 23:34:21 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead. 19/01/04 23:34:21 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset. information_schema hive mysql performance_schema result_db spark sys

 

9.應用

9.1.從Mysql導入到HDFS

準備工作:

--在資料庫裡面先創建table
CREATE TABLE t_user (id INT, name VARCHAR(20), age INT);

--插入測試數據
insert into t_user values(1, 'Tom', 20);
insert into t_user values(2, 'John', 18);
insert into t_user values(3, 'Div', 25);
insert into t_user values(4, 'Susan', 31);
insert into t_user values(5, 'Tiran', 40);
insert into t_user values(6, 'Shasita', 13);

 

查詢結果:

mysql> select * from t_user;
+------+---------+------+
| id   | name    | age  |
+------+---------+------+
|    1 | Tom     |   20 |
|    2 | John    |   18 |
|    3 | Div     |   25 |
|    4 | Susan   |   31 |
|    5 | Tiran   |   40 |
|    6 | Shasita |   13 |
+------+---------+------+
6 rows in set (0.00 sec)

 

--從mysql資料庫裡面導出數據到Hdfs上面
sqoop import --connect jdbc:mysql://node1:3306/sqoop_db --username root --password '!QAZ2wsx3edc' --table t_user --columns id,name,age -m 1 --target-dir /sqoop_t_user


[root@node1 bin]# sqoop import --connect jdbc:mysql://node1:3306/sqoop_db --username root --password '!QAZ2wsx3edc' --table t_user --columns id,name,age -m 1 --target-dir /sqoop_t_user
19/01/04 23:54:30 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
19/01/04 23:54:30 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
19/01/04 23:54:30 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
19/01/04 23:54:30 INFO tool.CodeGenTool: Beginning code generation
19/01/04 23:54:31 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `t_user` AS t LIMIT 1
19/01/04 23:54:31 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM `t_user` AS t LIMIT 1
19/01/04 23:54:31 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /home/hadoop-2.5
Note: /tmp/sqoop-root/compile/84e97965496cc61c73c17151375a419b/t_user.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
19/01/04 23:54:33 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-root/compile/84e97965496cc61c73c17151375a419b/t_user.jar
19/01/04 23:54:33 WARN manager.MySQLManager: It looks like you are importing from mysql.
19/01/04 23:54:33 WARN manager.MySQLManager: This transfer can be faster! Use the --direct
19/01/04 23:54:33 WARN manager.MySQLManager: option to exercise a MySQL-specific fast path.
19/01/04 23:54:33 INFO manager.MySQLManager: Setting zero DATETIME behavior to convertToNull (mysql)
19/01/04 23:54:33 INFO mapreduce.ImportJobBase: Beginning import of t_user
19/01/04 23:54:33 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar
19/01/04 23:54:34 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
19/01/04 23:54:34 INFO client.RMProxy: Connecting to ResourceManager at node1/192.168.79.138:8032
19/01/04 23:54:48 INFO db.DBInputFormat: Using read commited transaction isolation
19/01/04 23:54:48 INFO mapreduce.JobSubmitter: number of splits:1
19/01/04 23:54:48 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1546674829746_0001
19/01/04 23:54:49 INFO impl.YarnClientImpl: Submitted application application_1546674829746_0001
19/01/04 23:54:49 INFO mapreduce.Job: The url to track the job: http://node1:8088/proxy/application_1546674829746_0001/
19/01/04 23:54:49 INFO mapreduce.Job: Running job: job_1546674829746_0001
19/01/04 23:54:59 INFO mapreduce.Job: Job job_1546674829746_0001 running in uber mode : false
19/01/04 23:54:59 INFO mapreduce.Job:  map 0% reduce 0%
19/01/04 23:55:06 INFO mapreduce.Job:  map 100% reduce 0%
19/01/04 23:55:06 INFO mapreduce.Job: Job job_1546674829746_0001 completed successfully
19/01/04 23:55:06 INFO mapreduce.Job: Counters: 30
    File System Counters
        FILE: Number of bytes read=0
        FILE: Number of bytes written=116299
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=87
        HDFS: Number of bytes written=63
        HDFS: Number of read operations=4
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=2
    Job Counters 
        Launched map tasks=1
        Other local map tasks=1
        Total time spent by all maps in occupied slots (ms)=4153
        Total time spent by all reduces in occupied slots (ms)=0
        Total time spent by all map tasks (ms)=4153
        Total vcore-seconds taken by all map tasks=4153
        Total megabyte-seconds taken by all map tasks=4252672
    Map-Reduce Framework
        Map input records=6
        Map output records=6
        Input split bytes=87
        Spilled Records=0
        Failed Shuffles=0
        Merged Map outputs=0
        GC time elapsed (ms)=69
        CPU time spent (ms)=1170
        Physical memory (bytes) snapshot=175808512
        Virtual memory (bytes) snapshot=893071360
        Total committed heap usage (bytes)=84934656
    File Input Format Counters 
        Bytes Read=0
    File Output Format Counters 
        Bytes Written=63
19/01/04 23:55:06 INFO mapreduce.ImportJobBase: Transferred 63 bytes in 32.3608 seconds (1.9468 bytes/sec)
19/01/04 23:55:06 INFO mapreduce.ImportJobBase: Retrieved 6 records.

 

運行效果:

 

官網提供另一種方式,即讀取文件的方式來實現上面的導入功能

cd 
mkdir mysqoopdir
cd mysqoopdir

vi mysql_to_hdfs


import 
--connect 
jdbc:mysql://node1:3306/sqoop_db 
--username 
root 
--password 
'!QAZ2wsx3edc' 
--table 
t_user 
--columns 
id,name,age 
-m 
1 
--target-dir 
/sqoop_t_user
--delete-target-dir

:wq

sqoop --options-file mysql_to_hdfs

 

我們可以通過Hive,來驗證導入結果

[root@node1 bin]# ./hive
19/01/05 00:03:29 WARN conf.HiveConf: DEPRECATED: hive.metastore.ds.retry.* no longer has any effect.  Use hive.hmshandler.retry.* instead

Logging initialized using configuration in jar:file:/root/apache-hive-0.13.1-bin/lib/hive-common-0.13.1.jar!/hive-log4j.properties
hive> dfs -cat /sqoop_t_user/*;
1,Tom,20
2,John,18
3,Div,25
4,Susan,31
5,Tiran,40
6,Shasita,13

 

我們看到的結果和mysql裡面的數據一樣。

應用場景:如果現在我們的需要處理/分析的數據都存在Mysql資料庫裡面,並且數據量比較大,我們想要通過離線分析這些數據。這時,我們就可以把Mysql裡面的數據通過Sqoop導入到Hdfs裡面,進行分析處理。

 

導入查詢結果:

--導入查詢結果
cd mysqoopdir

vi mysql_query_to_hdfs


import
--connect
jdbc:mysql://node1:3306/sqoop_db
--username
root
--password
'!QAZ2wsx3edc'
-e 
select id, name from t_user where id >= 1 and $CONDITIONS
-m
1
--target-dir
/sqoop_t_user
--delete-target-dir

:wq

sqoop --options-file mysql_query_to_hdfs

--檢驗
hive> dfs -cat /sqoop_t_user/*;
1,Tom
2,John
3,Div
4,Susan
5,Tiran
6,Shasita

 

9.2Mysql導入數據到Hive

--mysql導入到Hive
cd mysqoopdir

vi mysql_to_hive


import
--connect
jdbc:mysql://node1:3306/sqoop_db
--username
root
--password
'!QAZ2wsx3edc'
--table
t_user
-m
1
--create-hive-table
--target-dir
/sqoop_mysql_to_hive/
--hive-home
/home/hive/
--hive-import
--hive-table
t_sqoop_mysql_t_user_to_hive
--create-hive-table


:wq

sqoop --options-file mysql_to_hive

--檢驗
hive> select * from t_sqoop_mysql_t_user_to_hive;
OK
1    Tom    20
2    John    18
3    Div    25
4    Susan    31
5    Tiran    40
6    Shasita    13
Time taken: 0.577 seconds, Fetched: 6 row(s)

 

9.3.Mysql導入到Hbase

--mysql導入到Hbase
cd mysqoopdir

vi mysql_to_hbase


import
--connect
jdbc:mysql://node1:3306/sqoop_db
--username
root
--password
'!QAZ2wsx3edc'
--table
t_user
-m
1
--hbase-table
t_sqoop_mysql_t_user_to_hbase
--hbase-row-key
id
--hbase-create-table
--column-family
cf


:wq

sqoop --options-file mysql_to_hbase

--檢驗
hbase(main):004:0> scan 't_sqoop_mysql_t_user_to_hbase'
ROW                     COLUMN+CELL                                                        
 1                      column=cf:age, timestamp=1546680684317, value=20                   
 1                      column=cf:name, timestamp=1546680684317, value=Tom                 
 2                      column=cf:age, 
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.概述 Zephyr支持在Windows、Linux和MacOS環境下開發,這裡只介紹如何在Windows下搭建zephyr的開發環境。 二.步驟 2.1安裝msys2 msys2是一個Linux模擬環境,類似於ArchLinux。 安裝完成後,要添加源(這與Linux環境是類似的),這裡我添加的 ...
  • Zephyr是一個面向物聯網的嵌入式實時操作系統(RTOS),是Linux基金會旗下的一個項目,具有以下特點: 1.安全的,靈活、高可擴展性,支持多種硬體平臺(ARM、ARC、X86、xtensa、nois2、riscv32); 2.基於Apache 2.0許可,完全開源,代碼托管在github; ...
  • Linux系統成功的關鍵因素之一就是具有與其他操作系統和諧共存的能力。Linux系統的文件系統由兩層結構構建:第一層是虛擬文件系統(VFS),第二層是各種不同的具體的文件系統。 VFS就是把各種具體的文件系統的公共部分抽取出來,形成一個抽象層,是系統內核的一部分,它位於用戶程式和具體的文件系統之間。 ...
  • 使用的centos版本為 7.5 首先我們要把jdk拷到linux中,這裡我們藉助XShell工具,我們先來看看Xshell的用法 打開Xshell 後點擊文件,“新建“,如下圖: 起一個名稱,主機填寫linux的的IP地址,打開終端 輸入 ifconfig即可查看ip地址 紅色箭頭指向的地方就是l ...
  • 本文所述MongoDB版本為4.0.5,筆者對MongoDB剛接觸,對各個版本的MongoDB不甚瞭解,本文不對該版本的MongoDB做特性介紹,所涉及命令也許對其餘版本不適用。 因為目前有一個試驗性的項目想要使用NoSQL,而MongoDB在工作中有一定的接觸,所以這個項目打算使用MongoDB ...
  • information_schema 此資料庫是MySQL資料庫自帶的,主要存儲資料庫的元數據,保存了關於MySQL伺服器維護的所有其他資料庫的信息,如資料庫名、資料庫表、表列的數據類型及訪問許可權等。 這個庫在很多情況下,可以幫助我們做一些自動化處理的工作,比如巡檢程式找到所有的MyISAM表,或者 ...
  • 查詢性能低下最基本的原因是訪問的數據太多。某些查詢不可避免的需要篩選大量數據,但這並不常見。大部分性能低下的查詢都可以通過減少訪問的數據量的方式進行優化 ...
  • 第一題:求單月訪問次數和總訪問次數 1.數據說明 (1)欄位數據說明 (2)數據格式 2.數據準備 (1)創建表 (2) 導入數據 (3) 驗證數據 3.結果需求 4.思路分析 (1)先求出用戶每個月的訪問次數 (2)利用其之前創建的視圖,利用視窗函數就可以擺脫select後面的欄位必須出現在gro ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...