#大資料# #hadoop# #Hadoop#
1 應用資料準備:在mysql中生成測試資料庫。
/*Navicat MySQL Data TransferSource Server : 71.2Source Server Version : 50727Source Host : 192.168.71.2:3306Source Database : testTarget Server Type : MYSQLTarget Server Version : 50727File Encoding : 65001Date: 2019-08-27 18:00:55*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `score`-- ----------------------------DROP TABLE IF EXISTS `score`;CREATE TABLE `score` ( `id` int(10) NOT NULL AUTO_INCREMENT, `stu_id` int(10) NOT NULL, `c_name` varchar(20) DEFAULT NULL, `grade` int(10) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;-- ------------------------------ Records of score-- ----------------------------INSERT INTO `score` VALUES ('1', '901', '計算機', '98');INSERT INTO `score` VALUES ('2', '901', '英語', '80');INSERT INTO `score` VALUES ('3', '902', '計算機', '65');INSERT INTO `score` VALUES ('4', '902', '中文', '88');INSERT INTO `score` VALUES ('5', '903', '中文', '95');INSERT INTO `score` VALUES ('6', '904', '計算機', '70');INSERT INTO `score` VALUES ('7', '904', '英語', '92');INSERT INTO `score` VALUES ('8', '905', '英語', '94');INSERT INTO `score` VALUES ('9', '906', '計算機', '90');INSERT INTO `score` VALUES ('10', '906', '英語', '85');-- ------------------------------ Table structure for `student`-- ----------------------------DROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `id` int(10) NOT NULL, `name` varchar(20) NOT NULL, `sex` varchar(4) DEFAULT NULL, `birth` year(4) DEFAULT NULL, `department` varchar(20) DEFAULT NULL, `address` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ------------------------------ Records of student-- ----------------------------INSERT INTO `student` VALUES ('901', '張老大', '男', '1985', '計算機系', '北京市海淀區');INSERT INTO `student` VALUES ('902', '張老二', '男', '1986', '中文系', '北京市昌平區');INSERT INTO `student` VALUES ('903', '張三', '女', '1990', '中文系', '湖南省永州市');INSERT INTO `student` VALUES ('904', '李四', '男', '1990', '英語系', '遼寧省阜新市');INSERT INTO `student` VALUES ('905', '王五', '女', '1991', '英語系', '福建省廈門市');INSERT INTO `student` VALUES ('906', '王六', '男', '1988', '計算機系', '湖南省衡陽市');
1.1 幫助:bin/sqoop help 【命令】1.2 檢視資料庫數量list-databases bin/sqoop list-databases \
--connect dbURL \
--username root \
--password root
1.3 資料匯入:import –connect dburl --username 使用者名稱 --password 密碼 --table 表名-m 數量:map任務的併發數
target-dir 指定hdfs目錄:預設在/user/使用者名稱/表名
bin/sqoop import --connect jdbc:mysql://172.18.0.5:3306/test --username root --password root --table student -m 1
條件查詢
--columns ‘列1,列2’
--wehere ‘條件’
--query ‘SQL語句’
--target-dir 目標地址
bin/sqoop import --connect jdbc:mysql://172.18.0.5:3306/test --username root --password root --table student -m 1 --columns 'name,department,address' --where 'birth >=1990' --target-dir /test/mysql/student
增量更新:append(追加),lastmodified(更新)
--check-column 列名:增量的依據列(時間或int),lastmodified模式將只能使用date或timestamp型別。
--incremental append/lastmodified:增量更新模式。
--last-value 當前最大值
--append可以將結果追加在已有的目標地址上。
例項:修改兩列,905 修改 名稱為王五2,增加907列。
bin/sqoop import --connect jdbc:mysql://172.18.0.5:3306/test --username root --password root --table student -m 1 --columns 'name,department,address' --where 'birth >=1990' --target-dir /test/mysql/student1 --check-column id --incremental append --last-value 906
bin/sqoop import --connect jdbc:mysql://172.18.0.5:3306/test --username root --password root --table student -m 1 --columns 'name,department,address' --where 'birth >=1990' --target-dir /test/mysql/student3 --check-column last --incremental lastmodified --last-value '2019-08-28 09:00:00'
1.4 資料匯出:export將hdfs資料匯出到mysql資料庫。可以使用insert(不更新已有值,只追加)或update模式(更有已有值)。
1.5 作業:bin/sqoop job –create/show/list/exec自動更新lastvalue
建立:bin/sqoop job –create – 作業命令
例項:最新更新追加記錄。建立命令,執行更新job,更新資料庫,再次更新,查詢可以看到更新的記錄
bin/sqoop job --create student_lastmodified -- import --connect jdbc:mysql://172.18.0.5:3306/test --username root --password root --table student -m 1 --columns 'name,department,address' --where 'birth >=1990' --target-dir /test/mysql/student_lastmodified --check-column last --incremental lastmodified --last-value '2019-08-28 09:00:00' –append
bin/sqoop job --exec student_lastmodified
定時更新
建立任務job-》建立任務job執行指令碼-》建立crontab定時任務。
建立任務:需要指定資料庫密碼為檔案,防止每次都要手動輸入(生成.mysql.password檔案,裡面寫入密碼)
bin/sqoop job --create student_update_test -- import --connect jdbc:mysql://172.18.0.5:3306/test --username root --password-file file:///opt/module/sqoop-1.4.6/.mysql.password --table student -m 1 --columns 'name,department,address' --where 'birth >=1990' --target-dir /test/mysql/student_lastmodified --check-column last --incremental lastmodified --last-value '2019-08-28 09:00:00' --append
#!/bin/bash
/opt/module/sqoop-1.4.6/bin/sqoop job --exec student_update_test> student_update_test.out 2>&1 &