Linux-Hadoop集群之Sqoop搭建(附代码超详细)

文章较长,附目录,此次安装是在VM虚拟环境下进行。文章第一节主要是介绍Hive,只需安装配置的朋友可以直接跳到文章第二节。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

注:本次案例是在基于Hadoop配置完成以及其他组件安装成功的情况下搭建的,需要的朋友可以查看我的这刊专栏学习:

大数据技术之Hadoop全生态组件学习与搭建icon-default.png?t=N7T8http://t.csdnimg.cn/OkPpo虽然目前sqoop已经在Apache退役,但目前仍有许多公司将它作为数据迁移工具使用,所以还是有学习的必要的,是十分不错的学习练手选择

目录

一、了解Sqoop

1.什么是sqoop

2.sqoop的历史

3.sqoop的特点

4.sqoop的架构

5.sqoop的工作原理

二、下载安装包

三、Sqoop配置

拓展-sqoop使用方法

Sqoop命令

数据导入/导出

1、数据从MySQL导入到HDFS

2、数据从HDFS导出到MySQL


一、了解Sqoop

1.什么是sqoop

Sqoop是一个用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具。它可以将关系型数据库(如MySQL、Oracle)中的数据导入到Hadoop中,也可以将Hadoop中的数据导出到关系型数据库中。Sqoop充分利用MapReduce并行特点以批处理的方式加快数据传输,实现高效、可控的资源利用。此外,Sqoop支持多种数据库,数据类型映射与转换可自动进行,用户也可自定义。

Sqoop的主要角色包括数据库管理员、Hadoop管理员、Sqoop管理员、开发人员和运维人员。数据库管理员负责管理关系型数据库,提供数据库的连接信息和访问权限;Hadoop管理员负责管理Hadoop集群,提供Hadoop的连接信息和访问权限;Sqoop管理员负责配置和管理Sqoop工具,包括Sqoop的安装、配置以及导入导出任务的管理;开发人员负责编写Sqoop的导入导出任务,包括数据源的选择、数据转换和数据的输出方式;运维人员负责监控Sqoop的运行状态,包括任务的执行情况、数据传输速率等。

总之,Sqoop是一个强大的数据迁移工具,能够帮助用户在不同类型的数据存储系统之间实现高效、可靠的数据传输。

2.sqoop的历史

Sqoop是一款开源工具,其历史可以追溯到Apache项目的一部分。该项目起始于2009年,最初作为Hadoop的一个第三方模块存在。Sqoop的命名来源于SQL到Hadoop的缩写,即SQL--Hadoop => Sq + oop = Sqoop。它的主要目的是在Hadoop和关系数据库或大型机之间传输数据,使得数据能够在两种不同的存储系统之间高效、可靠地迁移。

在Sqoop的发展历程中,为了实现更快速的部署和迭代开发,它在2012年3月被孵化出来,并在2013年独立成为Apache的一个顶级开源项目。至今,Sqoop主要分为Sqoop1和Sqoop2两个版本,它们各自有不同的开发定位和体系结构,因此互不兼容。

Sqoop的工作原理基于MapReduce的并行处理方式,显著提高了数据传输的效率。它首先需要建立起Hadoop和关系型数据库之间的连接,这通常需要用户提供相关的数据库连接信息。然后,Sqoop利用这些连接信息进行数据的读取或写入操作,包括数据的序列化和反序列化,以及数据的切分和合并。

随着技术的发展和社区的需求变化,Sqoop虽然曾经是一个流行的数据迁移工具,但现在它已经退役,但作为学习来说,是十分不错的练手选择

总的来说,Sqoop的历史是一个开源项目从诞生到发展,再到最终退役的过程,它见证了数据迁移工具在技术发展和用户需求变化中的演变。

3.sqoop的特点

  • 跨平台数据传输:Sqoop能够将关系型数据库中的数据导入到Hadoop组件中,如HDFS、Hive或HBase,同时也能将Hadoop中的数据导出到关系型数据库中。这种跨平台的数据传输能力使得Sqoop在处理大规模数据时具有极高的灵活性。
  • 高效并行处理:Sqoop在导入导出数据时,充分利用了MapReduce计算框架。它根据输入条件生成一个MapReduce作业,在Hadoop集群中运行。这种并行处理方式使得Sqoop在多个节点上同时进行import或export操作,显著提高了数据传输的速度,并提供了良好的并发性和容错性。
  • 灵活的数据处理模式:Sqoop支持insert和update模式,用户可以根据需要选择参数。如果目标位置的内容已经存在,Sqoop可以选择更新该内容;如果不存在,则可以选择插入新内容。这种灵活性使得Sqoop能够适应各种复杂的数据处理需求。
  • 对主流关系型数据库的良好支持:Sqoop对国外的主流关系型数据库支持性更好,这使得它能够在多种数据库环境中无缝工作,无需进行复杂的配置或调整。

4.sqoop的架构

sqoop的架构

