热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hbaseshell命令_Sqoop使用shell命令的各种参数的配置及使用方法

点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源本文作者:SheepSun本文链接:https:www.cnblogs.comy

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

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

667c47a1f52cf590878c0d10467b3732.png

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

c244e92fe8fce738dacca228cff22245.png

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

29a521494a9c7d88bbdb0211514b0432.png

暴走大数据点击右侧关注,暴走大数据!d6de488c7c9624ce3bda1d985f05f0ce.png一、Sqoop简介Sqoop将用户编写的Sqoop命令翻译为MR程序,MR程序读取关系型数据库中的数据,写入到HDFS或读取HDFS上的数据,写入到关系型数据库!在MR程序中如果要读取关系型数据库中的数据,必须指定输入格式为DBInputformat!在MR程序中如果要向关系型数据库写入数据,必须指定输出格式为DBOutputformat!Sqoop命令运行的MR程序,只有Map阶段,没有Reduce阶段!只需要做数据传输,不需要对数据进行合并和排序!二、sqoop导入数据(将关系型数据库的数据导入到 HDFS)数据如下f801d8428ffab0ad6908d7e2ebf2da36.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 id1、当选用自动创建表时,如果版本不兼容会报错: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;)Va95c9d27078306e1c489f713f5c7e5f4.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欢迎点赞+收藏+转发朋友圈素质三连

3fe9f7a4b1ce471649da7d78df864584.png

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




推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • Hadoop的分布式架构改进与应用
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • 马蜂窝数据总监分享:从数仓到数据中台,大数据演进技术选型最优解
    大家好,今天分享的议题主要包括几大内容:带大家回顾一下大数据在国内的发展,从传统数仓到当前数据中台的演进过程;我个人认为数 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文介绍了ADO.NET框架中的五个关键组件:Connection、Command、DataAdapter、DataSet和DataReader。每个组件都在数据访问和处理过程中扮演着不可或缺的角色。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 毕设做到后半部分,需要实现将用户在一段时间(比如1天)内产生的新数据导入HDFS的功能,这样数据仓库中的数据才能和数据库中的数据同步在新建了一个PyDev项目后,需要如下操作(拣最 ... [详细]
  • 不会搭建大数据平台,我被老板优化了...
    不会,搭建,大数,据,平台,我 ... [详细]
author-avatar
ENE的蓝白胖次
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有