简介

Sqoop是一个用来将Hadoop(Hive、HBase)和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle ,Postgres等)中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中,但是不能将hbase、hive的数据导入到关系型数据库。

下载

因为官方并不建议在生产环境中使用sqoop2,即1.99.7,所以这里我用的是sqoop1,即1.4.7

点击下载:sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

安装

解压

#tar zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /data/hadoop/
#cd /data/hadoop
#mv sqoop-1.4.7.bin__hadoop-2.6.0/ sqoop

配置环境变量~/.bashrc

export SQOOP_HOME=/data/hadoop/sqoop
export PATH=${SQOOP_HOME}/bin:$PATH

编辑完成后,执行命令: source /etc/profile

sqoop配置文件修改

进入 /data/hadoop/sqoop/conf 目录下,
# cd /data/hadoop/sqoop/conf 将sqoop-env-template.sh复制一份,并取名为sqoop-env.sh
# cp sqoop-env-template.sh sqoop-env.sh

在sqoop-env.sh文件最后添加如下参数

# Hadoop
export HADOOP_HOME=/data/hadoop/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
# Native Path
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
# Hadoop end #Hive (如果存在)
export HIVE_HOME=/data/hadoop/hive
export PATH=$HIVE_HOME/bin:$PATH #HBase (如果存在)
export HBASE_HOME=/data/hadoop/hbase
export PATH=$HBASE/bin:$PATH

mysql驱动包

下载地址:https://dev.mysql.com/downloads/connector/j/

解压与拷贝

# tar zxvf mysql-connector-java-8.0..tar.gz
# cd mysql-connector-java-8.0.13/
# cp mysql-connector-java-8.0.13.jar /data/hadoop/sqoop/lib/

sqoop使用

1、查看帮助

# sqoop help
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
import-mainframe Import datasets from a mainframe server to HDFS
job Work with saved jobs
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information

想要显示具体的参数用法,可以使用sqoop help  options

# sqoop help import

2、显示mysql所有数据库(mysql的安装自行百度)

# sqoop list-databases --connect jdbc:mysql://192.168.1.91 --username root --password 123456  注意,url地址要写对,mysql权限要赋予。
如果报如下的错误:
19/07/20 18:23:16 ERROR tool.BaseSqoopTool: Got error creating database manager: java.io.IOException: No manager for connect string: jdbc.mysql://192.168.1.91
这种情况要么是mysql驱动程序拷贝,要么是url地址写错误了 上诉的这个错误就是url写错了,正常应该是 jdbc:mysql://192.168.1.91 这里写成了 jdbc.mysql://192.168.1.91
我在这里卡了好一会,,尴尬的一批。0.0

也可以使用如下的命令查询某一个数据库
# sqoop list-databases --connect jdbc:mysql://192.168.1.91:3306/test?characterEncoding=UTF-8 --username root --password '123456'

3、显示数据库里面的所有表

# sqoop list-tables --connect jdbc:mysql://192.168.1.91:3306/hadoop?characterEncoding=UTF-8 --username root --password '123456'

4、使用sqoop导入数据

  sqoop利用Hadoop MapReduce(只是执行map阶段)来执行数据的导入和导出。

查看import帮助

# sqoop help import
usage: sqoop import [GENERIC-ARGS] [TOOL-ARGS]
....
sqoop import命令有两个基本部分,一个是GENERIC参数,另一个是TOOL参数

在导入前,首先在mysql里面创建一个hadoop数据库

create database hadoop;
use hadoop;
创建表
create table learn(id int,name char,age int);
插入一条简单的数据
insert into  learn values(1,'yjt',22);

导入数据到hdfs

# sqoop import --connect jdbc:mysql://192.168.1.91:3306/hadoop --username root --password '123456' --table learn --target-dir /test
报错了
ERROR tool.ImportTool: Import failed: No primary key could be found for table learn. Please specify one with --split-by or perform a sequential import with '-m 1'.
说这个learn没有主键。报错的后面提示了解决办法,,--split-by  <column> 指定以什么字段分割 -m是指定map任务数 重新执行
# sqoop import --connect jdbc:mysql://192.168.1.91:3306/hadoop --username root --password '123456' --table learn --target-dir /test --split-by id 查看hdfs上的test目录存在的数据

# hadoop fs -cat /test/part-m-00000
1,y,22

说明成功把数据导入到了hdfs

  当使用Sqoop导入命令时,Sqoop将数据集切分成多个分区,并启动map-only任务将数据块传输到hdfs,Sqoop从数据库的元数据中推断出数据类型。所以,sqoop导入可以分为两个过程:

(1) sqoop收集要导入的数据所需的元数据。

(2)Sqoop将map任务提交到Hadoop集群。

  Sqoop是不直接连接到关系型数据库或者仓库来导入(导出)数据的。Sqoop通过运行MapReduce作业来连接到数据库,读取数据并将数据导入到hdfs。

在上诉的导入命令中,需要输入一大堆的参数,能不能把一些每次导入需要的选项保存下来呢,,答案是可以的,可以使用选项文件(--options-file)参数,如下:

创建文本文件,以保存参数

