sqoop入门教程

author author     2022-12-29     648

关键词:


目录

一、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项目。

sqoop入门教程_hadoop

概念图

sqoop入门教程_sqoop_02

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

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

sqoop入门教程_Sqoop教程_03

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/

sqoop入门教程_java_04

sqoop入门教程_sqoop_05


解压及更名

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驱动

sqoop入门教程_sqoop_06

       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

sqoop入门教程_Sqoop教程_07

              2)sqoop连接mysql验证

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

输入mysql密码:123456

sqoop入门教程_Sqoop教程_08

sqoop入门教程_java_09

三、Sqoop导入

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

       1、操作前提;

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

sqoop入门教程_hadoop_10

              2) 启动软件;

1、zookeeper  2、Hadoop  3、hbase

       2、导入机制;

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

sqoop入门教程_hadoop_11


       • 在导入开始之前,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,五月,数学);

sqoop入门教程_java_12

sqoop入门教程_java_13


       使用系统库mysql中的student表

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

sqoop入门教程_sqoop_14

[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 这个是删除目录)

sqoop入门教程_hadoop_15


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

sqoop入门教程_hadoop_16


       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入门教程_java_17

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

sqoop入门教程_java_18


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

sqoop入门教程_sqoop_19


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

sqoop入门教程_hadoop_20

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

create sqoop , student

sqoop入门教程_java_21

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

sqoop入门教程_hadoop_22

结果如下:

sqoop入门教程_sqoop_23


参数解说:

--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");

sqoop入门教程_hadoop_24

四、遇到的问题及解决

       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入门教程_Sqoop教程_25

大数据资料分享请关注


sqoop从入门到实战(代码片段)

