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

Sqoop使用,mysql,hbase,hive等相互转换

Sqoop是一款用来在不同数据存储软件之间进行数据传输的开源软件,它支持多种类型的数据储存软件。安装Sqoop1.下载sqoop并加mysql驱动包http:mirror.bit.

Sqoop 是一款用来在不同数据存储软件之间进行数据传输的开源软件,它支持多种类型的数据储存软件。

安装 Sqoop

1.下载sqoop并加mysql驱动包

http://mirror.bit.edu.cn/apache/sqoop/,下载,如下载sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz,

要从 MySQL 导数据需要安装 MySQL driver。如 mysql-connector-java-5.1.38.tar.gz,解压以后把 jar 包放到 Sqoop 目录下的 lib 目录下。

2.配置环境变量

要把HADOOP_MAPRED_HOME添加到系统环境,否则会报错/usr/software/sqoop/bin/../../hadoop/mapreduce does not exist!

需要 vi /etc/profiles加export HADOOP_MAPRED_HOME=/usr/software/hadoop

 

从 MySQL 到 HDFS

mysql测试表 bbb 为例

sqoop import --connect jdbc:mysql:/// --username  --password  --table  --check-column  --incremental  --last-value  --target-dir  --fields-terminated-by '\t'
例子:
sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password admin --table bbb --check-column id --incremental append --last-value '1' --target-dir output_hb --fields-terminated-by '\t'

参数说明:

参数说明:

dburi:数据库的访问连接,例如: jdbc:mysql://192.168.1.124:3306/ 如果您的访问连接中含有参数,那么请用单引号将整个连接包裹住,例如’jdbc:mysql://192.168.1.124:3306/mydatabase?useUnicode=true’
dbname:数据库的名字,例如:user。
username:数据库登录用户名。
password:用户对应的密码。
tablename:MySQL 表的名字。
col:要检查的列的名称。
mode:该模式决定Sqoop如何定义哪些行为新的行。取值为append或lastmodified。
value:前一个导入中检查列的最大值。
hdfs-dir:HDFS 的写入目录,例如:/user/hive/result。
–check-column,用来指定一些列,这些列在导入时用来检查做决定数据是否要被作为增量数据,在一般关系型数据库中,都存在类似Last_Mod_Date的字段或主键。注意:这些被检查的列的类型不能是任意字符类型,例如Char,VARCHAR…(即字符类型不能作为增量标识字段) 
–incremental,用来指定增量导入的模式(Mode),append和lastmodified 
–last-value,指定上一次导入中检查列指定字段最大值
--fields-terminated-by 行分隔符 ,如 '\t'
--lines-terminated-by 列分隔符,hive只支持'\n'作为行分隔符,默认也是'\n'
更加详细的参数使用请参考 Sqoop Import。
View Code

sqoop --split-by详解 

从 HDFS 到 MySQL

需要先创建好对应 HDFS 中的数据结构的 MySQL 表,然后在集群的 Master 节点上执行如下命令,指定要导的数据文件的路径。

  1. sqoop export --connect jdbc:mysql:/// --username --password --table --export-dir

从 MySQL 到 Hive

在集群的 Master 节点上执行如下命令后,从MySQL数据库导入数据的同时,也会新建一个 Hive 表。 

  1. sqoop import --connect jdbc:mysql:/// --username --password --table --check-column --incremental --last-value --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --target-dir --create-hive-table --hive-table   
     

报错处理:若报错“Hive does not support the SQL type for column GoodsPic” ,解决:对那列名指定类型,如 --map-column-hive GoodsPic=string

例子:

sqoop import --connect jdbc:mysql://localhost:33065/gznt --username gznt_r --password '123' --table gznt_bmda  --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --target-dir hive_gznt --create-hive-table --hive-table gznt.gznt_bmda

 参数说明:

--hive-table:对应的 Hive 中的表名,可以是 xxx.yyy。

--hdfs-dir:将源数据导入到HDFS上的那个文件夹下

--create-hive-table:没表就自动创建

--hive-overwrite 覆盖同步

从 Hive 到 MySQL

请参考上面的从 HDFS 到 MySQL的命令,只需要指定 Hive 表对应的 HDFS 路径就可以了。

例如:

sqoop export --connect jdbc:mysql://127.0.0.1:3306/parkdb --username xiaoming --password '123' --table t_vip_user --export-dir 'hive_g2park/vip/*' --fields-terminated-by "\t"
--fields-terminated-by指明hdfs数据到mysql的分割凭据

具体如下:hdfs数据到hive中,以及hdfs数据隐身理解



从 MySQL 到 OSS

类似从 MySQL 到 HDFS,只是 --target-dir 不同。在集群的 Master 节点上执行如下命令:

注意1: OSS 地址中的 host 有内网地址、外网地址和 VPC 网络地址之分。如果用经典网络,需要指定内网地址,杭州是 oss-cn-hangzhou-internal.aliyuncs.com,VPC 要指定 VPC 内网,杭州是 vpc100-oss-cn-hangzhou.aliyuncs.com。

注意2: 目前同步到OSS不支持—delete-target-dir,用这个参数会报错Wrong FS。如果要覆盖以前目录的数据 ,可以在调用sqoop前,用hadoop fs -rm -r osspath先把原来的oss目录删了。

  1. sqoop import --connect jdbc:mysql:/// --username --password --table --check-column --incremental --last-value --target-dir --temporary-rootdir

