imp命令导入指定表_Sqoop 使用shell命令的各种参数的配置及使用方法

点击上方蓝色字体,选择“设为星标

回复”资源“获取更多资源

3e518efcf46beb7231cfc2dd4565a3a6.png

本文作者:Sheep Sun本文链接:https://www.cnblogs.com/yangxusun9/p/12558683.html

ec8966907bce936488e80770507fd187.png

大数据技术与架构点击右侧关注,大数据开发领域最强公众号!04d04c9d06f6dda1b24c0d240c05afd6.png

e051dc473ebddcd23aefe37ca2ef5795.png

暴走大数据点击右侧关注,暴走大数据!053968b83a866816579838e7e984e5be.png一、Sqoop简介Sqoop将用户编写的Sqoop命令翻译为MR程序,MR程序读取关系型数据库中的数据,写入到HDFS或读取HDFS上的数据,写入到关系型数据库!在MR程序中如果要读取关系型数据库中的数据,必须指定输入格式为DBInputformat!在MR程序中如果要向关系型数据库写入数据,必须指定输出格式为DBOutputformat!Sqoop命令运行的MR程序,只有Map阶段,没有Reduce阶段!只需要做数据传输,不需要对数据进行合并和排序!二、sqoop导入数据(将关系型数据库的数据导入到 HDFS)数据如下1503cabdff0fb6506fd519d6b8943135.png2.1 直接导入HDFS

2.1.1 全表导入(部分导入)

bin/sqoop import \##连接的关系型数据库的url,用户名,密码--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \##连接的表--table t_emp \##导出数据在hdfs上存放路径--target-dir /sqoopTest \##如果路径已存在则先删除--delete-target-dir \##导入到Hdfs上后,每个字段使用什么参数进行分割--fields-terminated-by "\t" \##要启动几个MapTask,默认4个--num-mappers 2 \##数据集根据哪个字段进行切分,切分后每个MapTask负责一部分--split-by id \##要实现部分导入,加入下面的参数,表示导入哪些列##columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格--columns id,name,age

2.1.2 使用sqoop关键字筛选查询导入数据

bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \--table t_emp \##指定过滤的where语句,where语句最好使用引号包裹--where 'id>6' \--target-dir /sqoopTest \--delete-target-dir \--fields-terminated-by "\t" \--num-mappers 1 \--split-by id 

2.1.3 使用查询语句导入

bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \##查询语句最好使用单引号##如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量--query 'select * from t_emp where id>3 and $CONDITIONS' \--target-dir /sqoopTest \--delete-target-dir \--fields-terminated-by "\t" \--num-mappers 1 \--split-by id 
注意:1、如果使用了--query,就不能指定--table,和--columns和--where  --query 和 --table一定不能同时存在!  --where和--query同时存在时,--where失效  --columns和--query同时存在时,还有效!2、--query 必须跟--target-dir2.2 导入到Hive
bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \--query 'select * from t_emp where id>3 and $CONDITIONS' \--target-dir /sqoopTest \##如果不限定分隔符,那么hive存储的数据将不带分隔符,之后再想操作很麻烦,所以建议加上--fields-terminated-by "\t" \--delete-target-dir \##导入到hive--hive-import \##是否覆盖写,不加这个参数就是追加写--hive-overwrite \##指定要导入的hive的表名--hive-table t_emp \--num-mappers 1 \--split-by id
原理还是分俩步:先把数据从关系数据库里导到hdfs中,然后再从hdfs中导到hive中,此时hdfs中的文件会被删除注意:如果hive中没表会自动创建表,但是类型是自动生成的,所以还是建议手动创建 也可以分俩步走:先导入hdfs
#!/bin/bashimport_data(){$sqoop import \--connect jdbc:mysql://hadoop102:3306/gmall \--username root \--password 123 \--target-dir /origin_data/gmall/db/$1/$do_date \--delete-target-dir \--query "$2 and  \$CONDITIONS" \--num-mappers 1 \--fields-terminated-by '\t' \# 使用压缩,和指定压缩格式为lzop--compress \--compression-codec lzop \#将String类型和非String类型的空值替换为\N,方便Hive读取--null-string '\\N' \--null-non-string '\\N'}
然后利用  load data  命令导入hive注意:这里使用到了空值处理 ——Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。在导出数据时采用--input-null-string和--input-null-non-string两个参数。导入数据时采用--null-string和--null-non-string。2.3 导入到 Hbase
bin/sqoop import \--connect jdbc:mysql://hadoop102:3306/test \--username root \--password 123 \--query 'select * from t_emp where id>3 and $CONDITIONS' \--target-dir /sqoopTest \--delete-target-dir \##表不存在是否创建--hbase-create-table \##hbase中的表名--hbase-table "t_emp" \##将导入数据的哪一列作为rowkey--hbase-row-key "id" \##导入的列族--column-family "info" \--num-mappers 2 \--split-by id
1、当选用自动创建表时,如果版本不兼容会报错:20/03/24 13:51:24 INFO mapreduce.HBaseImportJob: Creating missing HBase table t_emp
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/hbase/HColumnDescriptor;)V1c73122ad2ebf7d4f491b2df746b1917.png 此时只能自己手动创建或者可以重新编译sqoop源码2、如果要多列族导入,只能多次运行命令,一次导入一个列族三、导出将Hdfs上的数据导出到关系型数据库中3.1 SQL中表为空表时
bin/sqoop export \--connect 'jdbc:mysql://hadoop102:3306/test?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123 \##导出的表名,需要自己提前创建好--table t_emp2 \--num-mappers 1 \##hdfs上导出的数据的路径--export-dir /user/hive/warehouse/t_emp \##hdfs上数据的分隔符--input-fields-terminated-by "\t"
3.2 表不为空表时如果插入的数据的主键和表中已有数据的主键冲突,那么会报错Duplicate entry '5' for key 'PRIMARY'如果在SQL下,可以使用
INSERT INTO t_emp2 VALUE(5,'jack',30,3,1111) ON DUPLICATE KEY UPDATE NAME=VALUES(NAME),deptid=VALUES(deptid),empno=VALUES(empno);
意为指定当插入时,主键重复时时,对于重复的记录,只做更新,不做插入!而用sqoop时,则可以启用以下俩种模式

