Sqoop
在实际开发中,有时候需要将HDFS或Hive上的数据导出到传统关系型数据库中(如MySQL、Oracle等),或者将传统关系型数据库中的数据导入到HDFS或Hive上,如果通过人工手动进行数据迁移的话,就会显得非常麻烦。为此,可使用Apache提供的Sqoop工具进行数据迁移。
安装sqoop
上传 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
先开启hadoop
start-all.sh
解压到server
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /export/servers/
改个名字
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop-1.4.6
进入conf文件夹,修改这个文件,使其生效
[root@hd1 conf]# mv sqoop-env-template.sh sqoop-env.sh
vim 编辑 sqoop-env.sh
/export/servers/hadoop-2.7.5 //hadoop安装路径
/export/servers/apache-hive-1.2.1-bin //hive安装路径
配置sqoop环境变量
vim 打开 /etc/profile 最后添加
#SQOOP_HOME SETTING
export SQOOP_HOME=/export/servers/sqoop-1.4.6
export PATH=$PATH:$SQOOP_HOME/bin
刷新配置文件
source /etc/profile
sqoop也要连接mysql ,
进入sqoop的lib目录,在这个目录下
rz上传这个文件 mysql-connector-java-5.1.32.jar
安装配置已完成。
使用这个命令验证是否能够连接mysql。
sqoop list-databases -connect jdbc:mysql://localhost:3306/ --username cxr --password cxr
实验案例:
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`deg` varchar(100) DEFAULT NULL,
`salary` int(11) DEFAULT NULL,
`dept` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
);
往表内添加一些数据
INSERT INTO `emp` VALUES ('1201', 'gopal', 'manager', '50000', 'TP');
INSERT INTO `emp` VALUES ('1202', 'manisha', 'Proof reader', '50000', 'TP');
INSERT INTO `emp` VALUES ('1203', 'khalil', 'php dev', '30000', 'AC');
INSERT INTO `emp` VALUES ('1204', 'prasanth', 'php dev', '30000', 'AC');
INSERT INTO `emp` VALUES ('1205', 'kranthi', 'admin', '20000', 'TP');
利用sqoop将这张表,导入hadoop。
sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username cxr \
--password cxr \
--target-dir /sqoopresult \
--table emp \
--num-mappers 1
验证
打开hadoop,
将数据下载下来
用notepad++打开这个文件,文件内存储的就是用逗号隔开的表数据