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

Sqoop实现Hadoop(Hive)与Mysql间数据传递

2019独角兽企业重金招聘Python工程师标准sqoop中文手册:http:blog.csdn.netmyrainbluesarticledetails436

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

sqoop中文手册:http://blog.csdn.net/myrainblues/article/details/43673129

 

一、准备

1.sqoop1.4.6安装包:https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.6/

2.sqoop-1.4.6 jar包: http://central.maven.org/maven2/org/apache/sqoop/sqoop/1.4.6/

3.mysql-connector-java.jar:http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.25/

4.Hadoop版本:5.7.1

二、安装

1.解压

tar -zxvf sqoop-1.4.6.tar.gz

配置sqoop环境变量(可不配):

vim /etc/profile

export SQOOP_HOME=/opt/soft/sqoop-1.4.6
export PATH=$SQOOP_HOME/bin:$PATH

使环境变量生效source /etc/profile

2.将下载好的sqoop-1.4.6 jar,mysql-connector-java.jar移动到 sqoop-1.4.6/lib下

注意:sqoop-1.4.6.jar不导入启动会报错,mysql-connector-java.jar做MySQL数据库链接用

三、测试

1.导入功能:数据库中的数据导入到HDFS系统

命令: sqoop import -connect jdbc:mysql://192.168.20.8:3306/qf_db -username root -password root -table student -target-dir /qf_db/student2 -m 1  -fields-terminated-by '\t'

参数介绍: ./sqoop是操作sqoop最常用的命令也是功能最强大的命令

import是导入的意思;

-connect jdbc:mysql://192.168.220.8:3306意思是以jdbc的方式连接数据库,192.168.220.8是我们的Windows的IP地址,3306是端口,qf_db是我们t_clue表所在的数据库的名称;

-username root -password root 是指数据库的用户名和密码;

-table t_clue意思是我们要导的是t_clue表;

-target-dir指定要存放到服务器的哪个目录下;

-m指定要起的mapper的数量;

-fields-terminated-by '\t' 指定列与列的分隔符为制表符;

-split-by id 通过该参数值来进行切分,然后将切分出来的区域分配到不同map中,类型有不同的切分方法;

-columns 'ID,Name,Age' 意思是我们要导入的只有ID、Name和Age这三列;

-where &#39;ID>&#61;3 and ID<&#61;8&#39;&#xff0c;筛选数据并导入符合条件的数据&#xff1b;

-query &#39;select * from Student where ID>5 and $CONDITIONS&#39; 使用query语句来筛选我们的数据&#xff0c;这意味着我们可以导入多张表的数据&#xff0c;使用query语句的话&#xff0c;就不用指定table了&#xff08;注意&#xff1a;如果使用--query这个命令的时候&#xff0c;需要注意的是where后面的参数&#xff0c;AND $CONDITIONS这个参数必须加上&#xff0c;而且存在单引号与双引号的区别&#xff0c;如果--query后面使用的是双引号&#xff0c;那么需要在$CONDITIONS前加上\即\$CONDITIONS&#xff09;&#xff1b;

出现错误&#xff1a;

 &#xff08;1&#xff09;ERROR tool.BaseSqoopTool: Error parsing arguments for list-tables:

检查你的链接内容&#xff0c;是否添写正确&#xff0c;如果没有问题&#xff0c;再检查是否包含中文字符&#xff1b;

&#xff08;2&#xff09;java.sql.SQLException: null,  message from server: "Host &#39;Hadoop1&#39; is not allowed to connect to this

update user set host &#61;&#39;%&#39; where user &#61;&#39;root&#39;;

执行刷新权限&#xff1a;flush privileges;

注意&#xff1a;执行过程中只有map&#xff0c;reduce的进度始终是0%&#xff0c;说明导入功能根本就没用到reduce的功能。是因为要把数据库中的数据导入到HDFS系统&#xff0c;只需要多台设备同时到数据库中去读取一条一条数据然后直接上传到HDFS&#xff0c;根本就不需要进行合并操作。

原理&#xff1a;

1.读取要导入数据的表结构&#xff0c;生成运行类&#xff0c;默认是QueryResult&#xff0c;打成jar包&#xff0c;然后提交给Hadoop

2.设置好job&#xff0c;主要也就是设置好以上第六章中的各个参数

3.这里就由Hadoop来执行MapReduce来执行Import命令了&#xff0c;

1&#xff09;首先要对数据进行切分&#xff0c;也就是DataSplit

DataDrivenDBInputFormat.getSplits(JobContext job)

2&#xff09;切分好范围后&#xff0c;写入范围&#xff0c;以便读取

DataDrivenDBInputFormat.write(DataOutput output) 这里是lowerBoundQuery and  upperBoundQuery

3&#xff09;读取以上2&#xff09;写入的范围

DataDrivenDBInputFormat.readFields(DataInput input)

4&#xff09;然后创建RecordReader从数据库中读取数据

DataDrivenDBInputFormat.createRecordReader(InputSplit split,TaskAttemptContext context)

5&#xff09;创建Map

TextImportMapper.setup(Context context)

6&#xff09;RecordReader一行一行从关系型数据库中读取数据&#xff0c;设置好Map的Key和Value&#xff0c;交给Map

DBRecordReader.nextKeyValue()

7&#xff09;运行map

TextImportMapper.map(LongWritable key, SqoopRecord val, Context context)

最后生成的Key是行数据&#xff0c;由QueryResult生成&#xff0c;Value是NullWritable.get()

2.Hdfs 导出数据文件至MySQL

命令例子&#xff1a;sqoop export -connect jdbc:mysql://192.168.20.8:3306/qf_db_test -username root -password root -table student -export-dir /qf_db/student2 -m 1  -fields-terminated-by &#39;\t&#39;

Sqoop1与Sqoop2对比&#xff1a;

http://blog.csdn.net/sunflower_cao/article/details/40348721

 

参考&#xff1a;

sqoop官网&#xff1a; http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html


转:https://my.oschina.net/u/1765168/blog/1574751



推荐阅读
  • 在CentOS 7中部署Nginx并配置SSL证书
    本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ... [详细]
  • Docker基础入门与环境配置指南
    本文介绍了Docker——一款用Go语言编写的开源应用程序容器引擎。通过Docker,用户能够将应用及其依赖打包进容器内,实现高效、轻量级的虚拟化。容器之间采用沙箱机制,确保彼此隔离且资源消耗低。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 使用 Babylon.js 实现地球模型与切片地图交互(第三部分)
    本文继续探讨在上一章节中构建的地球模型基础上,如何通过自定义的 `CameraEarthWheelControl` 类来实现更精细的地图缩放控制。我们将深入解析该类的实现细节,并展示其在实际项目中的应用。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 2023年1月28日网络安全热点
    涵盖最新的网络安全动态,包括OpenSSH和WordPress的安全更新、VirtualBox提权漏洞、以及谷歌推出的新证书验证机制等内容。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文详细介绍了Apache Spark 2.2.0版本中集群模式的基本概念和工作流程,包括如何通过集群管理器分配资源,以及Spark应用程序在集群中的运行机制。链接:http://spark.apache.org/docs/2.2.0/cluster-overview.html ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • 如何使用Maven将依赖插件一并打包进JAR文件
    本文详细介绍了在使用Maven构建项目时,如何将所需的依赖插件一同打包进最终的JAR文件中,以避免手动部署依赖库的麻烦。 ... [详细]
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
author-avatar
孽尐星_186
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有