3.2.1updateonly模式

bin/sqoop export \--connect 'jdbc:mysql://hadoop103:3306/mydb?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123456 \--table t_emp2 \--num-mappers 1 \--export-dir /hive/t_emp \--input-fields-terminated-by "\t" \--update-key id
利用 --update-key 字段  ,表示主键重复时会进行更新,但是主键不重复的时候,数据不会插入进来

3.2.2allowinsert模式

bin/sqoop export \--connect 'jdbc:mysql://hadoop103:3306/mydb?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123456 \--table t_emp2 \--num-mappers 1 \--export-dir /hive/t_emp \--input-fields-terminated-by "\t" \--update-key id \--update-mode  allowinsert
表示主键重复时会进行更新,主键不重复的时候,数据也会插入进来3.3 如何查看导出命令的具体实现

3.3.1配置/etc/my.cnf

bin/sqoop export \--connect 'jdbc:mysql://hadoop103:3306/mydb?useUnicode=true&characterEncoding=utf-8' \--username root \--password 123456 \--table t_emp2 \--num-mappers 1 \--export-dir /hive/t_emp \--input-fields-terminated-by "\t" \--update-key id \--update-mode  allowinsert

3.3.2重启mysql服务

3.3.3进入/var/lib/mysql,调用方法

sudo mysqlbinlog mysql-bin.000001
欢迎点赞+收藏+转发朋友圈素质三连

f64478d89930cbe0a12cc15635f2d30a.png

文章不错?点个【在看】吧! ?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393795.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑客频繁来袭 关注云计算的安全与保障

本文讲的是 : 黑客频繁来袭 关注云计算的安全与保障 , 【IT168 资讯】日前,虎嗅网遭受网络攻击的事件,引起业内关注。2月27日晚,虎嗅网中断访问,虎嗅网新浪官方微博随即发表声明,表示网站受到恶意攻击,随…

51nod 1100:斜率最大

题目链接 斜率最大点对横坐标必相邻 #include <bits/stdc.h> using namespace std; const int maxn 1e4 100;struct point {int x, y, pos;bool operator < (const point& rhs)const{return x<rhs.x;} } a[maxn]; double xielv(point a, point b) {return (a…

ik分词和jieba分词哪个好_Pubseg:一种单双字串的BiLSTM中文分词工具

中文分词是中文自然语言处理中的重要的步骤&#xff0c;有一个更高精度的中文分词模型会显著提升文档分类、情感预测、社交媒体处理等任务的效果[1]。Pubseg是基于BiLSTM中文分词工具&#xff0c;基于ICWS2005PKU语料训练集训练而成&#xff0c;其优点在于在ICWS2005-PKU语料下…

freecodecamp_freeCodeCamp.org隐私权政策:问题与解答

freecodecampWe take your privacy seriously. And we give you full control over your data.我们把你的隐私当回事。 而且&#xff0c;我们可以完全控制您的数据。 freeCodeCamp doesnt show you ads or sell your data to anyone. Our nonprofit is instead supported by t…

leetcode1029. 两地调度(贪心算法)

公司计划面试 2N 人。第 i 人飞往 A 市的费用为 costs[i][0]&#xff0c;飞往 B 市的费用为 costs[i][1]。 返回将每个人都飞到某座城市的最低费用&#xff0c;要求每个城市都有 N 人抵达。 示例&#xff1a; 输入&#xff1a;[[10,20],[30,200],[400,50],[30,20]] 输出&…

第一阶段冲刺4

1、我昨天的成就&#xff1a;看相关android开发视频&#xff0c;上网寻找如何实现app动画效果2、遇到什么困难&#xff1a;网上的用的很高级&#xff0c;看不懂别人如何实现的&#xff0c;搬过来实现不了。3、今天的任务&#xff1a;继续实现动画效果。 转载于:https://www.cnb…

小白做淘客店铺新玩法

