sqoop增量數據導入

sqoop增量導入要求

1.使用Sqoop按字段增長將Mysql中數據抽取到HDFS
2.使用Sqoop按時間增長將Mysql中數據抽取到HDFS

步驟:

1.首先檢查Hadoop相關進程,是否已經啓動。若未啓動,切換到/apps/hadoop/sbin目錄下,啓動Hadoop。

jps  
cd /apps/hadoop/sbin  
./start-all.sh 

2.開啓mysql服務。

sudo service mysql start 

登錄mysql:

mysql -u root -p 

3.在Mysql庫中,創建sqoop數據庫並使用sqoop庫。

create database sqoop;  
use sqoop;  

然後在sqoop庫中爲某電商創建一張買家信息表,名爲buyer,包含buyer_id 、reg_date、reg_ip、buyer_status四個字段,buyer_id 爲主鍵,字符類型均爲varchar(100)。

create table buyer(  
buyer_id int,reg_date varchar(100),reg_ip varchar(100),buyer_status varchar(100) not null,primary key (buyer_id)); 

4.插入5條數據:

insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10001','2008-10-21 15:31:33',' ','1');  
insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10002','2008-08-14 10:53:56',' ','1');  
insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10003','2008-10-16 15:31:33',' ','1');  
insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10004','2008-08-28 09:39:51',' ','1');  
insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10005','2008-09-02 00:01:42',' ','1');  

查看buyer表中內容。

select * from buyer; 

下面介紹兩種Sqoop增量數據導入方法。

5.另開一個窗口,將Mysql中表buyer導入到HDFS的/mysqoop/111中。

sqoop import \  
--connect jdbc:mysql://localhost:3306/sqoop \  
--username root \  
--password strongs \  
--table buyer -m 1 \  
--target-dir /mysqoop/111  

待執行完畢後,查看HDFS上/mysqoop/111中的文件。

hadoop fs -ls /mysqoop/111  
hadoop fs -cat /mysqoop/111/part-m-00000  

6.使用Append模式(字段增長),增量導入
在Mysql窗口,向Mysql的buyer表中新插入三條數據。

insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10006','2008-10-17 17:27:52',' ','1');  
insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10007','2008-09-22 09:33:57',' ','1');  
insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10008','2008-09-23 23:26:33',' ','1');  

使用Sqoop將新增的數據抽取到HDFS上的/mysqoop/111中。

sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root -password strongs --table buyer -m 1 
--incremental append --check-column buyer_id --target-dir /mysqoop/111  

查看HDFS中/mysqoop/111。

hadoop fs -ls /mysqoop/111  
hadoop fs -cat /mysqoop/111/part-m-00001  

由結果可知,part-m-00001中有之前導入的重複值,也就是說Sqoop又執行了一次完整導入,而我們的需求是隻將新增數據抽取出來,我們需加上–last-value參數,修改後如下:

sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root -password strongs --table buyer -m 1 \  
--incremental append  --last-value 10005 --check-column buyer_id --target-dir /mysqoop/11

查看結果

hadoop fs -ls /mysqoop/111  
hadoop fs -cat /mysqoop/111/part-m-00002

8.使用Lastmodified模式(時間增長),增量導入在Mysql窗口中,向buyer表新插入兩行數據。

insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10009','2008-10-22 10:14:16',' ','1');  
insert into buyer (buyer_id,reg_date,reg_ip,buyer_status) values ('10010','2008-10-22 12:32:10',' ','1');  

將reg_date字符類型改爲date類型。

alter table buyer modify reg_date date;  

在另一個窗口,使用sqoop命令,以2008-10-21爲上一次截止時間進行增量導入,輸出目錄爲HDFS中的/mysqoop/222。

sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root --password strongs --table buyer -m 1 \  
--incremental lastmodified --check-column reg_date --last-value '2008-10-21 15:31:33' --target-dir /mysqoop/222  

查看導入後數據。

hadoop fs -ls /mysqoop/222  
hadoop fs -cat /mysqoop/222/part-m-00000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章