首頁>技術>

#大資料# #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 &

13
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Flutter Mac初體驗,跨平臺開發應用很簡單