参数说明:

oss-dir:OSS 的写入目录,例如:oss://:@.oss-cn-hangzhou-internal.aliyuncs.com/result

oss-tmpdir:临时写入目录。指定append模式的同时,需要指定该参数。如果目标目录已经存在于HDFS中,则Sqoop将拒绝导入并覆盖该目录的内容。采用append模式后,Sqoop会将数据导入临时目录,然后将文件重命名为正常目标目录。

从OSS到MySQL

类似MySQL到HDFS,只是—export-dir不同。需要创建好对应OSS中的数据结构的MySQL表

然后在集群的Master节点上执行如下:指定要导的数据文件的路径

  1. sqoop export --connect jdbc:mysql:/// --username --password --table --export-dir

参数:

oss-dir:oss的写入目录,例如:oss://:@.oss-cn-hangzhou-internal.aliyuncs.com/result

注意: oss地址host有内网地址,外网地址,VPC网络地址之分。如果 用经典网络,需要指定内网地址,杭州是oss-cn-hangzhou-internal.aliyuncs.com,vpc要指定vpc内网,杭州是vpc100-oss-cn-hangzhou.aliyuncs.com

 

使用 SQL 作为导入条件

除了指定 MySQL 的全表导入,还可以写 SQL 来指定导入的数据,如下所示:

  1. sqoop import --connect jdbc:mysql:/// --username --password --query --split-by --hive-import --hive-table --target-dir
  2. 例子:
sqoop import --connect jdbc:mysql://localhost:3306/gznt --username gznt_r --password '123' --query "SELECT NodeCode,NodeName from tb_bmda where 1=1 AND \$CONDITIONS " --split-by NodeCode  --target-dir output2

 参数说明:

query-sql:使用的查询语句,例如:”SELECT * FROM profile WHERE id>1 AND \$CONDITIONS”。记得要用引号包围,最后一定要带上 AND \$CONDITIONS。

sp-column:进行切分的条件,一般跟 MySQL 表的主键。

hdfs-dir:要导到 MySQL 去的 HDFS 的数据目录,例如:/user/hive/result。

hive-tablename:对应的 Hive 中的表名,可以是 xxx.yyy。

 

从MYSQL到HBASE

类似MySQL到HDFS,只是—export-dir不同。需要创建好对应OSS中的数据结构的MySQL表

然后在集群的Master节点上执行如下:指定要导的数据文件的路径

ps:红色可以不填

  1. sqoop import -D sqoop.hbase.add.row.key=true --connect jdbc:mysql://localhost:3306/gznt --username gznt_r --password '123' --table t_bmda --columns NodeCode,NodeType,NodeName,IsWarehouse,IsAssetUser --hbase-table hbase_bmda --column-family info --hbase-row-key NodeCode --where "ID >= 5"

参数:

-D sqoop.hbase.add.row.key=true 是否将rowkey相关字段写入列族中,默认false,默认你在列族中看不到任何row key中的字段。

--hbase-create-table  如果hbase中该表不存在则创建,ps:我加了这个,就报错了,据说了版本兼容问题,可以先手动创建好hbase的表和列族

 --hbase-row-key 指定字段作为row key ,如果输入表包含复合主键,用逗号分隔

 

从HIVE到HBASE

hive下建表(hbase下会自动创建对应表):

CREATE TABLE IF NOT EXISTS all_detail ( 
key string comment "rowkey",
SaleDate varchar(60), 
NodeCode varchar(60),
NodeName varchar(60)
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'    
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:SaleDate,info:NodeCode,info:NodeName")    
TBLPROPERTIES("hbase.table.name" = "hbase_tb");
;

注意点:

1.建表的时候,必须建一个 key column,如上的 key string comment "rowkey"

2.hbase.columns.mapping中是hive与hbase的对应,即 把SaleData,NodeCode,NodeName数据同步到hbase_tb下的info列族下。

附录:

Sqoop使用 
Sqoop 简介及安装部署 
使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟

 


推荐阅读
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • MapReduce统计每个用户的使用总流量
    1、原始数据2、使用java程序1)新建项目2)导包  hadoop-2.7.3\share\hadoop\mapreducehsfs的那些包commo ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 本文_大数据之非常详细Sqoop安装和基本操作
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了大数据之非常详细Sqoop安装和基本操作相关的知识,希望对你有一定的参考价值。大数据大数据之 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文深入探讨了如何利用Maven高效管理项目中的外部依赖库。通过介绍Maven的官方依赖搜索地址(),详细讲解了依赖库的添加、版本管理和冲突解决等关键操作。此外,还提供了实用的配置示例和最佳实践,帮助开发者优化项目构建流程,提高开发效率。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • Hadoop 2.6 主要由 HDFS 和 YARN 两大部分组成,其中 YARN 包含了运行在 ResourceManager 的 JVM 中的组件以及在 NodeManager 中运行的部分。本文深入探讨了 Hadoop 2.6 日志文件的解析方法,并详细介绍了 MapReduce 日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 本文整理了Java中org.apache.hadoop.mapreduce.lib.input.MultipleInputs.addInputPath()方法的一些代码 ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
author-avatar
mobiledu2502886787
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有