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