30離線系統輔助工具sqoop——好程序

1、sqoop是什麼
Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases.(就是一個工具而已,沒有集羣的概念,是一個單機版的)

本質:
將sqoop的語句轉換成mapreduce任務(maptask) 
特點:
優點:跨平臺進行數據整合
缺點:不是很靈活

mysql<-->hdfs
mysql--->hive
mysql--->hbase

從mysql讀,寫到集羣裏面去

關鍵字:
import:從mysql等關係型數據庫(jdbc)導數據到hadoop
export:從hadoop將數據導出到mysql等關係型數據庫

sqoop的安裝
1、解壓到指定目錄
2、配置sqoop的環境變量,然後souce一下


3、編輯一下運行文件
vi sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/hadoop-2.7.1
export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.7.1

4、將mysql的驅動包上傳到sqoop的安裝目錄下的lib目錄中

5、用sqoop help 查看幫助

sqoop與mysql進行關聯

 sqoop與hive庫連接

=======

 

sqoop是不允許換行的,如果換行,需要一個反斜槓\

案例1:將userdb庫的emp表的數據導入到hdfs上(表上不存在主鍵時)  -m 1是指定切片數

sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp -m 1

沒有主鍵的需要直接指定id,用id來進行分片

sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/1

案例:需要導入的不是所有數據,而是帶條件導入

sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/3 \
--where 'id > 1203'

帶條件導入部分字段--columns

sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/4 \
--where 'id > 1202' \
--columns 'id,name,salary'

導入一個查詢結果集(導一個查詢語句)後面要加and $CONDITIONS 不然報錯,是因爲先要確定表結構

sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--split-by id \
--target-dir /gp1923/sqoopdata/5 \
--query 'select id,name,salary from emp where id < 1203 and $CONDITIONS'

數據導入到hive中(要找到hive的參數--hive-import ,指定hive的表--create-hive-table)但是表一個要

sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--hive-import \
--create-hive-table \
--hive-table gp1923.ods_emp


增量導入數據:

sqoop import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/7 \
--incremental append \
--check-column id \
--last-value 0 

創建成一個job 

sqoop job --create gp1923_emp -- \
import --connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table emp \
--split-by id \
--target-dir /gp1923/sqoopdata/7 \
--incremental append \
--check-column id \
--last-value 0 

 

 


導出數據到mysql

sqoop export \
--connect jdbc:mysql://hadoop0001:3306/userdb \
--username root \
--password 123456 \
--table employee \
--export-dir /gp1923/sqoopdata/7


job

sqoop job --create jobname
          --list
          --show jobname
          --exec jobname
          
mysql表的編碼格式爲utf8
hdfs文件中的列的類型和mysql表中的字段列的類型儘量一致
導出暫時不能有hive或者hbase導出到mysql中
--export-dir是一個hdfs的目錄時,它不識別_SUCCESS文件
--query 導入時要注意需要添加一個$CONDITIONS    。  

 

數據導入,數據導出,數據清洗,然後纔到數據BI部門,專門寫SQL
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章