logo资料库

sqoop详细开发手册(开发,优化,参数解释等).doc

第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
资料共22页,剩余部分请下载后查看
第1章 Sqoop简介
第2章 Sqoop原理
第3章 Sqoop安装
3.1 下载并解压
3.2 修改配置文件
3.3 拷贝JDBC驱动
3.4 验证Sqoop
3.5 测试Sqoop是否能够成功连接数据库
第4章 Sqoop的简单使用案例
4.1 导入数据
4.1.1 RDBMS到HDFS
4.1.2 RDBMS到Hive
4.1.3 RDBMS到Hbase
4.2、导出数据
4.2.1 HIVE/HDFS到RDBMS
4.3 脚本打包
第5章 Sqoop一些常用命令及参数
5.1 常用命令列举
5.2 命令&参数详解
5.2.1 公用参数:数据库连接
5.2.2 公用参数:import
5.2.3 公用参数:export
5.2.4 公用参数:hive
5.2.5 命令&参数:import
5.2.6 命令&参数:export
5.2.7 命令&参数:codegen
5.2.8 命令&参数:create-hive-table
5.2.9 命令&参数:eval
5.2.10 命令&参数:import-all-tables
5.2.11 命令&参数:job
5.2.12 命令&参数:list-databases
5.2.13 命令&参数:list-tables
5.2.14 命令&参数:merge
5.2.15 命令&参数:metastore
大数据技术之 Sqoop 大数据技术之 Sqoop 版本:V1.0 第 1 章 Sqoop 简介 Sqoop 是一款开源的工具,主要用于在 Hadoop(Hive)与传统的数据库(mysql、postgresql...) 间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres 等)中的 数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。 Sqoop 项目开始于 2009 年,最早是作为 Hadoop 的一个第三方模块存在,后来为了让使 用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop 独立成为一个 Apache 项目。 Sqoop2 的最新版本是 1.99.7。请注意,2 与 1 不兼容,且特征不完整,它并不打算用于 生产部署。 第 2 章 Sqoop 原理 将导入或导出命令翻译成 mapreduce 程序来实现。 在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。 第 3 章 Sqoop 安装 安装 Sqoop 的前提是已经具备 Java 和 Hadoop 的环境。 3.1 下载并解压 1) 下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/ 2) 上传安装包 sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 到虚拟机中 3) 解压 sqoop 安装包到指定目录,如: $ tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/module/ 3.2 修改配置文件 Sqoop 的配置文件与大多数大数据框架类似,在 sqoop 根目录下的 conf 目录中。 1) 重命名配置文件 $ mv sqoop-env-template.sh sqoop-env.sh 2) 修改配置文件 Sqoop 脚本
大数据技术之 Sqoop sqoop-env.sh export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2 export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2 export HIVE_HOME=/opt/module/hive export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10 export ZOOCFGDIR=/opt/module/zookeeper-3.4.10 export HBASE_HOME=/opt/module/hbase 3.3 拷贝 JDBC 驱动 拷贝 jdbc 驱动到 sqoop 的 lib 目录下,如: $ /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/ 3.4 验证 Sqoop cp mysql-connector-java-5.1.27-bin.jar 我们可以通过某一个 command 来验证 sqoop 配置是否正确: $ bin/sqoop help 出现一些 Warning 警告(警告信息已省略),并伴随着帮助命令的输出: Available commands: codegen create-hive-table eval export help import import-all-tables import-mainframe job list-databases list-tables merge metastore version Merge results of incremental imports Run a standalone Sqoop metastore Display version information Work with saved jobs Import a table definition into Hive Generate code to interact with database records Evaluate a SQL statement and display the results Export an HDFS directory to a database table List available commands Import a table from a database to HDFS Import tables from a database to HDFS Import datasets from a mainframe server to HDFS List available databases on a server List available tables in a database 3.5 测试 Sqoop 是否能够成功连接数据库 $ bin/sqoop list-databases --connect jdbc:mysql://hadoop102:3306/ --username root --password 000000 出现如下输出: information_schema metastore mysql oozie performance_schema 第 4 章 Sqoop 的简单使用案例 4.1 导入数据 在 Sqoop 中,“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE, Sqoop 脚本
大数据技术之 Sqoop HBASE)中传输数据,叫做:导入,即使用 import 关键字。 4.1.1 RDBMS 到 HDFS 1) 确定 Mysql 服务开启正常 2) 在 Mysql 中新建一张表并插入一些数据 $ mysql -uroot -p000000 mysql> create database company; mysql> create table company.staff(id int(4) primary key not null auto_increment, name varchar(255), sex varchar(255)); mysql> insert into company.staff(name, sex) values('Thomas', 'Male'); mysql> insert into company.staff(name, sex) values('Catalina', 'FeMale'); 3) 导入数据 (1)全部导入 $ bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 000000 \ --table staff \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" (2)查询导入 $ bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 000000 \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select name,sex from staff where id <=1 and $CONDITIONS;' 提示:must contain '$CONDITIONS' in WHERE clause. 如果 query 后使用的是双引号,则$CONDITIONS 前必须加转移符,防止 shell 识别为自己的 变量。 (3)导入指定列 $ bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 000000 \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --columns id,sex \ --table staff Sqoop 脚本
大数据技术之 Sqoop 提示:columns 中如果涉及到多列,用逗号分隔,分隔时不要添加空格 (4)使用 sqoop 关键字筛选查询导入数据 $ bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 000000 \ --target-dir /user/company \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table staff \ --where "id=1" 4.1.2 RDBMS 到 Hive $ bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 000000 \ --table staff \ --num-mappers 1 \ --hive-import \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-table staff_hive 提示:该过程分为两步,第一步将数据导入到 HDFS,第二步将导入到 HDFS 的数据迁移到 Hive 仓库,第一步默认的临时目录是/user/atguigu/表名 4.1.3 RDBMS 到 Hbase $ bin/sqoop import \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 000000 \ --table company \ --columns "id,name,sex" \ --column-family "info" \ --hbase-create-table \ --hbase-row-key "id" \ --hbase-table "hbase_company" \ --num-mappers 1 \ --split-by id 提示:sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自动创建 HBase 表的功能 解决方案:手动创建 HBase 表 hbase> create 'hbase_company,'info' (5) 在 HBase 中 scan 这张表得到如下内容 hbase> scan ‘hbase_company’ 4.2、导出数据 在 Sqoop 中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群 Sqoop 脚本
大数据技术之 Sqoop (RDBMS)中传输数据,叫做:导出,即使用 export 关键字。 4.2.1 HIVE/HDFS 到 RDBMS $ bin/sqoop export \ --connect jdbc:mysql://hadoop102:3306/company \ --username root \ --password 000000 \ --table staff \ --num-mappers 1 \ --export-dir /user/hive/warehouse/staff_hive \ --input-fields-terminated-by "\t" 提示:Mysql 中如果表不存在,不会自动创建 4.3 脚本打包 使用 opt 格式的文件打包 sqoop 命令,然后执行 1) 创建一个.opt 文件 $ mkdir opt $ touch opt/job_HDFS2RDBMS.opt 2) 编写 sqoop 脚本 $ vi opt/job_HDFS2RDBMS.opt export --connect jdbc:mysql://hadoop102:3306/company --username root --password 000000 --table staff --num-mappers 1 --export-dir /user/hive/warehouse/staff_hive --input-fields-terminated-by "\t" 3) 执行该脚本 $ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt 第 5 章 Sqoop 一些常用命令及参数 5.1 常用命令列举 这里给大家列出来了一部分 Sqoop 操作时的常用参数,以供参考,需要深入学习的可以参 看对应类的源代码。 序号 命令 类 说明 Sqoop 脚本
import export codegen ImportTool ExportTool CodeGenTool 大数据技术之 Sqoop 将数据导入到集群 将集群数据导出 获取数据库中某张表 数据生成 Java 并打包 Jar create-hive-table CreateHiveTableTool 创建 Hive 表 eval EvalSqlTool 查看 SQL 执行结果 import-all-tables ImportAllTablesTool 导入某个数据库下所 有表到 HDFS 中 job JobTool 用来生成一个 sqoop 的任务,生成后,该 任务并不执行,除非 使 用 命 令 执 行 该 任 务。 list-databases ListDatabasesTool 列出所有数据库名 list-tables ListTablesTool 列出某个数据库下所 有表 merge MergeTool 将 HDFS 中不同目录 下 面 的 数 据 合 在 一 起,并存放在指定的 目录中 metastore MetastoreTool 记 录 sqoop job 的 元 数据信息,如果不启 动 metastore 实例,则 默认的元数据存储目 录为:~/.sqoop,如果 要更改存储目录,可 以 在 配 置 文 件 sqoop-site.xml 中进行 1 2 3 4 5 6 7 8 9 10 11 Sqoop 脚本
12 13 help version HelpTool VersionTool 大数据技术之 Sqoop 更改。 打印 sqoop 帮助信息 打印 sqoop 版本信息 5.2 命令&参数详解 刚才列举了一些 Sqoop 的常用命令,对于不同的命令,有不同的参数,让我们来一一列举 说明。 首先来我们来介绍一下公用的参数,所谓公用参数,就是大多数命令都支持的参数。 5.2.1 公用参数:数据库连接 序号 1 2 3 4 5 6 7 参数 --connect 说明 连接关系型数据库的 URL --connection-manager 指定要使用的连接管理类 --driver --help --password --username --verbose Hadoop 根目录 打印帮助信息 连接数据库的密码 连接数据库的用户名 在控制台打印出详细信息 5.2.2 公用参数:import 序号 参数 说明 1 2 3 4 5 Sqoop 脚本 --enclosed-by --escaped-by 给字段值前加上指定的字符 对字段中的双引号加转义符 --fields-terminated-by 设定每个字段是以什么符号 作为结束,默认为逗号 --lines-terminated-by 设定每行记录之间的分隔符, 默认是\n --mysql-delimiters Mysql 默认的分隔符设置,字 段之间以逗号分隔,行之间以 \n 分隔,默认转义符是\,字
大数据技术之 Sqoop 段值以单引号包裹。 6 --optionally-enclosed-by 给带有双引号或单引号的字 段值前后加上指定字符。 5.2.3 公用参数:export 序号 参数 说明 1 2 3 4 5 --input-enclosed-by 对字段值前后加上指定字符 --input-escaped-by 对含有转移符的字段做转义 处理 --input-fields-terminated-by 字段之间的分隔符 --input-lines-terminated-by 行之间的分隔符 --input-optionally-enclosed-by 给带有双引号或单引号的字 段前后加上指定字符 5.2.4 公用参数:hive 序号 参数 说明 1 2 3 4 5 Sqoop 脚本 --hive-delims-replacement 用自定义的字符串替换掉数 据中的\r\n 和\013 \010 等字符 --hive-drop-import-delims 在导入数据到 hive 时,去掉 数据中的\r\n\013\010 这样的 字符 --map-column-hive 生成 hive 表时,可以更改生 成字段的数据类型 --hive-partition-key 创建分区,后面直接跟分区 名,分区字段的默认类型为 string --hive-partition-value 导入数据时,指定某个分区的 值
分享到:
收藏