微信淘客在朋友圈刷了将近两个月。有些大咖赚得盆满钵满&#xff0c;有些小白交了不少学费。有人日入几千几万&#xff0c;也有入不敷出。在此咖妹并没有褒贬之意&#xff0c;只是提醒大家&#xff0c;不光淘客如此&#xff0c;其他项目亦是如此&#xff0c;别人能做成功的项目…

局域网中实现linux与windows文件共享,使用samba组建Linux与Windows局域网实现文件共享...

使用samba&#xff0c;可以组建Windows与Linux的局域网&#xff0c;Linux我用的是Fedora Core 6。Samba软件的最新版本可以从网站免费获得。共可下得5个rpm&#xff0c;分别为&#xff1a;samba-3.0.24-1.i386.rpm&#xff1a;服务器端&#xff1b;samba-client-3.0.24-1.i386.…

python sum函数numpy_如何用numba加速python?

我把写好的markdown导入进来&#xff0c;但是没想到知乎的排版如此感人。如果对知乎排版不满想要看高清清爽版&#xff0c;请移步微信公众号原文 如何用numba加速python&#xff1f;同时欢迎关注前言说道现在最流行的语言&#xff0c;就不得不提python。可是python虽然容易上手…

服务概述

Android中的服务Service&#xff0c;和Activity不同的是不能与用户交互的&#xff0c;不能自己启动&#xff0c;系统的后台运行&#xff0c;当程序退出时&#xff0c;我们没有显示的调用停止服务&#xff0c;那么这个Service就没有结束&#xff0c;它仍然在后台运行。Service和…

[ZJOI2019]麻将

Luogu5279 , LOJ3042题意&#xff1a;给出初始13张手牌&#xff0c;求理论可以和牌的最小轮数的期望&#xff0e;定义和牌为&#xff1a;4句话1对乱将&#xff0c;不能有杠&#xff1b;七对 原始题解-shadowice 写得很好的题解 首先分析期望&#xff1a;\(<--\)所有和牌的步…

二进制搜索算法_二进制搜索的一个扭曲故事

二进制搜索算法by Divya Godayal通过Divya Godayal 二进制搜索的一个扭曲故事 (A twisted tale of Binary Search) Awesome. That’s how I feel right now. Writing my first solo tech article.太棒了 那就是我现在的感觉。 写我的第一篇个人技术文章。 I must say I have …

leetcode1221. 分割平衡字符串(贪心算法)

在一个「平衡字符串」中&#xff0c;‘L’ 和 ‘R’ 字符的数量是相同的。 给出一个平衡字符串 s&#xff0c;请你将它分割成尽可能多的平衡字符串。 返回可以通过分割得到的平衡字符串的最大数量。 示例 1&#xff1a; 输入&#xff1a;s “RLRRLLRLRL” 输出&#xff1a…

javascript中对变量类型的推断

本文正式地址&#xff1a;http://www.xiabingbao.com/javascript/2015/07/04/javascript-type 在JavaScript中&#xff0c;有5种基本数据类型和1种复杂数据类型&#xff0c;基本数据类型有&#xff1a;Undefined, Null, Boolean, Number和String。复杂数据类型是Object。Object…

U盘流畅运行linux发行版,做各种linux发行版的启动U盘方法

偶用tuxboot先移植gparted到16GB的U盘。然后裁剪N个iso 做成一个U盘安装或体验N个系统的多功能盘。选单晒出来&#xff1a;default vesamenu.c32timeout 3000prompt 0menu title Android RHEL6.4 Ubuntu13.04 GpartedMENU BACKGROUND Gsplash.pnglabel 001menu label GRUB4DOSk…

采样次数不同平均值不一样_不同的真石漆装饰效果也是不一样的

外墙真石漆真的是一件很好的产品&#xff0c;具有防火性、防水性、安全且环保、粘力强、永不褪色等特点&#xff0c;无疑是人们较好的选择&#xff0c;在很早之前就已经逐渐的取代了瓷砖和其他石材在人们心中的位置。真石漆的品种不止一种&#xff0c;按照装饰效果我们可以分为…

No-3.Linux 终端命令格式

Linux 终端命令格式 01. 终端命令格式 command [-options] [parameter]说明&#xff1a; command&#xff1a;命令名&#xff0c;相应功能的英文单词或单词的缩写[-options]&#xff1a;选项&#xff0c;可用来对命令进行控制&#xff0c;也可以省略parameter&#xff1a;传给命…

电子设计速成_Web设计速成课程:从一个非设计者到另一个

电子设计速成by Ali Spittel通过Ali Spittel Web设计速成课程&#xff1a;从一个非设计者到另一个 (A Web Design Crash Course: from one non-designer to another) I will preface this by saying that I’m not a professional designer. That being said, I like building…

android项目方法数超过65536的解决办法

2019独角兽企业重金招聘Python工程师标准>>> 当项目的总方法数超过65536个&#xff0c;运行在手机上&#xff0c;指不定会报找不到哪个文件的错。 我把项目的PullRefresh框架切换为SmartRefresh框架出现了方法数超过65536。 此文只是做一下笔记&#xff0c;不多做解…

leetcode1046. 最后一块石头的重量(堆)

有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出两块 最重的 石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两块石头都会被完全…