目錄
一、Sqoop簡介
二、Sqoop原理
三、Sqoop安裝配置
(一)下載Sqoop安裝包并解壓
(二)修改配置文件
(三)拷貝JDBC驅(qū)動
(四)驗證Sqoop
(五)測試Sqoop是否能夠成功連接數(shù)據(jù)庫
四、導入數(shù)據(jù)
(一)RDBMS到HDFS
(二)RDBMS到HBase
(三)RDBMS到Hive
五、導出數(shù)據(jù)
HDFS/Hive到RDBMS
六、Sqoop常用命令及參數(shù)
(一)常用命令列舉
(二)公用參數(shù)
一、Sqoop簡介
????????Sqoop 是一款開源的工具,主要用于在 Hadoop(Hive)與傳統(tǒng)的數(shù)據(jù)庫(mysql、postgresql...)間進行數(shù)據(jù)的傳遞,可以將一個關(guān)系型數(shù)據(jù)庫(例如 : MySQL,Oracle,Postgres 等)中的數(shù)據(jù)導進到 Hadoop 的 HDFS 中,也可以將 HDFS 的數(shù)據(jù)導進到關(guān)系型數(shù)據(jù)庫中。
????????Sqoop 項目開始于 2009 年,最早是作為 Hadoop 的一個第三方模塊存在,后來為了讓使用者能夠快速部署,也為了讓開發(fā)人員能夠更快速的迭代開發(fā),Sqoop 獨立成為一個 Apache 項目。
????????Sqoop2 的最新版本是 1.99.7。請注意,2 與 1 不兼容,且特征不完整,它并不打算用于生產(chǎn)部署。
二、Sqoop原理
將導入或?qū)С雒罘g成 mapreduce 程序來實現(xiàn)。
在翻譯出的 mapreduce 中主要是對 inputformat 和 outputformat 進行定制。
三、Sqoop安裝配置
安裝 Sqoop 的前提是已經(jīng)具備 Java 和 Hadoop 的環(huán)境。
我的環(huán)境:JDK1.8;Hadoop3.1.3
(一)下載Sqoop安裝包并解壓
下載地址:https://archive.apache.org/dist/sqoop/
?
并上傳到虛擬機中。
解壓縮到“/usr/local”目錄下,執(zhí)行如下命令:
[root@bigdata local]# cd /usr/local/uploads/
[root@bigdata uploads]# tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local
[root@bigdata local]# mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz sqoop
?
(二)修改配置文件
1、復制重命名配置文件
Sqoop的配置文件與大多數(shù)大數(shù)據(jù)框架類似,在sqoop根目錄下的conf目錄中。
[root@bigdata sqoop]# cd /usr/local/sqoop/conf
[root@bigdata conf]# cp sqoop-env-template.sh sqoop-env.sh
?
2、修改配置文件
[root@bigdata conf]# vi sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/servers/hadoop
export HADOOP_MAPRED_HOME=/usr/local/servers/hadoop
export HIVE_HOME=/usr/local/hive
export ZOOKEEPER_HOME=/usr/local/servers/zookeeper
export ZOOCFGDIR=/usr/local/servers/zookeeper
export HBASE_HOME=/usr/local/servers/hbase
?
(三)拷貝JDBC驅(qū)動
拷貝jdbc驅(qū)動到sqoop的lib目錄下:
[root@bigdata lib]# cp /usr/local/uploads/mysql-connector-java-5.1.40-bin.jar .
?
(四)驗證Sqoop
我們可以通過某一個command來驗證sqoop配置是否正確:
[root@bigdata sqoop]# bin/sqoop help
?
(五)測試Sqoop是否能夠成功連接數(shù)據(jù)庫
[root@bigdata sqoop]# bin/sqoop list-databases --connect jdbc:mysql://bigdata:3306?useSSL=false --username root --password MYsql123!
連接成功結(jié)果:?
?
若上面命令中不加“?useSSL=false”,則可能會報如下錯誤:
?
可以將“useSSL=false”添加到連接字符串中以禁用SSL連接。?
提示:若測試鏈接時出現(xiàn)如下類似的報錯:
?
原因:集群沒有安裝HCatalog 和Accumulo?
解決方法:修改sqoop安裝目錄bin文件夾下的configure-sqoop文件,找到如下位置并注釋:
?
四、導入數(shù)據(jù)
????????在Sqoop中,“導入”概念指:從非大數(shù)據(jù)集群(RDBMS)向大數(shù)據(jù)集群(HDFS,Hive,HBase)中傳輸數(shù)據(jù),叫做:導入,即使用import關(guān)鍵字。
(一)RDBMS到HDFS
1、確定Mysql服務開啟正常
[root@bigdata zhc]# systemctl start mysqld.service
[root@bigdata zhc]# systemctl status mysqld.service
[root@bigdata zhc]# mysql -u root -p
?
2、在Mysql中新建一張表并插入一些數(shù)據(jù)
mysql> create database company;
mysql> use 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');
?
3、啟動Hadoop的組件
[root@bigdata sqoop]# start-all.sh
?
4、導入數(shù)據(jù)
[root@bigdata sqoop]# bin/sqoop import \
> --connect jdbc:mysql://bigdata:3306/company?useSSL=false \
> --username root \
> --password MYsql123! \
> --table staff \
> --target-dir /user/company \
> --delete-target-dir \
> --num-mappers 1 \
> --fields-terminated-by "\t"
?
查看并驗證結(jié)果:
[root@bigdata servers]# hdfs dfs -ls /user/company/
[root@bigdata servers]# hdfs dfs -cat /user/company/part-m-00000
?
(二)RDBMS到HBase
[root@bigdata sqoop]# bin/sqoop import \
> --connect jdbc:mysql://bigdata:3306/company?useSSL=false \
> --username root \
> --password MYsql123! \
> --table staff \
> --columns "id,name,sex" \
> --column-family "info" \
> --hbase-create-table \
> --hbase-row-key "id" \
> --hbase-table "hbase_company" \
> --num-mappers 1 \
> --split-by id
提示:sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自動創(chuàng)建 HBase 表的功能。
解決方案:手動創(chuàng)建 HBase 表
hbase:001:0> create 'hbase_staff,'info'
在 HBase 中 scan 這張表得到如下內(nèi)容:
hbase:002:0> scan 'hbase_staff'
(三)RDBMS到Hive
[root@bigdata sqoop]# bin/sqoop import \
> --connect jdbc:mysql://bigdata:3306/company?useSSL=false \
> --username root \
> --password MYsql123! \
> --table staff \
> --num-mappers 1 \
> --hive-import \
> --fields-terminated-by "\t" \
> --hive-overwrite \
> --hive-table staff_hive
提示:該過程分為兩步,第一步將數(shù)據(jù)導入到 HDFS,第二步將導入到 HDFS 的數(shù)據(jù)遷移到
Hive 倉庫,第一步默認的臨時目錄是/user/atguigu/表名。
五、導出數(shù)據(jù)
????????在Sqoop中,“導出”概念指:從大數(shù)據(jù)集群(HDFS,HIVE,HBASE)向非大數(shù)據(jù)集群(RDBMS)中傳輸數(shù)據(jù),叫做:導出,即使用export關(guān)鍵字。
HDFS/Hive到RDBMS
1、先登錄Mysql
mysql> use company;
mysql> show tables;
mysql> truncate table staff; # 存在數(shù)據(jù)先把數(shù)據(jù)清空
2、運行腳本
[root@bigdata sqoop]# bin/sqoop export \
> --connect jdbc:mysql://bigdata:3306/company?useSSL=false \
> --username root \
> --password MYsql123! \
> --table staff \
> --num-mappers 1 \
> --export-dir /user/hive/warehouse/staff_hive \
> --input-fields-terminated-by "\t"
六、Sqoop常用命令及參數(shù)
(一)常用命令列舉
序號 | 命令 | 類 | 說明 |
---|---|---|---|
1 | import | ImportTool | 將數(shù)據(jù)導入到集群 |
2 | export | ExportTool | 將集群數(shù)據(jù)導出 |
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 | 導入某個數(shù)據(jù)庫下所有表到HDFS中 |
7 | job | JobTool | 用來生成一個sqoop的任務,生成后,該任務并不執(zhí)行,除非使用命令執(zhí)行該任務。 |
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版本信息 |
(二)公用參數(shù)
1、公用參數(shù):數(shù)據(jù)庫連接
序號 | 參數(shù) | 說明 |
---|---|---|
1 | –connect | 連接關(guān)系型數(shù)據(jù)庫的URL |
2 | –connection-manager | 指定要使用的連接管理類 |
3 | –driver | Hadoop根目錄 |
4 | –help | 打印幫助信息 |
5 | –password | 連接數(shù)據(jù)庫的密碼 |
6 | –username | 連接數(shù)據(jù)庫的用戶名 |
7 | –verbose | 在控制臺打印出詳細信息 |
2、公用參數(shù):import
序號 | 參數(shù) | 說明 |
---|---|---|
1 | –enclosed-by | 給字段值前加上指定的字符 |
2 | –escaped-by | 對字段中的雙引號加轉(zhuǎn)義符 |
3 | –fields-terminated-by | 設定每個字段是以什么符號作為結(jié)束,默認為逗號 |
4 | –lines-terminated-by | 設定每行記錄之間的分隔符,默認是\n |
5 | –mysql-delimiters | Mysql默認的分隔符設置,字段之間以逗號分隔,行之間以\n分隔,默認轉(zhuǎn)義符是\,字段值以單引號包裹。 |
6 | –optionally-enclosed-by | 給帶有雙引號或單引號的字段值前后加上指定字符。 |
3、公用參數(shù):export文章來源:http://www.zghlxwxcb.cn/news/detail-811940.html
序號 | 參數(shù) | 說明 |
---|---|---|
1 | –input-enclosed-by | 對字段值前后加上指定字符 |
2 | –input-escaped-by | 對含有轉(zhuǎn)移符的字段做轉(zhuǎn)義處理 |
3 | –input-fields-terminated-by | 字段之間的分隔符 |
4 | –input-lines-terminated-by | 行之間的分隔符 |
5 | –mysql-delimiters | Mysql默認的分隔符設置,字段之間以逗號分隔,行之間以\n分隔,默認轉(zhuǎn)義符是\,字段值以單引號包裹。 |
4、公用參數(shù):hive文章來源地址http://www.zghlxwxcb.cn/news/detail-811940.html
序號 | 參數(shù) | 說明 |
---|---|---|
1 | –hive-delims-replacement | 用自定義的字符串替換掉數(shù)據(jù)中的\r\n和\013 \010等字符 |
2 | –hive-drop-import-delims | 在導入數(shù)據(jù)到hive時,去掉數(shù)據(jù)中的\r\n\013\010這樣的字符 |
3 | –map-column-hive | 生成hive表時,可以更改生成字段的數(shù)據(jù)類型 |
4 | –hive-partition-key | 創(chuàng)建分區(qū),后面直接跟分區(qū)名,分區(qū)字段的默認類型為string |
5 | –hive-partition-value | 導入數(shù)據(jù)時,指定某個分區(qū)的值 |
6 | –hive-home | hive的安裝目錄,可以通過該參數(shù)覆蓋之前默認配置的目錄 |
7 | –hive-import | 將數(shù)據(jù)從關(guān)系數(shù)據(jù)庫中導入到hive表中 |
8 | –hive-overwrite | 覆蓋掉在hive表中已經(jīng)存在的數(shù)據(jù) |
9 | –create-hive-table | 默認是false,即,如果目標表已經(jīng)存在了,那么創(chuàng)建任務失敗。 |
10 | –hive-table | 后面接要創(chuàng)建的hive表,默認使用MySQL的表名 |
11 | –table | 指定關(guān)系數(shù)據(jù)庫的表名 |
到了這里,關(guān)于【數(shù)據(jù)采集與預處理】數(shù)據(jù)傳輸工具Sqoop的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!