第1章Sqoop简介  Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql,postgresql,...)间进行数据的高校传递,可以将一个关系型数据库(例如:MySQL,Oracle,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数... 查看详情

sqoop使用入门(代码片段)

sqoop是apache旗下,用于关系型数据库和hadoop之间传输数据的工具,sqoop可以用在离线分析中,将保存在mysql的业务数据传输到hive数仓,数仓分析完得到结果,再通过sqoop传输到mysql,最后通过web+echart来进行图表展示,更加直观的展... 查看详情

hive/hbase/sqoop的安装教程(代码片段)

Hive/Hbase/Sqoop的安装教程 HIVEINSTALL1.下载安装包:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.3/2.上传到Linux指定目录,解压:mkdirhivemvapache-hive-2.3.3-bin.tar.gzhivetar-zxvfapache-hive-2.3.3-bin.tar 查看详情

Apache Sqoop 连接错误

...uderaVMCDH4,但默认情况下它没有预安装MySql。我按照cloudera教程安装了MySql。现在我试图从MySQl列出数据库,但它失败了。是否存在任何jdbc连接问题?[cloude 查看详情

HDP 2.2 Sandbox 找不到 SQOOP 目录

】HDP2.2Sandbox找不到SQOOP目录【英文标题】:HDP2.2SandboxCouldnotfindSQOOPdirectory【发布时间】:2015-02-0919:29:29【问题描述】:我正在学习教程http://hortonworks.com/hadoop-tutorial/import-microsoft-sql-server-hortonworks-sandbox-using-sqoop/我找不到/usr/lib 查看详情

[sqoop]sqoop

    查看详情

sqoop导入导出

sqoop产生背景 什么是sqoop sqoop的优势 sqoop1与sqoop2的比较  为什么选择sqoop1 sqoop在hadoop生态体系中的位置 sqoop基本架构 sqoopimport原理  sqoopimport详细流程 sqoopexport原理 sqoop安 查看详情

[sqoop]sqoop命令

 官网文档:http://sqoop.apache.org/docs/1.99.7/user/CommandLineClient.html#delete-link-function 一、了解sqoop数据导入的几个重要概念(1)connector:sqoop2中预定了各种链接,这些链接是一些配置模板。#查看预定制的连接器sqoop:000>showconnec... 查看详情

[sqoop]sqoop使用

Sqoop的本质还是一个命令行工具,和HDFS,MapReduce相比,并没有什么高深的理论。我们可以通过sqoophelp命令来查看sqoop的命令选项,如下:16/11/1320:10:17INFOsqoop.Sqoop:RunningSqoopversion:1.4.6usage:sqoopCOMMAND[ARGS]Availablecommands: codegen & 查看详情

sqoop介绍

Sqoop介绍http://sqoop.apache.orghttp://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html 1.什么是Sqoop?将关系数据库(oracle,mysql,postgresql)数据与hadoop数据进行转换的工具2.Sqoop架构?sqoop架构非常简单,是hadoop生态系统最简单的框架sqoop1由clie 查看详情

如何从 Sqoop 选项生成 Sqoop 命令?

】如何从Sqoop选项生成Sqoop命令?【英文标题】:HowtogenerateSqoopcommandfromSqoopoptions?【发布时间】:2017-04-2012:21:01【问题描述】:我想生成Sqoop命令以从Mysql导入RDBMS表。我将sqoop命令存储在数据库中,然后使用此命令创建Oozie工作流... 查看详情

[sqoop]sqoop小试牛刀

 sqoop1.4.6 小试牛刀 sqoopimport参数 1.mysql导入到hdfs中./sqoopimport--connectjdbc:mysql://mysql:3306/part--usernameroot--password123456--tablebig_hdfs-m1--target-dir/sqoop/import/mysql/&nbs 查看详情

sqoop(代码片段)

sqoop1Sqoop简介2Sqoop原理3Sqoop安装3.1下载并解压3.2修改配置文件3.3拷贝JDBC驱动3.4验证Sqoop3.5测试Sqoop是否能够成功连接数据库4Sqoop的简单使用案例4.1导入数据4.1.1RDBMS到HDFS4.1.2RDBMS到Hive4.1.3RDBMS到Hbase4.2、导出数据4.2.1HIVE/HDFS到RDBMS4.3脚... 查看详情

sqoop(代码片段)

sqoop1Sqoop简介2Sqoop原理3Sqoop安装3.1下载并解压3.2修改配置文件3.3拷贝JDBC驱动3.4验证Sqoop3.5测试Sqoop是否能够成功连接数据库4Sqoop的简单使用案例4.1导入数据4.1.1RDBMS到HDFS4.1.2RDBMS到Hive4.1.3RDBMS到Hbase4.2、导出数据4.2.1HIVE/HDFS到RDBMS4.3脚... 查看详情

sqoop(代码片段)

sqoop1Sqoop简介2Sqoop原理3Sqoop安装3.1下载并解压3.2修改配置文件3.3拷贝JDBC驱动3.4验证Sqoop3.5测试Sqoop是否能够成功连接数据库4Sqoop的简单使用案例4.1导入数据4.1.1RDBMS到HDFS4.1.2RDBMS到Hive4.1.3RDBMS到Hbase4.2、导出数据4.2.1HIVE/HDFS到RDBMS4.3脚... 查看详情

sqoop1与sqoop2

Sqoop(sqoop.apache.org)工具是hadoop环境下连接关系数据库,和hadoop存储系统的桥梁,支持多种关系数据源和hive,hdfs,hbase的相互导入。一般情况下,关系数据表存在于线上环境的备份环境,需要每天进行数据导入,根据每天的数据量... 查看详情

sqoop2安装

下载http://www-us.apache.org/dist/sqoop/ 打开以上链接,开始下载sqoop2   下载后得到:sqoop-1.99.7-bin-hadoop200.tar.gz文件其中sqoop1和sqoop2区别可以参考以下链接 重拾初心——Sqoop1和Sqoop2的刨析对比 http://blog.csdn.ne 查看详情

安装sqoop,给bin/sqoop-list-databases: line 26: /Users/apple/sqoop: 是一个目录

】安装sqoop,给bin/sqoop-list-databases:line26:/Users/apple/sqoop:是一个目录【英文标题】:Installingsqoop,givebin/sqoop-list-databases:line26:/Users/apple/sqoop:isadirectory【发布时间】:2015-09-1510:15:30【问题描述】:当我安装sqoop时,它给了我这个错误。... 查看详情