日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

cdh mysql sqoop 驱动_大数据技术之Sqoop学习——原理、安装、使用案例、常用命令...

發(fā)布時間:2025/3/11 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cdh mysql sqoop 驱动_大数据技术之Sqoop学习——原理、安装、使用案例、常用命令... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第1章 Sqoop 簡介

Sqoop 是一款開源的工具,主要用于在 Hadoop(Hive) 與傳統(tǒng)的數(shù)據(jù)庫 (mysql,postgresql,...) 間進行數(shù)據(jù)的高校傳遞,可以將一個關(guān)系型數(shù)據(jù)庫(例如:MySQL,Oracle,Postgres等)中的數(shù)據(jù)導(dǎo)入到 Hadoop 的 HDFS 中,也可以將 HDFS 的數(shù)據(jù)導(dǎo)進到關(guān)系型數(shù)據(jù)庫中。

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

Sqoop2 的最新版本是 1.99.7。請注意,2 與 1 不兼容,且特征不完整,它并不打算用于生產(chǎn)部署。

第2章 Sqoop 原理

將導(dǎo)入或?qū)С雒罘g成 mapreduce 程序來實現(xiàn)。

在翻譯出的 mapreduce 中主要是對 inputformat 和 outputformat 進行定制。

第3章 Sqoop 安裝

安裝 Sqoop 的前提是已經(jīng)具備 Java 和 Hadoop 的環(huán)境。

3.1 下載并解壓

  • 下載地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
  • 上傳安裝包 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 到虛擬機中
  • 解壓 sqoop 安裝包到指定目錄,如:
$ tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/
  • 重命名 sqoop 安裝目錄,如:
[atguigu@hadoop102 module]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop

3.2 修改配置文件

Sqoop 的配置文件與大多數(shù)大數(shù)據(jù)框架類似,在 sqoop 根目錄下的 conf 目錄中。

  • 重命名配置文件
$ mv sqoop-env-template.sh sqoop-env.sh
  • 修改配置文件
[atguigu@hadoop102 conf]$ pwd/opt/module/sqoop/conf[atguigu@hadoop102 conf]$ vim sqoop-env.shexport HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2export HIVE_HOME=/opt/module/hiveexport ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10export ZOOCFGDIR=/opt/module/zookeeper-3.4.10export HBASE_HOME=/opt/module/hbase

3.3 拷貝 JDBC 驅(qū)動

拷貝 jdbc 驅(qū)動到 sqoop 的 lib 目錄下,如:

[atguigu@hadoop102 sqoop]$ cp /opt/software/mysql-libs/mysql-connector-java-5.1.27/mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop/lib/

3.4 驗證 Sqoop

我們可以通過某一個 command 來驗證 sqoop 配置是否正確:

[atguigu@hadoop102 sqoop]$ bin/sqoop help

出現(xiàn)一些 Warning 警告(警告信息已省略),并伴隨著幫助命令的輸出:

Available commands:

codegen Generate code to interact with database records

create-hive-table Import a table definition into Hive

eval Evaluate a SQL statement and display the results

export Export an HDFS directory to a database table

help List available commands

import Import a table from a database to HDFS

import-all-tables Import tables from a database to HDFS

import-mainframe Import datasets from a mainframe server to HDFS

job Work with saved jobs

list-databases List available databases on a server

list-tables List available tables in a database

merge Merge results of incremental imports

metastore Run a standalone Sqoop metastore

version Display version information

3.5 測試 Sqoop 是否能夠成功連接數(shù)據(jù)庫

[atguigu@hadoop102 sqoop]$ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 123456

出現(xiàn)如下輸出:

information_schemametastoremysqlperformance_schematest

第4章 Sqoop 的簡單使用案例

4.1 導(dǎo)入數(shù)據(jù)

在 Sqoop 中,“導(dǎo)入”概念指:從非大數(shù)據(jù)集群(RDBMS)向大數(shù)據(jù)集群(HDFS,HIVE,HBASE)中傳輸數(shù)據(jù),叫做:導(dǎo)入,即使用 import 關(guān)鍵字。

4.1.1 從 RDBMS 到 HDFS

  • 確定 Mysql 服務(wù)開啟正常

查詢監(jiān)控端口或者查詢進程來確定,以下兩種辦法可以確認mysql是否在啟動運行狀態(tài):

辦法一:查詢端口

$ netstat -tulpn

MySQL監(jiān)控的是TCP的3306端口,如下圖,說明MySQL服務(wù)在運行中。

辦法二:查詢進程

ps -ef | grep mysqld

