离线采集工具
Sqoop
1. 环境配置
- 解压安装包
- 配置环境变量(记得source)
- 添加MySQL驱动包到sqoop文件夹下的lib
cp mysql-connector-java-5.1.10.jar /sqoop-install-path/lib
- 重命名文件并配置文件
mv sqoop-env-template.sh sqoop-env.sh
#添加环境变量
export HADOOP_COMMON_HOME=/usr/local/soft/hadoop-2.6.0
export HBASE_HOME=/usr/local/soft/hbase-1.4.6(HBASE使用报错)
export HIVE_HOME=/usr/local/soft/hive-1.2.1
- 修改配置…/bin/configure-sqoop (可不做)
#if [ ! -d "${HBASE_HOME}" ]; then
# echo "Error: $HBASE_HOME does not exist!"
# echo 'Please set $HBASE_HOME to the root of your HBase installation.'
# exit 1
- 测试
#查看sqoop的版本号
sqoop version
#连接测试MySQL
sqoop list-databases -connect jdbc:mysql://master:3306/ -username root -password 123456
2. Sqoop的使用
我们需要指定文件,使用命令导入文件然后采集数据
sqoop --options-file 文件名
例:
将MySQL中的数据写入到hdfs中 文件名:mysqltoHdfs.conf
import
--connect
jdbc:mysql://master:3306/tjf #连结以及数据库名(注意每一行后不要有空格和换行)
--username
root
--password
123456
--table
student
--m
2
--split-by #会以此为基准分割数据集
age
--target-dir
/sqoop/data/student #hdfs中文件位置
--fields-terminated-by
','
将MySQL中数据写入到hive中 文件名:mysqlToHive.conf
import
--connect
jdbc:mysql://master:3306/tjf
--username
root
--password
123456
--table
score
--fields-terminated-by
"\t"
--lines-terminated-by
"\n"
--m
2
--split-by
student_id
--hive-import
--target-dir
/data/score
--hive-table
score
hdfs文件写入到MySQL中 文件名: hdfsToMySQLconf
export
--connect
jdbc:mysql://master:3306/tjf?useUnicode=true&characterEncoding=UTF-8
--username
root
--password
123456
-m
1
--columns
id,name,age,gender,clazz
--export-dir
/sqoop/data/student/
--fields-terminated-by
','
--table
student
增量数据
当离线处理完数据时,发现数据更改对于数据的再一次获取或者更换
以学生表为例,创建带有时间戳的数据
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` char(5) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`gender` char(2) DEFAULT NULL,
`clazz` char(4) DEFAULT NULL,
`last_mod` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1500101002 DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES ('1500100001', '施笑槐', '22', '女', '文科六班', '2019-03-16 14:47:59');
INSERT INTO `student` VALUES ('1500100002', '吕金鹏', '24', '男', '文科六班', '2019-03-16 14:47:59');
<