热门标签 | 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



推荐阅读
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 本文整理了Java中org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc.getTypeInfo()方法的一些代码示例,展 ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • Jmeter对RabbitMQ压力测试
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Jmeter对RabbitMQ压力测试相关的知识,希望对你有一定的参考价值。Jm ... [详细]
  • struts2重点——ValueStack和OGNL
    一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot( ... [详细]
  • importorg.apache.hadoop.hdfs.DistributedFileSystem;导入方法依赖的package包类privatevoidtestHSyncOpe ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
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社区 版权所有