Sqoop的架构主要由三个核心部分组成:Sqoop client、Hadoop组件(如HDFS、HBase和Hive)以及关系型数据库。

Sqoop client是用户与Sqoop交互的主要界面,用户可以通过Sqoop client来指定源数据库(如MySQL、Oracle等)的连接信息、目标Hadoop集群的连接信息以及数据传输的各种选项。用户利用Sqoop client来配置导入或导出任务,包括指定源数据库表的名称、目标Hadoop文件系统的目录等。

Hadoop组件则是Sqoop进行数据传输的目标或源。Sqoop可以将数据从关系型数据库导入到HDFS、HBase或Hive等Hadoop组件中,也可以将Hadoop中的数据导出到关系型数据库中。

关系型数据库是Sqoop进行数据迁移的起点或终点,它存储着需要被导入到Hadoop中的数据,或者接收从Hadoop中导出的数据。

Sqoop通过利用MapReduce的并行特点,可以高效地进行数据传输。在导入数据时,Sqoop会根据用户的配置生成一个MapReduce作业,该作业负责从源数据库中读取数据,并根据需要拆分成多个数据切片进行并行处理。在导出数据时,Sqoop同样利用MapReduce来从Hadoop中读取数据并导出到关系型数据库中。

5.sqoop的工作原理

sqoop的工作原理

  • 建立连接:Sqoop首先与源数据库(如MySQL、Oracle等)和目标Hadoop集群建立连接。这一过程中,用户需要提供数据库的连接信息,如主机地址、端口号、用户名和密码等。Sqoop通过这些连接信息来访问数据库中的数据,并将数据读取到Hadoop集群中,或者从Hadoop集群中读取数据并写入到数据库中。

  • 数据迁移配置:用户通过Sqoop的命令行工具或图形界面,指定数据迁移的配置信息。这包括源数据库表的名称、目标Hadoop文件系统的目录、数据转换规则、并行度设置等。Sqoop根据这些配置信息来生成相应的MapReduce作业。

  • MapReduce作业生成与执行:Sqoop根据用户的配置信息,生成一个或多个MapReduce作业。这些作业负责从源数据库中读取数据,进行必要的转换和处理,然后将数据写入到目标Hadoop集群中。由于MapReduce具有并行处理的能力,Sqoop可以充分利用Hadoop集群的资源,实现数据的并行传输,从而显著提高数据迁移的速度和效率。

  • 数据拆分与合并:在数据迁移过程中,Sqoop可能会根据需要对数据进行拆分和合并。拆分是为了更好地利用并行处理能力,将大数据量拆分成多个小数据块,每个数据块由一个MapReduce任务进行处理。合并则是在数据处理完成后,将多个小数据块合并成最终的输出文件。

  • 错误处理与日志记录:Sqoop在数据迁移过程中会进行错误处理和日志记录。如果发生错误或异常情况,Sqoop会记录相关信息,并根据用户的配置进行相应的处理,如重试、跳过或停止任务。同时,Sqoop还会记录数据迁移过程中的详细日志信息,供用户查看和分析。

二、下载安装包

Sqoop下载地址icon-default.png?t=N7T8https://github.com/apache/sqoop

三、Sqoop配置

我使用的主机、从机名称分别为BigData01,BigData02,BigData03,Hadoop配置版本与上篇文章一致,解压到opt下,如有主机、从机名称,ip,版本,路径与我不一致的,更改成自己的即可。

tar -zxvf /root/Downloads/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C/opt/
mv /opt/sqoop-1.4.7.bin__hadoop-2.6.0/ /opt/sqoop

vim /etc/profile
export SQOOP_HOME=/opt/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
source /etc/profile

scp /opt/hive/lib/mysql-connector-java-5.1.46-bin.jar /opt/sqoop/lib/
cp sqoop-env-template.sh sqoop-env.sh


vim sqoop-env.sh
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/hadoopHA
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/hadoopHA
#set the path to where bin/hbase is available
export HBASE_HOME=/opt/hbase-1.2.6
#Set the path to where bin/hive is available
export HIVE_HOME=/opt/hive
#Set the path for where zookeper config dir is
export ZOOCFGDIR=/opt/zookeeper


sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root -P

配置即可

拓展-sqoop使用方法

Sqoop命令

$ sqoop help

$ sqoop help import

$ sqoop help export

数据导入/导出

1、数据从MySQL导入到HDFS

例如:StudentDB.Student表数据导入到HDFS。(默认导入到集群中的/user/hadoop/Student/part-m-00000等系列文件)

sqoop import --connect jdbc:mysql://localhost:3306/StudentDB --username root --password 'password' --table Student

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://localhost:3306/StudentDB --username root --password 'password' --table Student

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://localhost:3306/StudentDB --username root --password 'password' --table Student  --num-mappers 1

sqoop import --connect jdbc:mysql://localhost:3306/StudentDB  --username root  --password 'password'  --table Users --num-mappers 1

注1:“-Dorg.apache.sqoop.splitter.allow_text_splitter=true”参数表示——当表的主键字段不是自增id,而是字符类型时。

