1 简介:
a) SQOOP是用于对数据进行导入导出的。
(1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中
(2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中
b) 官网地址 http://sqoop.apache.org/
2 安装:
// 解压和重命名
[root@master local]# tar -zxvf sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz
[root@master local]# mv sqoop-1.4.3.bin__hadoop-1.0.0 sqoop
// 设置环境变量
[root@master bin]# vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
export ZK_HOME=/usr/local/zk
export SQOOP_HOME=/usr/local/sqoop
export PATH=.:$SQOOP_HOME/bin:$ZK_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
[root@master bin]# source /etc/profile
修改 sqoop/conf/sqoop-env.sh配置文件:
将 export HADOOP_COMMON_HOME=你的hadoop安装根目录
export HADOOP_MAPRED_HOME=你的hadoop安装根目录
export HIVE_HOME=你的hive安装目录
入下:
export HADOOP_COMMON_HOME=/opt/modules/hadoop-2.5.0-cdh5.3.6
export HADOOP_MAPRED_HOME=/opt/modules/hive-0.13.1-cdh5.3.6
export HIVE_HOME=/opt/modules/hive-0.13.1-cdh5.3.6
export ZOOCFGDIR=/opt/modules/zookeeper-3.4.5-cdh5.3.6/conf
// 查看sqoop命令帮助
[root@master local]# sqoop help
Warning: $HADOOP_HOME is deprecated.
usage: sqoop COMMAND [ARGS]
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table // 将hdfs数据导出到数据库中
help List available commands
import Import a table from a database to HDFS // 将数据库中表的数据导入到hdfs中
import-all-tables Import tables from a database to HDFS
job Work with saved jobs //
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information
See 'sqoop help COMMAND' for information on a specific command.
[root@master local]#
3 把数据从mysql导入到hdfs(默认是/user/<username>)中:
// 给sqoop拷贝mysql-connector-java-5.1.10.jar
[root@master lib]# cp mysql-connector-java-5.1.10.jar /usr/local/sqoop/lib
// 将库hive_cr00 表TBLS 数据导出到hdfs中
[root@master local]#sqoop import --connect jdbc:mysql://master:3306/hive_cr00 --username root --password admin --table TBLS --fields-terminated-by '\t' --null-string '**' -m 1
解释如下:
sqoop import --connect jdbc:mysql://hadoop0:3306/hive(数据库名)
--username root --password admin --table TBLS(连接的表名)
--fields-terminated-by '\t'(导入hdfs后数据用/t间隔)
--null-string '**' 如果string为null则导出到hdfs后用**表示
-m 1 默认导出用4个map任务执行 这里指定只用一个map任务,节省资源
--append 表示追加写入hdfs中
--hive-import 表示导入到hive中
导出后的样子为:
针对数据表中数据增加插入hdfs中写法:
上述命令表示全量导入,即使使用append字段,也仅仅是在/user/<username>/下将再次导入的全量数据在增加一个hdfs文件来存放而已,
现在仅仅想将数据表中增加的字段导入到hdfs中,即再次产生的hdfs文件内仅仅是数据表新增的内容,而非表中所有数据:
参考链接: 官网 http://sqoop.apache.org/docs/1.4.3/SqoopUserGuide.html#_incremental_imports
sqoop import --connect jdbc:mysql://master:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\t'
--null-string '**' -m 1 --append
--check-column 'TBL_ID' 追加插入时,需要检查的列TBL_ID
--incremental append 在追加的时候 执行检验
--last-value 6 上次追加后 TBL_ID的最后一个值为6
[root@master bin]# sqoop import --connect jdbc:mysql://master:3306/hive_cr00 --username root --password admin --table TBLS --fields-terminated-by '\t' --null-string '**' -m 1 --append --check-column 'TBL_ID' --incremental append --last-value 15
结果:
14/12/29 01:28:37 INFO tool.ImportTool: No new rows detected since last import.
4 把数据从hdfs导出到mysql中:
在mysql test库中创建表sqoontable,字段 id(varchar(60)),name(varchar(60))
在hdfs中准备数据如下:
[root@master data]# hadoop fs -text /ids/sqoopdata
Warning: $HADOOP_HOME is deprecated.
hello;you
hello;me
hello;30
执行命令,导出是可以重复执行的,会不断向数据表插入字段
sqoop export --connect jdbc:mysql://master:3306/test --username root --password admin --table sqoontable --fields-terminated-by ';' --export-dir '/ids'
解释如下:
sqoop export --connect jdbc:mysql://master:3306/test --username root --password admin 连接数据库 test
--table sqoontable 要将hdfs数据导入到表名称 sqoontable
--fields-terminated-by ';'
--export-dir '/ids' hdfs数据来源在文件夹 /ids下 也可以具体指定 eg: --export-dir '/ids/sqoopdata'
5 设置为作业,运行作业
sqoop job --create myjob4 -- export --connect jdbc:mysql://master:3306/test --username root --password admin --table sqoontable --fields-terminated-by ';' --export-dir '/ids/sqoopdata'
sqoop job --exec myjob4 在执行的时候,跳出 password: 此时输入mysql链接密码即可执行
如果要去掉密码,请看官网 http://sqoop.apache.org/docs/1.4.3/SqoopUserGuide.html#_saved_jobs_and_passwords
主要在 导入/导出命令上增加 --create job名称 -- 即可
查看作业列表:
[root@master bin]# sqoop job --list
删除作业:
[root@master bin]# sqoop job --delete myjob(作业名称)
6 导入导出和事务
导入导出的事务是以Mapper任务为单位,启动一个mapper任务,就有一个事务,启动4个mapper任务,则有四个事务。