四、Sqoop的簡單使用案例
一、導入數據
大致過程:
導入數據:import
Sqoop import
連接MySQL
用戶名
密碼
導入的那張表(MR-輸入)
導入到HDFS的目錄(MR-輸出)
判斷目錄是否存在,如果存在就刪除~
設置Map的數量、設置數據導入到文件當中的格式-比如:分隔符
在Sqoop中,“導入”概念指:從非大數據集群(RDBMS)向大數據集群(HDFS,HIVE,HBASE)中傳輸數據,叫做:導入,即使用import關鍵字。
二、RDBMS到HDFS
1) 確定Mysql服務開啟正常
2) 這個可以先略-Mysql中命令行創建表:
在Mysql中新建一張表並插入一些數據
$ mysql -uroot -p000000 mysql> 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'); |
3) 導入數據
先新建一個名為test的數據庫:
再新建一張表student:
注意:要啟動集群:因為要上傳到HDFS
(1)全部導入(整張表導入)
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --table student \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" |
參數無先后,這是個邏輯上的順序~
查看HDFS文件:
查看上傳上去的student文件夾中的內容:
[root@bigdata111 sqoop-1.4.6]# hdfs dfs -cat /user/MYSQLTOHDFS/student/*
(2)查詢導入
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select name,sex from student where id <=6 and $CONDITIONS;' |
尖叫提示:must contain '$CONDITIONS' in WHERE clause.單引號的話$就不用轉義符號\
注:CONDITIONS 翻譯‘條件’
尖叫提示:如果query后使用的是雙引號,則$CONDITIONS前必須加轉義符\,防止shell識別為自己的變量。
(3)導入指定列
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --columns id,name \ --table student |
尖叫提示:columns中如果涉及到多列,用逗號分隔,分隔時不要添加空格
解釋輸入的命令行:
sqoop import \
#sqoop 導入 換行
--connect jdbc:mysql://bigdata111:3306/test \
#連接數據庫用jdbc連接:mysql數據庫://數據庫所在的主機名:MySQL指定端口3306/數據庫名 換行
--username root \
#用戶名 換行
--password 000000 \
#密碼 換行
--target-dir /user/MYSQLTOHDFS/student \
#指定上傳到到HDFS上的目錄 換行(target-目標)
--delete-target-dir \
#如果存在就刪除這個目錄 換行
--num-mappers 1 \
#map的數量 換行
--fields-terminated-by "\t" \
#每列的分隔符 換行
--columns id,name \
#選取的列的名字 換行
--table student
#選擇的數據庫名
(4)使用sqoop關鍵字篩選查詢導入數據
$ bin/sqoop import \ --connect jdbc:mysql://bigdata111:3306/test \ --username root \ --password 000000 \ --target-dir /user/MYSQLTOHDFS/student \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table student \ --where "id=2" |
尖叫提示:在Sqoop中可以使用sqoop import -D property.name=property.value這樣的方式加入執行任務的參數,多個參數用空格隔開。