注2:“--num-mappers 1”或者“-m 1”,即最后汇总为一个输出文件。

注3:可以指定导入到指定目录下,需要带上“ --warehouse-dir ”参数,比如:

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://localhost:3306/StudentDB --username root --password 'password' --table Student  --warehouse-dir /user/sqoop

注4:默认以短号分隔,可以更换为以\t分隔数据(需带上“--fields-terminated-by ”参数)

sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://localhost:3306/StudentDB --username root --password 'password' --table Student  --warehouse-dir /user/sqoop  --fields-terminated-by '\t' -m1

2、数据从HDFS导出到MySQL

例如:HDFS指定位置的文件数据导出到数据库test的Student表中。比如 /user/sqoop/Student/part-m-00000

sqoop export --connect 'jdbc:mysql://IP或主机名:3306/testDB?useUnicode=true&characterEncode=utf8mb4' --username root -P --table Student --export-dir '/user/sqoop/Student/part-m-00000' --fields-terminated-by '\t'

sqoop export --connect "jdbc:mysql://IP或主机名:3306/testDB?characterEncode=utf8mb4" --username root -P --table Users --export-dir '/user/hadoop/Users/part-m-00000' --fields-terminated-by ','

注1:当导出时出现如下类似错误,

ERROR mapreduce.ExportJobBase: Export job failed!

ERROR tool.ExportTool: Error during export:

       Export job failed!

       at org.apache.sqoop.mapreduce.ExportJobBase.runExport(ExportJobBase.java:445)

       at org.apache.sqoop.manager.SqlManager.exportTable(SqlManager.java:931)

       at org.apache.sqoop.tool.ExportTool.exportTable(ExportTool.java:80)

       at org.apache.sqoop.tool.ExportTool.run(ExportTool.java:99)

       at org.apache.sqoop.Sqoop.run(Sqoop.java:147)

       at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)

       at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)

       at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)

       at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)

       at org.apache.sqoop.Sqoop.main(Sqoop.java:252)

则可

a. 在MySQL中授权:

对其他节点添加了远程访问,但没有对自己添加远程访问权限。

grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;

flush privileges;

单独添加对 BigData01 的远程访问权限

grant all privileges on *.* to 'root'@'BigData01' identified by 'password' with grant option;    

flush privileges;

b. jdbc连接不要使用localhost,可使用host名称或IP地址。

c. 注意:HDFS数据文件的字段值和MySQL的字段对应,且注意字段类型和字符串长度问题。

d. 输入数据字段分隔符,输出数据字段分隔符

e. 若数据中存在中文的,则考虑连接数据库参数中加入 永久设置MySQL字符编码 -- 解决jdbc数据导入由于存在中文字符出错问题!

sqoop export --connect "jdbc:mysql://BigData01:3306/testDB?useUnicode=true&characterEncoding=utf8mb4" --username root -P --table Users --input-fields-terminated-by "," --export-dir '/user/hadoop/Users/part-m-00000' --fields-terminated-by ','

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在Hadoop集群搭建基于YARN的Sqoop,首先需要完成以下几个步骤: 1. 配置计算节点的主机名。根据引用提供的信息,计算节点的主机名应为hadoop-1、hadoop-2、hadoop-3、hadoop-4和hadoop-5。确保这些主机名在集群中正常可用。 2. 下载并安装Hadoop。根据引用提供的信息,可以从Apache官方网站下载Hadoop压缩包。使用wget命令下载hadoop-3.2.2.tar.gz文件,并解压缩。 3. 下载并安装Sqoop。根据引用提供的信息,可以从Apache官方网站下载Sqoop压缩包。使用wget命令下载sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz文件,并解压缩。 4. 配置Hadoop集群的YARN。在Hadoop的配置文件中,找到yarn-site.xml文件,并进行必要的配置。例如,设置yarn.resourcemanager.scheduler.address为ResourceManager的地址,设置yarn.resourcemanager.hostname为计算节点的主机名。 5. 配置Sqoop。在Sqoop的配置文件中,找到sqoop-env-template.sh文件,并进行必要的配置。例如,设置HADOOP_COMMON_HOME和HADOOP_MAPRED_HOME为Hadoop的安装路径。 6. 启动Hadoop集群的YARN和Sqoop服务。在Hadoop的安装路径下,使用start-yarn.sh命令启动YARN服务。在Sqoop的安装路径下,使用./bin/sqoop.sh server start命令启动Sqoop服务。 7. 验证Sqoop是否正常工作。可以使用Sqoop命令行工具执行一些Sqoop任务,例如导入和导出数据,以确保SqoopHadoop集群正常集成。 请注意,这只是一个基本的搭建过程概述,并不包含所有的详细配置和步骤。在实际搭建过程中,可能还需要进行其他配置和调整,以适应特定的环境和需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [用于生产环境Hadoop集群搭建](https://blog.csdn.net/weixin_42756361/article/details/116784485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peng0426.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值