可以看見mysql的進程

  • 在 Mysql 中新建一張表并插入一些數(shù)據(jù)
$ mysql -uroot -p123456mysql> create database company;mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255));mysql> insert into company.staff(name, sex) values('Thomas', 'Male');mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale');
  • 導(dǎo)入數(shù)據(jù)

(1)全部導(dǎo)入

[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by ""

(2)查詢導(dǎo)入

[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "" --query 'select name,sex from staff where id <=1 and $CONDITIONS;'等價于[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "" --query "select name,sex from staff where id <=1 and $CONDITIONS;"

提示:must contain 'CONDITIONS′ in WHERE clause.‘ CONDITIONS‘:傳遞作用。 如果 query 后使用的是雙引號,則‘$CONDITIONS` 前必須加轉(zhuǎn)義符,防止 shell 識別為自己的變量。

(3)導(dǎo)入指定列

[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --columns id,sex --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by ""

提示:columns中如果涉及到多列,用逗號分隔,分隔時不要添加空格。

(4)使用 sqoop 關(guān)鍵字篩選查詢導(dǎo)入數(shù)據(jù)

[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --where "id=1" --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by ""[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --columns id,sex --where "id=1" --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by ""

4.1.2 從 RDBMS 到 Hive

(1)全部導(dǎo)入

[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --num-mappers 1 --fields-terminated-by "" --hive-import --hive-overwrite --hive-table staff_hive

提示:該過程分為兩步,第一步將數(shù)據(jù)導(dǎo)入到 HDFS,第二步將導(dǎo)入到 HDFS 的數(shù)據(jù)遷移到 Hive 倉庫,第一步默認的臨時目錄是 /user/atguigu/表名。

4.1.3 從 RDBMS 到 HBase

(1)導(dǎo)入數(shù)據(jù)

[atguigu@hadoop102 sqoop]$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --columns "id,name,sex" --num-mappers 1 --column-family "info" --hbase-create-table --hbase-row-key "id" --hbase-table "hbase_staff" --split-by id

會報錯,如下圖所示:

原因:sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自動創(chuàng)建 HBase 表的功能。

解決方案:手動創(chuàng)建 HBase 表

hbase> create 'hbase_staff','info'

(5) 在 HBase 中 scan 這張表得到如下內(nèi)容

hbase> scan ‘hbase_staff’

4.2、導(dǎo)出數(shù)據(jù)

在Sqoop中,“導(dǎo)出”概念指:從大數(shù)據(jù)集群(HDFS,HIVE,HBASE)向非大數(shù)據(jù)集群(RDBMS)中傳輸數(shù)據(jù),叫做:導(dǎo)出,即使用 export 關(guān)鍵字。

4.2.1 從 HIVE/HDFS 到 RDBMS

(1)導(dǎo)出數(shù)據(jù)

[atguigu@hadoop102 sqoop]$ bin/sqoop export --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --num-mappers 1 --export-dir /user/hive/warehouse/staff_hive --input-fields-terminated-by ""

提示:Mysql 中如果表不存在,不會自動創(chuàng)建。

4.3 腳本打包

使用opt格式的文件打包 sqoop 命令,然后執(zhí)行。

  • 創(chuàng)建一個 xxx.opt 文件
[atguigu@hadoop102 sqoop]$ pwd/opt/module/sqoop[atguigu@hadoop102 sqoop]$ mkdir opt[atguigu@hadoop102 sqoop]$ touch opt/job_HDFS2RDBMS.opt
  • 編寫 sqoop 腳本
[atguigu@hadoop102 sqoop]$ cd opt/[atguigu@hadoop102 opt]$ vim job_HDFS2RDBMS.opt export--connectjdbc:mysql://hadoop102:3306/company--usernameroot--password123456--tablestaff--num-mappers1--export-dir/user/hive/warehouse/staff_hive--input-fields-terminated-by""
  • 執(zhí)行該腳本
[atguigu@hadoop102 sqoop]$ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt

尖叫提示:Mysql 中如果表不存在,不會自動創(chuàng)建,所以我們要先創(chuàng)建表 staff,如果表 staff 存在,我們應(yīng)該清除掉 staff 表的數(shù)據(jù),不然會出現(xiàn)主鍵沖突!如下圖所示:

第5章 Sqoop 一些常用命令及參數(shù)

5.1 常用命令列舉

這里給大家列出來了一部分 Sqoop 操作時的常用參數(shù),以供參考,需要深入學(xué)習(xí)的可以參看對應(yīng)類的源代碼。

如下表所示:

序號 |命令 | 類 | 說明

-------- | — | —

1 |import | ImportTool | 將數(shù)據(jù)導(dǎo)入到集群

2 |export | ExportTool | 將集群數(shù)據(jù)導(dǎo)出

3 |codegen | CodeGenTool | 獲取數(shù)據(jù)庫中某張表數(shù)據(jù)生成 Java 并打包 Jar

4 |create-hive-table | CreateHiveTableTool | 創(chuàng)建 Hive 表

5 |eval | EvalSqlTool | 查看 SQL 執(zhí)行結(jié)果

6 |import-all-tables | ImportAllTablesTool | 導(dǎo)入某個數(shù)據(jù)庫下所有表到 HDFS 中

7 |job | JobTool | 用來生成一個 sqoop 的任務(wù),生成后,該任務(wù)并不執(zhí)行,除非使用命令執(zhí)行該任務(wù)。

8 |list-databases | ListDatabasesTool | 列出所有數(shù)據(jù)庫名

9 |list-tables | ListTablesTool | 列出某個數(shù)據(jù)庫下所有表

10 |merge | MergeTool | 將 HDFS 中不同目錄下面的數(shù)據(jù)合并在一起,并存放在指定的目錄中

11 |metastore | MetastoreTool | 記錄 sqoop job 的元數(shù)據(jù)信息,如果不啟動 metastore 實例,則默認的元數(shù)據(jù)存儲目錄為:~/.sqoop,如果要更改存儲目錄,可以在配置文件 sqoop-site.xml 中進行更改。

12 |help | HelpTool | 打印 sqoop 幫助信息

13 |version | VersionTool | 打印 sqoop 版本信息

5.2 命令&參數(shù)詳解

剛才列舉了一些 Sqoop 的常用命令,對于不同的命令,有不同的參數(shù),讓我們來一一列舉說明。

首先來我們來介紹一下公用的參數(shù),所謂公用參數(shù),就是大多數(shù)命令都支持的參數(shù)。

5.2.1 公用參數(shù):數(shù)據(jù)庫連接

5.2.2 公用參數(shù):import

5.2.3 公用參數(shù):export

5.2.4 公用參數(shù):hive

公用參數(shù)介紹完之后,我們來按照命令介紹命令對應(yīng)的特有參數(shù)。

5.2.5 命令&參數(shù):import

將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)入到 HDFS(包括Hive,HBase)中,如果導(dǎo)入的是 Hive,那么當(dāng) Hive 中沒有對應(yīng)表時,則自動創(chuàng)建。

  • 命令:

如:導(dǎo)入數(shù)據(jù)到 hive 中

$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --hive-import

如:增量導(dǎo)入數(shù)據(jù)到 hive 中,mode=append

append導(dǎo)入:$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --num-mappers 1 --fields-terminated-by "" --target-dir /user/hive/warehouse/staff_hive --check-column id --incremental append --last-value 3

尖叫提示:append 不能與 --hive 等參數(shù)同時使用(Append mode for hive imports is not yet supported. Please remove the parameter --append-mode)

如:增量導(dǎo)入數(shù)據(jù)到 hdfs 中,mode=lastmodified

先在mysql中建表并插入幾條數(shù)據(jù):mysql> create table company.staff_timestamp(id int(4), name varchar(255), sex varchar(255), last_modified timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);mysql> insert into company.staff_timestamp (id, name, sex) values(1, 'AAA', 'female');mysql> insert into company.staff_timestamp (id, name, sex) values(2, 'BBB', 'female');先導(dǎo)入一部分數(shù)據(jù):$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff_timestamp --delete-target-dir --m 1再增量導(dǎo)入一部分數(shù)據(jù):mysql> insert into company.staff_timestamp (id, name, sex) values(3, 'CCC', 'female');$ bin/sqoop import --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff_timestamp --check-column last_modified --incremental lastmodified --last-value "2017-09-28 22:20:38" --m 1 --append

尖叫提示:使用 lastmodified 方式導(dǎo)入數(shù)據(jù),要指定增量數(shù)據(jù)是要 --append(追加)還是要 --merge-key(合并)

尖叫提示:last-value 指定的值是會包含于增量導(dǎo)入的數(shù)據(jù)中。

  • 參數(shù):

5.2.6 命令&參數(shù):export

從 HDFS(包括Hive和HBase)中獎數(shù)據(jù)導(dǎo)出到關(guān)系型數(shù)據(jù)庫中。

  • 命令:

如:

$ bin/sqoop export --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --export-dir /user/staff --input-fields-terminated-by "" --num-mappers 1
  • 參數(shù):

5.2.7 命令&參數(shù):codegen

將關(guān)系型數(shù)據(jù)庫中的表映射為一個 Java 類,在該類中有各列對應(yīng)的各個字段。

  • 命令:

如:

$ bin/sqoop codegen --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --bindir /home/admin/Desktop/staff --class-name Staff --fields-terminated-by ""
  • 參數(shù):

5.2.8 命令&參數(shù):create-hive-table

生成與關(guān)系數(shù)據(jù)庫表結(jié)構(gòu)對應(yīng)的 hive 表結(jié)構(gòu)。

  • 命令:

如:

$ bin/sqoop create-hive-table --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --hive-table hive_staff
  • 參數(shù):

5.2.9 命令&參數(shù):eval

可以快速的使用 SQL 語句對關(guān)系型數(shù)據(jù)庫進行操作,經(jīng)常用于在 import 數(shù)據(jù)之前,了解一下 SQL 語句是否正確,數(shù)據(jù)是否正常,并可以將結(jié)果顯示在控制臺。

  • 命令:

如:

$ bin/sqoop eval --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --query "SELECT * FROM staff"
  • 參數(shù):

5.2.10 命令&參數(shù):import-all-tables

可以將 RDBMS 中的所有表導(dǎo)入到 HDFS 中,每一個表都對應(yīng)一個 HDFS 目錄。

  • 命令:

如:

$ bin/sqoop import-all-tables --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --warehouse-dir /all_tables
  • 參數(shù):

5.2.11 命令&參數(shù):job

用來生成一個 sqoop 任務(wù),生成后不會立即執(zhí)行,需要手動執(zhí)行。

  • 命令:

如:

$ bin/sqoop job --create myjob -- import-all-tables --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456$ bin/sqoop job --list$ bin/sqoop job --exec myjob

尖叫提示:注意import-all-tables 和它左邊的–之間有一個空格。

尖叫提示:如果需要連接 metastore,則 --meta-connect jdbc:hsqldb:hsql://hadoop102:16000/sqoop

  • 參數(shù):

尖叫提示:在執(zhí)行一個 job 時,如果需要手動輸入數(shù)據(jù)庫密碼,可以做如下優(yōu)化:

sqoop.metastore.client.record.passwordtrueIf true, allow saved passwords in the metastore.

5.2.12 命令&參數(shù):list-databases

  • 命令:

如:

$ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 123456
  • 參數(shù):

與公用參數(shù)一樣

5.2.13 命令&參數(shù):list-tables

  • 命令:

如:

$ bin/sqoop list-tables --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456
  • 參數(shù):

與公用參數(shù)一樣

5.2.14 命令&參數(shù):merge

將 HDFS 中不同目錄下面的數(shù)據(jù)合并在一起并放入指定目錄中。

數(shù)據(jù)環(huán)境:

new_staff1 AAA male2 BBB male3 CCC male4 DDD maleold_staff1 AAA female2 CCC female3 BBB female6 DDD female

尖叫提示:上邊數(shù)據(jù)的列之間的分隔符應(yīng)該為,行與行之間的分割符為,如果直接復(fù)制,請檢查之。

  • 命令:

如:

創(chuàng)建JavaBean:

$ bin/sqoop codegen --connect jdbc:mysql://hadoop102:3306/company --username root --password 123456 --table staff --bindir /home/admin/Desktop/staff --class-name Staff --fields-terminated-by ""開始合并:$ bin/sqoop merge --new-data /test/new/ --onto /test/old/ --target-dir /test/merged --jar-file /home/admin/Desktop/staff/Staff.jar --class-name Staff --merge-key id結(jié)果:1 AAAMALE2BBBMALE3CCCMALE4DDDMALE6DDDFEMALE
  • 參數(shù):

5.2.15 命令&參數(shù):metastore

記錄了 Sqoop job 的元數(shù)據(jù)信息,如果不啟動該服務(wù),那么默認 job 元數(shù)據(jù)的存儲目錄為 ~/.sqoop,可在 sqoop-site.xml 中修改。

  • 命令:

如:啟動 sqoop 的 metastore 服務(wù)

$ bin/sqoop metastore
  • 參數(shù):

每日一篇大數(shù)據(jù)優(yōu)秀文章,助力大數(shù)據(jù)開發(fā)者成長!

作者:Lan&Jun 來源:CSDN 原文:https://blog.csdn.net/u012990179/article/details/88378128

總結(jié)

以上是生活随笔為你收集整理的cdh mysql sqoop 驱动_大数据技术之Sqoop学习——原理、安装、使用案例、常用命令...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。