# cat sqoop-option-file.txt
--connect
jdbc:mysql://192.168.1.91/hadoop
--username
root
--password

执行sqoop导入操作

# sqoop import --options-file sqoop-option-file.txt --table learn --target-dir /test1 --split-by id

5、Sqoop是如何导入数据的???

(1)Sqoop连接数据库。

(2)获取表的元数据

(3)生成一个Java类并进行编译

(4)连接到Hadoop集群

(5)在Hadoop集群执行MapReduce作业

(6)MapReduce使用在步骤2中生成的元数据执行map任务来完成导入过程

(7)MapReduce将输出作为hdfs中的一组文件生成

6、指定密码的几种方式

(1)使用--password   password

(2)使用--p 以交互式方式输入密码

(3)使用--password-file  password-file  从文件中读取密码

(4)保存到sqoop metastore中,可以通过在sqoop-site.xml文件设置sqoop.metastore.client.record.password属性来设置明文密码。

 

参考文章:

https://www.cnblogs.com/frankdeng/p/9132194.html

https://www.cnblogs.com/frankdeng/p/9067092.html

https://www.cnblogs.com/cenyuhai/p/3306037.html

官网

安装 sqoop的更多相关文章

  1. 安装sqoop

    安装sqoop 1.默认已经安装好java+hadoop 2.下载对应hadoop版本的sqoop版本 3.解压安装包 tar zxvf sqoop-1.4.6.bin__hadoop-2.0.4-a ...

  2. 简易安装sqoop

    版本 :hive-0.13.1-cdh5.3.6.tar.gz 1:解压 然后 进到 conf 目录 修改 sqoop-env.sh   2:如果使用mysql 数据库 要将 mysql驱动包拷贝到 ...

  3. centos6.5系统hadoop2.7安装sqoop

    一.sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ...

  4. 安装sqoop 1.99.4

    参考http://sqoop.apache.org/docs/1.99.4/Installation.html 1.简介 sqoop2分为server和client两部分.server作为maprde ...

  5. ubuntu - 安装sqoop

    解析过程 参考:https://www.cnblogs.com/qingyunzong/p/8807252.html#_label4 一.下载 二.解压到指定目录 三.配置sqoop环境变量并生效 四 ...

  6. Linux安装Sqoop及基础使用

    下载Sqoop 官网地址 http://sqoop.apache.org/ wget http://mirrors.hust.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7 ...

  7. centos 7 安装sqoop 1.4.7

    1. 下载sqoop1.4.7 cd /home/workspace wget https://mirrors.tuna.tsinghua.edu.cn/apache/sqoop/1.4.7/sqoo ...

  8. Sqoop安装及操作

    一.集群环境: Hostname IP Hadoop版本 Hadoop 功能 系统 node1 192.168.1.151 0.20.0 namenode hive+sqoop rhel5.4X86 ...

  9. Sqoop安装配置及数据导入导出

    前置条件 已经成功安装配置Hadoop和Mysql数据库服务器,如果将数据导入或从Hbase导出,还应该已经成功安装配置Hbase. 下载sqoop和Mysql的JDBC驱动 sqoop-1.2.0- ...

随机推荐

  1. opencv 源码分析 CUDA可分离滤波器设计 ( 发现OpenCV的cuda真TM慢 )

    1. 主函数 void SeparableLinearFilter::apply(InputArray _src, OutputArray _dst, Stream& _stream) { G ...

  2. 启动Nginx服务失败:Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

    首次接触nginx,安装完使用命令 service nignx restart  后,出现这个错误,并按照提示给出的命令查看错误详情  systemctl status nginx.service   ...

  3. SpringMVC、SpringFox和Swagger整合项目实例

    目标 在做项目的时候,有时候需要提供其它平台(如业务平台)相关的HTTP接口,业务平台则通过开放的HTTP接口获取相关的内容,并完成自身业务~ 提供对外开放HTTP API接口,比较常用的是采用Spr ...

  4. react基础学习和react服务端渲染框架next.js踩坑

    说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...

  5. 部署python项目到linux服务器

    最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是M ...

  6. Android笔记(五十二) 侧滑菜单SlidingMenu

    SlidingMenu是一个优秀的开源项目,可以实现侧滑菜单,简单介绍一下这SlidingMenu的使用: 常用属性和方法: setTouchModeAbove(int i )是否可以通过滑动手势打开 ...

  7. 一个97年测试妹纸的成长经历,转正直接涨薪2K

    这篇文章,涉及测试团队管理.测试流程建设.测试从业者能力成长.优秀测试从业者的状态.以及同样是两年的Tester,为何他人如此优秀 . 一切的一切,都是有原因的 . 期望这篇文章,对关注「简尚」公号的 ...

  8. 用java刷剑指offer(二叉树中和为某一值的路径)

    题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...

  9. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.

    使用idea连接数据库的时候,报错为 [08001] Could not create connection to database server. Attempted reconnect 3 tim ...

  10. JQuery系列(1) - 选择器、构造函数、实例方法

    概述 JQuery是一个JavaScript库,jQuery的核心思想是“先选中某些网页元素,然后对其进行某种处理”(find something, do something),也就是说,先选择后处理 ...