大数据入门第十二天——sqoop入门
2018-02-27 13:59
344 查看
一、概述
1.sqoop是什么从其官网:http://sqoop.apache.org/
Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases
中文来说,就是:
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库
简而言之,sqoop是一个数据迁移工具!
2.主要原理
将导入或导出命令翻译成mapreduce程序来实现
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制
二、安装与配置
1.准备本地具备java与hadoop环境,下载sqoop,下载地址:http://archive.apache.org/dist/sqoop/1.4.6/
// 这里的Alpha表示的是内测版
将下载的sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz上传到服务器
2.解压
[hadoop@mini1 ~]$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
// 位置可以按照自己的习惯进行定义
[hadoop@mini1 ~]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop
3.修改配置文件
[hadoop@mini1 ~]$ cd sqoop/ [hadoop@mini1 sqoop]$ cd conf/ [hadoop@mini1 conf]$ mv sqoop-env-template.sh sqoop-env.sh
通过which/whereis 定位一下hadoop等目录
打开 sqoop-env.sh,修改以下几项(打开注释,添加相关值):
export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.4/ export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.4/ export HIVE_HOME=/home/hadoop/apps/hive-1.2.1
4.加入Mysql的jdbc驱动包
由于我们是向MySQL导数据,所以需要的是对应的驱动包到Lib目录(这里就直接从hive里面拿了)
[hadoop@mini1 sqoop]$ cp ~/apps/hive-1.2.1/lib/mysql-connector-java-5.1.42.jar ./lib/
5.验证启动
[hadoop@mini1 sqoop]$ bin/sqoop
// 如果配置了环境变量,将可以直接通过sqoop启动
6.查看帮助
[hadoop@mini1 sqoop]$ bin/sqoop help
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 help List available commands import Import a table from a database to HDFS import-all-tables Import tables from a database to HDFS import-mainframe Import datasets from a mainframe server 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.
三、sqoop数据导入
“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)1.数据库导入HDFS
1.语法
$ sqoop import (generic-args) (import-args)
// 完整参数,参考:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_literal_sqoop_import_literal
2.示例
bin/sqoop import \ --connect jdbc:mysql://mini1:3306/test \ --username root \ --password Zcc170821# \ --table girl \ --m 1
-m,--num-mappers <n> Use n map tasks to import in parallel,其他完整参数,参考文档
未指定--target-dir /user/sqoop/test1 则默认为/user/hadoop/表名,这里可以进行在HDFS上的查看:
[hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl/part-m-00000
2.导入关系表到Hive
其实基本上是从数据库到hdfs,再Load到hive的表,不过这里可以一步到位了
bin/sqoop import \ --connect jdbc:mysql://mini1:3306/test \ --username root \ --password Zcc170821# \ --table girl \ --target-dir /user/hadoop/girl2 \ --hive-import \ --m 1
3.导入数据子集
有时候只想导入数据表中的一部分数据,可以通过where来进行过滤筛选:
bin/sqoop import \ --connect jdbc:mysql://mini1:3306/test \ --username root \ --password Zcc170821# \ --where "id > 5" \ --target-dir /user/hadoop/girl3 \ --table girl \ --m 1
当然,如果单纯where无法满足,可以使用自定义的query语句来筛选:——注意只要写了where则后面的 and \$CONDITIONS是死的,必须这么写!
bin/sqoop import \ --connect jdbc:mysql://mini1:3306/test \ --username root \ --password Zcc170821# \ --query "select * from girl where name='11' and id>6 and \$CONDITIONS" \ --target-dir /user/hadoop/girl3 \ --table girl \ --m 1
也可以使用split by来指定切片字段,这样就结合--m参数分配了
--split-by id \ --m 1
或者指定字段的分隔符,这样到HDFS就是这个分割符了。这样以后建表从hive映射就使用这个分隔符了:
--fields-terminated-by <char>
4.增量导入
增量导入( Incremental Imports)是仅导入新添加的表中的行的技术。
它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入
bin/sqoop import \ --connect jdbc:mysql://mini1:3306/test \ --username root \ --password Zcc170821# \ --table girl --m 1 \ --target-dir /user/hadoop/girl4 \ --incremental append \ --check-column id \ --last-value 12
// 如果不想一直因为已经存在target-dir而新建,可以使用参数delete-target-dir,这样就会自动删除已经存在的目录了!请选择性使用
这样,targer-dir里面就是新增的数据了:
[hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl4/part-m-00000 13,22,aa 14,23,bb
四、sqoop数据导出
1.从HDFS中导出将数据从HDFS导出到RDBMS数据库
导出前,目标表必须存在于目标数据库中。
默认操作是从将文件中的数据使用INSERT语句插入到表中
更新模式下,是生成UPDATE语句更新表数据
1.手动创建目标表
两种方法复制表结构: 1.create table B as select * from A where 1=2; 或者: 2.create table B like A;
这里就复制上面的girl的表结构了
2.执行导出命令
bin/sqoop export \ --connect jdbc:mysql://mini1:3306/test \ --username root \ --password Zcc170821# \ --table girl2 \ --export-dir /user/hadoop/girl/
如果文件不是默认的,分隔符,则添加指定参数:
--fields-terminated-by '\t'
2.sqoop作业
sqoop也支持作业的形式
--create创建
bin/sqoop job --create myimportjob -- import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --m 1
--list查看
$ sqoop job --list
--show查看
$ sqoop job --show myjob
--exec执行
$ sqoop job --exec myjob 它会显示下面的输出。 10/08/19 13:08:45 INFO tool.CodeGenTool: Beginning code generation ...
但是我们可以用shell脚本的方式来运行调度,所以这个意义并不是很大.
相关文章推荐
- [置顶] 【hadoop Sqoop】数据迁移工具 sqoop 入门
- 大数据学习——Sqoop入门使用
- 大数据入门第十二天——azkaban入门
- Sqoop2入门之导入关系型数据库数据到HDFS上
- 大数据入门第十二天——flume入门
- Sqoop2入门之导入关系型数据库数据到HDFS上(sqoop2-1.99.4版本)
- Hadoop入门之Sqoop的安装和数据导入导出
- 大数据入门:各种大数据技术介绍
- 使用sqoop将MySQL数据库中的数据导入Hbase
- javascript入门·向函数传递表单数据和元素(赠送一小技巧)
- sqoop导入关系型数据库的数据至hive
- 【ppt入门教程】如何让ppt与Excel工作表结合 实现数据的录入与计算
- 【IPHONE开发-OBJECTC入门学习】基本数据类型
- OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据
- 数据挖掘入门——分词
- springMVC入门--3.数据校验
- 《Sqoop将Oracle数据导入至Hive中界面无错却依旧没有数据导入》
- CoreData 从入门到精通 二 数据的增删改查
- 使用sqoop将MySQL数据库中的数据导入Hbase
- python数据分析入门学习笔记儿