1.6-1.10 使用Sqoop导入数据到HDFS及一些设置
一、导数据
1、import和export
Sqoop可以在HDFS/Hive和关系型数据库之间进行数据的导入导出,其中主要使用了import和export这两个工具。这两个工具非常强大,
提供了很多选项帮助我们完成数据的迁移和同步。比如,下面两个潜在的需求: 1、业务数据存放在关系数据库中,如果数据量达到一定规模后需要对其进行分析或同统计,单纯使用关系数据库可能会成为瓶颈,
这时可以将数据从业务数据库数据导入(import)到Hadoop平台进行离线分析。 2、对大规模的数据在Hadoop平台上进行分析以后,可能需要将结果同步到关系数据库中作为业务的辅助数据,这时候需要
将Hadoop平台分析后的数据导出(export)到关系数据库。
[root@hadoop-senior sqoop-1.4.5-cdh5.3.6]# bin/sqoop help import
[root@hadoop-senior sqoop-1.4.5-cdh5.3.6]# bin/sqoop help export
2、import参数
##sqoop通用参数
--connect <jdbc-uri>:指定JDBC连接字符串。
--connection-manager <class-name>:指定要使用的连接管理器类。
--driver <class-name>:手动指定要使用的JDBC驱动程序类。
--hadoop-mapred-home <dir>:覆盖$ HADOOP_MAPRED_HOME。
--help:打印使用说明。
--password-file:为包含认证密码的文件设置路径。
-P:从控制台读取密码。
--password <password>:设置验证密码。
--username <username>:设置验证用户名。
--verbose:在运行时打印更多信息。
--connection-param-file <filename>:提供连接参数的可选属性文件。
--relaxed-isolation:将mapper的连接事务隔离设置为只读。 ##import参数
--append 将数据追加到HDFS上一个已存在的数据集上
--as-avrodatafile 将数据导入到Avro数据文件
--as-sequencefile 将数据导入到SequenceFile
--as-textfile 将数据导入到普通文本文件(默认)
--boundary-query <statement> 边界查询,用于创建分片(InputSplit)
--columns <col,col,col…> 从表中导出指定的一组列的数据
--delete-target-dir 如果指定目录存在,则先删除掉
--direct 使用直接导入模式(优化导入速度)
--direct-split-size <n> 分割输入stream的字节大小(在直接导入模式下)
--fetch-size <n> 从数据库中批量读取记录数
--inline-lob-limit <n> 设置内联的LOB对象的大小
-m,--num-mappers <n> 使用n个map任务并行导入数据
-e,--query <statement> 导入的查询语句
--split-by <column-name> 指定按照哪个列去分割数据
--table <table-name> 导入的源表表名
--target-dir <dir> 导入HDFS的目标路径
--warehouse-dir <dir> HDFS存放表的根路径
--where <where clause> 指定导出时所使用的查询条件
-z,--compress 启用压缩
--compression-codec <c> 指定Hadoop的codec方式(默认gzip)
--null-string <null-string> 果指定列为字符串类型,使用指定字符串替换值为null的该类列的值
--null-non-string <null-string> 如果指定列为非字符串类型,使用指定字符串替换值为null的该类列的值
3、在MySQL中准备一些数据
mysql> use test;
Database changed mysql> CREATE TABLE `my_user` (
-> `id` tinyint(4) NOT NULL AUTO_INCREMENT,
-> `account` varchar(255) DEFAULT NULL,
-> `passwd` varchar(255) DEFAULT NULL,
-> PRIMARY KEY (`id`)
-> );
Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO `my_user` VALUES ('1', 'admin', 'admin');
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `my_user` VALUES ('2', 'pu', '12345');
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `my_user` VALUES ('3', 'system', 'system');
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `my_user` VALUES ('4', 'zxh', 'zxh');
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `my_user` VALUES ('5', 'test', 'test');
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `my_user` VALUES ('6', 'pudong', 'pudong');
Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `my_user` VALUES ('7', 'qiqi', 'qiqi');
Query OK, 1 row affected (0.00 sec)
4、将mysql表导出到hdfs
##这里没有指定存到hdfs哪里,会默认存储hdfs用户主目录下以表名为目录存储
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user ##默认存储,默认用了4个map
[root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -ls -R /user/root
19/05/06 15:55:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
drwxr-xr-x - root supergroup 0 2019-05-06 15:53 /user/root/my_user
-rw-r--r-- 1 root supergroup 0 2019-05-06 15:53 /user/root/my_user/_SUCCESS
-rw-r--r-- 1 root supergroup 25 2019-05-06 15:53 /user/root/my_user/part-m-00000
-rw-r--r-- 1 root supergroup 26 2019-05-06 15:53 /user/root/my_user/part-m-00001
-rw-r--r-- 1 root supergroup 12 2019-05-06 15:53 /user/root/my_user/part-m-00002
-rw-r--r-- 1 root supergroup 28 2019-05-06 15:53 /user/root/my_user/part-m-00003
指定存储目录,设置用1个map:
##
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/sqoop/imp_my_user \
--num-mappers 1 ##
[root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -ls -R /user/root/sqoop
19/05/06 16:01:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
drwxr-xr-x - root supergroup 0 2019-05-06 16:01 /user/root/sqoop/imp_my_user
-rw-r--r-- 1 root supergroup 0 2019-05-06 16:01 /user/root/sqoop/imp_my_user/_SUCCESS
-rw-r--r-- 1 root supergroup 91 2019-05-06 16:01 /user/root/sqoop/imp_my_user/part-m-00000
二、执行流程
sqoop 底层的实现就是MapReduce,对import来说,仅仅运行Map Task
三、设置数据存储格式为parquet
1、先把mysql的数据导出到hdfs
##
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/sqoop/imp_my_user_parquet \
--fields-terminated-by ',' \
--num-mappers 1 \
--as-parquetfile
2、再将数据从hdfs导入到hive
##在hive中先创建一张表
drop table if exists default.hive_user_orc ;
create table default.hive_user_orc(
id int,
username string,
password string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS parquet ; ##导入数据
hive (default)> load data inpath '/user/root/sqoop/imp_my_user_parquet' into table default.hive_user_orc ; #查询,此时数据都为空,格式为parquet文件,这是sqoop1.4.5的一个bug,1.4.6已经修复;
hive (default)> select * from default.hive_user_orc ;
四、导入数据使用query
1、选择导出所需的列
##只导出 id和account这两列
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/sqoop/imp_my_user_column \
--num-mappers 1 \
--columns id,account ##
[root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -text /user/root/sqoop/imp_my_user_column/part-m-00000
19/05/06 16:39:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
1,admin
2,pu
3,system
4,zxh
5,test
6,pudong
7,qiqi
2、query
* 在实际的项目中,要处理的数据,需要进行初步清洗和过滤
* 某些字段过滤
* 条件
* join
##--query参数,直接写一条select语句
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--query 'select id, account from my_user where $CONDITIONS' \
--target-dir /user/root/sqoop/imp_my_user_query \
--num-mappers 1 ##
[root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hdfs dfs -text /user/root/sqoop/imp_my_user_query/part-m-00000
19/05/06 16:58:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
1,admin
2,pu
3,system
4,zxh
5,test
6,pudong
7,qiqi
五、import hdfs设置数据压缩为sanppy
1、设置hadoop支持sanppy压缩
[root@hadoop-senior cdh]# tar zxf cdh5.3.6-snappy-lib-natirve.tar.gz [root@hadoop-senior lib]# rm -rf /opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6/lib/native [root@hadoop-senior lib]# cp -r native/ /opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6/lib/ ##查看是否已经支持
[root@hadoop-senior hadoop-2.5.0-cdh5.3.6]# bin/hadoop checknative
19/05/06 17:13:56 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native
19/05/06 17:13:56 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library
Native library checking:
hadoop: true /opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6/lib/native/libhadoop.so.1.0.0
zlib: true /lib64/libz.so.1
snappy: true /opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6/lib/native/libsnappy.so.1
lz4: true revision:99
bzip2: true /lib64/libbz2.so.1
2、
bin/sqoop import \
--connect jdbc:mysql://hadoop-senior.ibeifeng.com:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/sqoop/imp_my_sannpy \
--delete-target-dir \
--num-mappers 1 \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec #--delete-target-dir 目标目录存在则删除
#--compress 启用压缩
1.6-1.10 使用Sqoop导入数据到HDFS及一些设置的更多相关文章
- Sqoop导入数据到mysql数据库报错:ERROR tool.ExportTool: Error during export: Export job failed!(已解决)
问题描述: Container killed by the ApplicationMaster. Container killed on request. Exit code is 143 Conta ...
- sqoop导入数据
来源https://www.cnblogs.com/qingyunzong/p/8807252.html 一.概述 sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据 ...
- sqoop导入数据到hive---2
1.hive-table 从mysql导入数据到hive表中,可以使用--hive-table来指定hive的表名,不指定hive表名,则hive表名与mysql表名保持一致. sqoop impor ...
- sqoop导入数据到hive
1.1hive-import参数 使用--hive-import就可以将数据导入到hive中,但是下面这个命令执行后会报错,报错信息如下: sqoop import --connect jdbc:my ...
- sqoop导入数据到hive中元数据问题
简单配置了sqoop之后开始使用,之前用的时候很好用,也不记得有没有启动hivemetastore,今天用的时候没有启动,结果导入数据时,如果使用了db.tablename,就会出现找不到数据库的错, ...
- 大数据学习——sqoop导入数据
把数据从关系型数据库导入到hadoop 启动sqoop 导入表表数据到HDFS 下面的命令用于从MySQL数据库服务器中的emp表导入HDFS. sqoop import \ --connect jd ...
- 第3节 sqoop:4、sqoop的数据导入之导入数据到hdfs和导入数据到hive表
注意: (1)\001 是hive当中默认使用的分隔符,这个玩意儿是一个asc 码值,键盘上面打不出来 (2)linux中一行写不下,可以末尾加上 一些空格和 “ \ ”,换行继续写余下的命令: bi ...
- sqoop导入数据到hive表中的相关操作
1.使用sqoop创建表并且指定对应的hive表中的字段的数据类型,同时指定该表的分区字段名称 sqoop create-hive-table --connect "jdbc:oracle: ...
- 1.11-1.12 Sqoop导入数据时两种增量方式导入及direct
一.增量数据的导入 1.两种方式 ## query 有一个唯一标识符,通常这个表都有一个字段,类似于插入时间createtime where createtime => 201509240000 ...
随机推荐
- 【每日Scrum】第七天(4.28)Sprint2总结性会议
本次会议主要是演示了一下本组项目的各项功能,每个人负责那一块儿功能由本人来负责说明和演示,确定alpha版本的发布时间,并且分派了各组员的文档负责情况,上图是会议记录,下面我详细介绍一下我组分派情况: ...
- UVA11770 - Lighting Away
题目链接 题意:一个有向图,每对一个结点操作.就能够触发连锁反应,使得该结点及它直接或间接指向的点均获得标记,问至少须要操作多少个结点使得全部结点获得标记 思路:有向图的强连通分量.用Tarjan缩点 ...
- Linux面试必问-对照目录内容的命令“Diff”具体解释
dir1下有个log_1.log dir2下有个log_2.log 两个文件例如以下: p_ylwu@VM_194_111_sles10_64:/home/jdxochen/exercise> ...
- sublime常用的插件
Sublime Text常用插件 1.Package Control 快捷键ctrl+~调出Sublime Text控制台,然后输入以下代码(Sublime Text3)安装Package Contr ...
- gdb调试段错误及使用
在编程调试中,经常出现段错误,此时可用gdb调试.具体方法为注册段错误信号处理函数,在处理函数中启动gdb.具体代码如下: void segv_handler(int no) { ]; ]; FILE ...
- poj1125--Floyd
题解: 有N个股票经济人能够互相传递消息.他们之间存在一些单向的通信路径.如今有一个消息要由某个人開始传递给其它全部人.问应该由哪一个人来传递,才干在最短时间内让全部人都接收到消息. 显然,用Floy ...
- ios 常见错误整理 持续更新
本文转载至 http://blog.csdn.net/yesjava/article/details/8086185 1. mutating method sent to immutable obj ...
- RS485总线典型电路介绍
一.RS485总线介绍: RS485总线是一种常见的串行总线标准,采用平衡发送与差分接收的方式,因此具有抑制共模干扰的能力.在一些要求通信距离为几十米到上千米的时候,RS485总线是一种应用最为广泛的 ...
- spring+mybatis多数据源,动态切换
有时我们项目中需要配置多个数据源,不同的业务使用的数据库不同 实现思路:配置多个dataSource ,再配置多个sqlSessionFactory,和dataSource一一对应.重写SqlSess ...
- DuiLib笔记之Control常用属性
name 指定控件名称,同一窗口内必须唯一,类型:STRING float 用于指定控件是否使用绝对定位,或设置FloatPercent,类型:BOOL,默认值为false,格式:float=&quo ...