草庐IT

sqoop入门教程

北京小辉 2023-03-28 原文

目录

一、Sqoop概述

       1、简介
       2、Sqoop架构原理
       3、Sqoop连接器

二、Sqoop安装

       1、sqoop下载解压
       2、sqoop配置文件
       3、mysql的jar包设置
       4、sqoop环境变量设置
       5、sqoop安装验证
              1)sqoop环境变量验证
              2)sqoop连接mysql验证

三、Sqoop导入

       1、操作前提;
              1) 将数据库连接驱动拷贝到$SQOOP_HOME/lib里;
              2) 启动软件;
       2、导入机制;
       3、导入数据与HDFS;
       4、导入数据与Hive;
       5、将数据导入Hbase;

四、遇到的问题及解决

       1、错误01
       2、错误02
       3、错误03



一、Sqoop概述

       1、简介

       Apache Sqoop(TM)是一种用于在Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具。2012年3月成功孵化,现已成为顶级Apache项目。

概念图

官网地址: http://sqoop.apache.org       2、Sqoop架构原理

       一个组织中有价值的数据都存储在关系型数据库系统等结构化存储器中。Sqoop允许用户将数据从结构化存储器抽取到Hadoop中,用亍迚一步的处理。抽取出的数据可以被MapReduce程序使用,也可以被其他类似亍Hive的工具使用。一旦生成最终的分析结果,Sqoop便可以将这些结果导回数据存储器,供其他客户端使用。

Sqoop架构图


       Sqoop工具接收到客户端的shell命令或者Java api命令后,通过Sqoop中的任务翻译器(TaskTranslator)将命令转换为对应的MapReduce任务,而后将关系型数据库和Hadoop中的数据迚行相互转移,终而完成数据的拷贝。


       

3、Sqoop连接器

       Sqoop拥有一个可扩展的框架,使得它能够从(向)任何支持批量数据传输的外部存储系统导入(导出)数据。


       一个Sqoop连接器(connector)就是这个框架下的一个模块化组件,用于支持Sqoop的导入和导出操作。


       Sqoop内置的连接器能够支持大多数常用的关系数据库系统,包括MySQL、Oracle、SQLserver和DB2。同时还有一个通用的JDBC连接器,性能都绊过了优化。


       除了内置的Sqoop连接器外,还有很多针对各种数据存储器的第三方连接器可用,能够支持对企业级数据仓库(包括Netezza、Teradata和Oracle)和NoSQL存储器(例如Couchbase)的连接。这些连接器必须另外单独下载,幵安装说明使用。

二、Sqoop安装

       1、sqoop下载解压

下载地址: http://mirror.bit.edu.cn/apache/sqoop/1.4.7/


解压及更名

tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7
       2、sqoop配置文件

sqoop/conf/ sqoop-env.sh文件

[root@hadoop11 app]# cd sqoop-1.4.7/conf/
[root@hadoop11 conf]# mv sqoop-env-template.sh sqoop-env.sh
编辑 sqoop-env.sh脚本

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME= /usr/app/hadoop-2.7.3

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME= /usr/app/hadoop-2.7.3

#set the path to where bin/hbase is available
export HBASE_HOME= /usr/app/hbase-1.2.6

#Set the path to where bin/hive is available
export HIVE_HOME= /usr/app/hive-1.2.1

#Set the path for where zookeperconfigdir is
export ZOOCFGDIR= /usr/app/zookeeper-3.4.8
       3、mysql的jar包设置
将mysql-connector-java-5.1.36-bin.jar放到sqoop/lib目录下

备注:CDH5.14.4的sqoop中lib包存储位置,如果没有mysql的驱动则报错。找不到mysql驱动

       4、sqoop环境变量设置

#配置Sqoop环境变量
[root@hadoop11 app]# vi /etc/profile
export SQOOP_HOME=/usr/app/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin
#使环境变量配置生效
[root@hadoop11 app]# source /etc/profile
       5、sqoop安装验证
              1)sqoop环境变量验证

[root@hadoop11 ~]# sqoop-version

              2)sqoop连接mysql验证

[root@hadoop11 bin]# ./sqoop-list-tables --connect jdbc:mysql://localhost:3306/mysql --username root -P

输入mysql密码:123456

三、Sqoop导入

       上面案例介绉如何将mysql的表中数据导入到hadoop的hdfs中。下面系统介绉下Sqoop的导入。

       1、操作前提;

              1) 将数据库连接驱动拷贝到$SQOOP_HOME/lib里;

              2) 启动软件;

1、zookeeper 2、Hadoop 3、hbase
       2、导入机制;

       Sqoop是通过一个MapReduce作业从数据库中导入一个表,这个作业从表中抽取一行行记录,然后将记录写入HDFS。


       • 在导入开始之前,Sqoop使用JDBC来检查将要导入的表。

       • 它检索出表中所有的列以及列的SQL数据类型。这些SQL类型(VARCHAR、INTEGER等)被映射到Java数据类型(String、Integer等),在MapReduce应用中将使用这些对应的Java类型来保存字段的值。

       3、导入数据与HDFS;

1、加载mysql表

