網站建設與管理電子教程廣告公司是做什么的
sqoop安裝教程及sqoop操作
文章目錄
- sqoop安裝教程及sqoop操作
- 上傳安裝包
- 解壓并更名
- 添加jar包
- 修改配置文件
- 添加sqoop環(huán)境變量
- 啟動
- sqoop操作
- 查看指定mysql服務器數據庫中的表
- 在hive中創(chuàng)建一個teacher表跟mysql的mysql50庫中的teacher結構相同
- 將mysql中mysql50庫中的sc數據導出到hdfs指定的文件目錄中
- sqoop -m 參數
- 帶條件過濾
- 帶條件過濾,指定查詢列
- query使用
- 將mysql50中sc表導入到hive bigdata庫中
- 重寫,原數據會被覆蓋
- 增量導入
上傳安裝包
這里兩個安裝包 sqoop-1.4.7 bin_hadoop-2.6.0.tar.gz和sqoop-1.4.7.tar.gz
因為hadoop版本為3.1.3 所以sqoop的版本太低,需要自行配置
解壓并更名
# 解壓
[root@hadoop install]# tar -zxf sqoop-1.4.7.tar.gz -C ../soft/
# 切換目錄
[root@hadoop install]# cd ../soft/
# 更名
[root@hadoop soft]# mv sqoop-1.4.7/ sqoop147
添加jar包
切換目錄到 /opt/soft/sqoop147/lib/
添加avro-1.8.1.jar
# 將hive312/lib下的兩個jar包拷貝過來
[root@hadoop lib]# cp /opt/soft/hive312/lib/hive-common-3.1.2.jar ./
[root@hadoop lib]# cp /opt/soft/hive312/lib/mysql-connector-java-8.0.29.jar ./
將sqoop-1.4.7.jar 拷貝到 /opt/soft/sqoop147/
修改配置文件
切換到cd /opt/soft/sqoop147/conf
# 將配置文件復制并更名
[root@hadoop conf]# cp sqoop-env-template.sh sqoop-env.sh
# 編輯 sqoop-env.sh
[root@hadoop conf]# vim ./sqoop-env.sh 22 #Set path to where bin/hadoop is available23 export HADOOP_COMMON_HOME=/opt/soft/hadoop31324 25 #Set path to where hadoop-*-core.jar is available26 export HADOOP_MAPRED_HOME=/opt/soft/hadoop31327 28 #set the path to where bin/hbase is available29 #export HBASE_HOME=30 31 #Set the path to where bin/hive is available32 export HIVE_HOME=/opt/soft/hive31233 export HIVE_CONF_DIR=/opt/soft/hive312/conf34 35 #Set the path for where zookeper config dir is36 export ZOOCFGDIR=/opt/soft/zk345/conf
添加sqoop環(huán)境變量
# 編輯/etc/profile
[root@hadoop conf]# vim /etc/profile
# SQOOP_HOME
export SQOOP_HOME=/opt/soft/sqoop147
export PATH=$PATH:$SQOOP_HOME/bin
# 刷新文件
[root@hadoop conf]# source /etc/profile
啟動
[root@hadoop conf]# sqoop version
sqoop操作
\ 符號為連接符
查看指定mysql服務器數據庫中的表
[root@hadoop ~]# sqoop list-databases --connect jdbc:mysql://192.168.95.130:3306 --username root --password root
在hive中創(chuàng)建一個teacher表跟mysql的mysql50庫中的teacher結構相同
[root@hadoop ~]# sqoop create-hive-table --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --table teacher --hive-table teacher
將mysql中mysql50庫中的sc數據導出到hdfs指定的文件目錄中
[root@hadoop ~]# sqoop import --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --table sc --target-dir /tmp/mysql50/sc --fields-terminated-by '\t' -m 1
sqoop -m 參數
sqoop并行化是啟多個map task實現的,-m(或–num-mappers)參數指定map task數,默認是四個。當指定為1時,可以不用設置split-by參數,不指定num-mappers時,默認為4,當不指定或者num-mappers大于1時,需要指定split-by參數。并行度不是設置的越大越好,map task的啟動和銷毀都會消耗資源,而且過多的數據庫連接對數據庫本身也會造成壓力。在并行操作里,首先要解決輸入數據是以什么方式負債均衡到多個map的,即怎么保證每個map處理的數據量大致相同且數據不重復。–split-by指定了split column,在執(zhí)行并行操作時(多個map task),sqoop需要知道以什么列split數據,其思想是:
1、先查出split column的最小值和最大值2、然后根據map task數對(max-min)之間的數據進行均勻的范圍切分
帶條件過濾
[root@hadoop ~]# sqoop import --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --table sc --where "SID='01'" --target-dir /tmp/mysql50/sid01 -m 1
帶條件過濾,指定查詢列
[root@hadoop ~]# sqoop import --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --table sc --columns "CID,score" --where "SID='01'" --target-dir /tmp/mysql50/sid01column -m 1
query使用
[root@hadoop ~]# sqoop import --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --target-dir /tmp/mysql50/scquery --query 'select * from sc where $CONDITIONS and CID="02" and score>80 ' --fields-terminated-by '\t' -m 1
注意:
如果使用–query這個命令的時候,需要注意的是where后面的參數, AND $ CONDITIONS 這個參數必須加上而且存在單引號與雙引號的區(qū)別,如果–query后面使用的是雙引號,那么需要在$CONDITIONS前加上 \即 \ $ CONDITIONS
如果設置map數量為1個時即-m 1,不用加上–split-by ${tablename.column},否則需要加上
將mysql50中sc表導入到hive bigdata庫中
[root@hadoop ~]# sqoop import --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --table sc --hive-import --hive-database bigdata -m 1
重寫,原數據會被覆蓋
[root@hadoop~]# sqoop import --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --table sc --hive-import --hive-overwrite --hive-database bigdata -m 1
增量導入
[root@hadoop ~]# sqoop import --connect jdbc:mysql://192.168.95.130:3306/mysql50 --username root --password root --table sc --hive-import --incremental append --hive-database bigdata -m 1