虽然hadoop具备海量、高可用等特性,但要想往里面添加数据仍是得先造成文件,再上传,过程比较麻烦。而对于咱们但愿将原有关系型数据库(mysql,Oracle)里面的数据导入导出到HDFS则须要通过查询、生成格式文件、上传等三个步骤,不免写很多代码,敲很多命令,使用不是太方便。为了提升工做效率,sqoop诞生了,它提供了简单的功能,能够一键导入导出到hdfs。mysql
下载地址:http://www.apache.org/dyn/closer.lua/sqoop/sql
请选择与本身安装hadoop匹配的版本,我本身的hadoop版本是2.7.1,sqoop版本是1.4.4数据库
配置环境:apache
配置JAVA_HOME环境变量app
配置HADOOP_HOME环境变量oop
####################### 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的安装目录下lua
注意mysql的jar包也须要与安装服务mysql作匹配,好比我安装的5.x版本,那么就用5.x.jar包spa
配置SQOOP_HOMEorm
####################### sqoop ############################# export SQOOP_HOME=/home/hadoop/proc/sqoop-1.4.4 PATH=$PATH:$SQOOP_HOME/bin export PATH
在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参数
执行命令:
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中查看导出结果
为何数据重复的?由于前面先导入一次,而后追加一次,因此有两份数据