sqoop导入导出练习

sqoop简介

虽然hadoop具有海量、高可用等特性,但要想往里面添加数据还是得先形成文件,再上传,过程比较麻烦。而对于我们希望将原有关系型数据库(mysql,Oracle)里面的数据导入导出到HDFS则需要经过查询、生成格式文件、上传等三个步骤,难免写不少代码,敲不少命令,使用不是太方便。为了提高工作效率,sqoop诞生了,它提供了简单的功能,可以一键导入导出到hdfs。

下载与安装

下载地址:http://www.apache.org/dyn/closer.lua/sqoop/

请选择与自己安装hadoop匹配的版本,我自己的hadoop版本是2.7.1,sqoop版本是1.4.4

配置环境

配置JAVA_HOME环境变量

配置HADOOP_HOME环境变量

####################### jdk ###############################
export JAVA_HOME=/home/jionsvolk/proc/jdk1.8.0_65
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export CLASSPATH######################## hadoop ###########################
HADOOP_HOME=/home/hadoop/proc/hadoop-2.7.1
#HADOOP_HOME=/home/hadoop/proc/hadoop_cluster
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME PATH

将mysql的驱动放到sqoop的安装目录下

注意mysql的jar包也需要与安装服务mysql做匹配,比如我安装的5.x版本,那么就用5.x.jar包

配置SQOOP_HOME

####################### sqoop #############################
export SQOOP_HOME=/home/hadoop/proc/sqoop-1.4.4
PATH=$PATH:$SQOOP_HOME/bin
export PATH

 

从MySQL导入HDFS

在MySQL中创建表并插入数据

需要注意,表一定要有主键,以为hadoop处理数据需要指定一个key,并做排序

在Hive中创建表

重点来了--使用sqoop命令执行导入操作

sqoop import --connect jdbc:mysql://192.168.245.150:3306/test --username root --password 12340101  --table acct --target-dir '/user/hive/warehouse/acct' --fields-terminated-by '|' -m 1

import:导入

--connect:mysql的连接串

--username:数据库用户名

--password:数据库密码

--table:数据库表名

--target-dir:hdfs存放表的目录(不包含表名)

--fields-ternimated-by:文件分隔符

-m:mr程序跑的时候map的数量(之前写mr程序时,map数是由逻辑切片决定的),这里是直接指定的。如果-m参数被设置为大于1,则需要配合参数--split-by tbl_name.column_name使用或者表必须定义主键列,否则会报一个错:

ERROR tool.ImportTool: Error during import: No primary key could be found for table acct. Please specify one with --split-by or perform a sequential import with '-m 1'

执行命令输出结果:

可以看到最终执行的还是mr程序

验证hadoop里面是否已经有文件

如果要想追加数据到acct表中,则只需要在上面的命令中添加--append参数

如果想要查看更多import命令参数可以使用

sqoop import -help

如:

--where 可以指定查询条件

--query 可以写一个查询语句,不再指定--table参数

从HDFS导入MySQL

执行命令:

sqoop export --connect jdbc:mysql://192.168.245.150:3306/test --username root --password 12340101 --export-dir '/user/hive/warehouse/acct' --table acct_new -m 1 --fields-terminated-by '|'

export:导出

--export-dir:指定hdfs被导出的目录

其他命令选项使用 sqoop export -help查看

查看执行命令的结果:

在MySQL中查看导出结果

为什么数据重复的?因为前面先导入一次,然后追加一次,所以有两份数据

猜你喜欢

转载自my.oschina.net/u/3049601/blog/1817841