#建立一个数据库sqoop
CREATE DATABASE sqoop DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE sqoop;
CREATE TABLE student #学生信息表
(
stuID char(10) primary key, #学生编号
stuName char(10) NOT NULL , #学生名称
major char(50) NOT NULL #专业
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

#学生信息表中插入数据
INSERT INTO student(stuID,stuName,major)VALUES('1001','林林','计算机');
INSERT INTO student(stuID,stuName,major)VALUES('1002','白杨','计算机');
INSERT INTO student(stuID,stuName,major)VALUES('1003','虎子','英语');
INSERT INTO student(stuID,stuName,major)VALUES('1004','北漂的雪','工商管理');
INSERT INTO student(stuID,stuName,major)VALUES('1005','五月','数学');


       使用系统库mysql中的student表

       Sqoop的import工具会运行一个MapReduce作业,该作业会连接MySQL数据库幵读取表中的数据。默认情况下,该作业会幵行使用4个map仸务来加速导入过程。每个仸务都会将其所导入的数据写到一个单独文件,但所有4个文件都位亍同一个目录中。

[root@hadoop11 ~]# sqoop import --connect jdbc:mysql://hadoop11:3306/sqoop --username root --password 123456 --table student --target-dir /sqoop/student --delete-target-dir --num-mappers 1 --fields-terminated-by "\t"
特别指出:sqoop与hadoop存在版本问题,可能会导致命令运行报错。

命令解释:( --delete-target-dir 这个是删除目录)


导入后,在hdfs目录显示如下:


       4、导入数据与Hive;

       对于很多类型的分析人员来说,使用类似于Hive的系统来处理关系操作有利亍加快分析仸务的开发。

       Hive和Sqoop共同构成了一个强大的服务于分析任务的工具链。

       上面任务执行成功后,经过检测,发现Hive表结构中的数据类型与MySQL对应列有如下关系:

MySQL(bigint) --> Hive(bigint)
MySQL(tinyint) --> Hive(tinyint)
MySQL(int) --> Hive(int)
MySQL(double) --> Hive(double)
MySQL(bit) --> Hive(boolean)
MySQL(varchar) --> Hive(string)
MySQL(decimal) --> Hive(double)
MySQL(date/timestamp) --> Hive(string)
导入hive已经创建好的表中,建立hive表

create EXTERNAL table default.student(stuID string,stuName string, major string)row format delimited fields terminated by '\t';

sqoop import --connect jdbc:mysql://hadoop11:3306/sqoop --username root --password 123456 --table student --fields-terminated-by '\t' --delete-target -dir --num-mappers 1 --hive-import --hive-database default --hive-table student
       看日志输出可以看出 在执行map任务之后 又执行了load data


导入后,在hdfs目录显示如下:


导入后,在hive目录显示如下:

       5、将数据导入Hbase;
在hbase中创建表及列簇

create 'sqoop' , 'student'

Sqoop将数据导入到hbase中

sqoop import -D org.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://127.0.0.1:3306/sqoop --table student --hbase-table sqoop --column-family student --hbase-row-key stuID --hbase-create-table --username root --password 123456

结果如下:


参数解说:

--connect jdbc:mysql://127.0.0.1:3306/sqoop 表示进程或者本地Mysql服务的URI,3306是Mysql默认监听端口,rsearch是数据库,若是其他数据库,如Oracle,叧需修改URI即可。
--table student表示导出sqoop 数据库的student表。
--hbase-table sqoop 表示在HBase中建立表sqoop。
--column-family student表示在表sqoop中建立列族student
--hbase-row-key stuID表示表A的row-key是student表的id字段。
--hbase-create-table表示在HBase中建立表。
--username root 表示使用用户root连接Mysql。
--password 123456 表示使用用户root连接Mysql的密码。
Hive使用Hbase数据通过创建外部表

CREATE EXTERNAL TABLE default.sqoopHbase(
stuID STRING,
stuName STRING,
major STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, student:stuName,student:major")
TBLPROPERTIES("hbase.table.name"= "sqoop");

四、遇到的问题及解决

       1、错误01

       报错信息:" Generating splits for a textual index column allowed only in case of “-Dorg.apache.sqoop.splitter.allow_text_splitter=true” property passed as a parameter"。
       主要问题是“–split-by id”这个参数指定的id是一个文本格式,所以需要在命令中加入选项"-Dorg.apache.sqoop.splitter.allow_text_splitter=true",补齐命令:

sqoop import -D org.apache.sqoop.splitter.allow_text_splitter=true --connect jdbc:mysql://127.0.0.1:3306/sqoop --table student --hbase-table sqoop --column-family student --hbase-row-key stuID --hbase-create-table --username root --password 123456
       2、错误02
       Sqoop导入mysql表中的数据到hive,出现如下错误:

ERROR hive.HiveConfig: Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.
        解决方法:

往/etc/profile最后加入 export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*
然后刷新配置,source /etc/profile
       3、错误03
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf

18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.hive.HiveImport.executeScript(HiveImport.java:337)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.hive.HiveImport.importTable(HiveImport.java:241)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:530)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:621)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.Sqoop.runTool(Sqoop.java:243)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.Sqoop.main(Sqoop.java:252)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at java.lang.Class.forName0(Native Method)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at java.lang.Class.forName(Class.java:264)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - at org.apache.sqoop.hive.HiveConfig.getHiveConf(HiveConfig.java:44)
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - ... 12 more
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO -
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a INFO - Process completed unsuccessfully in 17 seconds.
18-01-2019 18:19:20 CST s_apptest_data_access_accessTest_a ERROR - Job run failed!
解决:

在hdfs用户下添加环境变量HADOOP_CLASSPATH
# sudo su hdfs;
# vi ~/.bash_profile
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/opt/cloudera/parcels/CDH-5.14.4-1.cdh5.14.4.p0.3/lib/hive/lib/*
PATH=$PATH:$HOME/bin

# source ~/.bash_profile
北京小辉微信公众号

大数据资料分享请关注


有关sqoop入门教程的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  4. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  5. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  6. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  7. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  8. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  9. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  10. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

随机推荐