sqoop导入导出练习

sqoop简介

虽然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导入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中查看导出结果

为何数据重复的?由于前面先导入一次,而后追加一次,因此有两份数据

相关文章
相关标签/搜索