Sqoop 是什么及安装

Hadoop sqoop

Apache sqoop (SQL to Hadoop)

Sqoop is a tool designed to transfer data between Hadoop and relational databases or mainframes. You can use Sqoop to import data from a relational database management system (RDBMS) such as MySQL or Oracle or a mainframe into the Hadoop Distributed File System (HDFS), transform the data in Hadoop MapReduce, and then export the data back into an RDBMS.

Sqoop是一种用于在Hadoop和关系数据库或大型机之间传输数据的工具。你可以使用Sqoop从一个关系数据库管理系统(RDBMS)中导入数据,比如MySQL或Oracle,或者一个大型机到Hadoop分布式文件系统(HDFS),在Hadoop MapReduce中转换数据,然后将数据导出到RDBMS中。

sqoop 安装

1.解压

2.配置sqoop-env.sh文件

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6 #Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6 #Set the path to where bin/hive is available
export HIVE_HOME=/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6

3.拷贝 MySQL 连接 jar 包到 lib 目录下

4.使用工具

# 帮助文档
bin/sqoop help bin/sqoop list-databases --help # 连接数据库
bin/sqoop list-databases \
--connect jdbc:mysql://hostname-ubuntu:3306 \
--username root \
--password ubuntu

Imports( RDBMS > HDFS )

底层通过JDBC连接数据库,通过生成 JAVA (只有 map 程序) 代码,编译成 jar ,经过 YARN 执行

#执行命令(五要素)
bin/sqoop import \
--connect jdbc:mysql://hostname-ubuntu:3306/test \
--username root \
--password ubuntu \
--table user \
--target-dir /user/cen/sqoop/imp_user \
# 注意文件夹不能存在
# 若此项不设置默认会在 /user/cen/tablename/ 创建文件夹
# 可添加以下选项解决 # 删除目标目录
--delete-target-dir \ # 选择列
--columns id,name \ # 增加查询条件
--where "age = '18'" \ # 设置压缩
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec # 设置输出的分隔符
--fields-terminated-by '\t' \ # 设置map数目
--num-mappers 1 \ # 设置文件存储格式(默认是textfile)
--as-parquetfile \ # 设置直接从 MySQL 直接导入(不经过MapReduce)
--direct #日志分析
Running Sqoop version: 1.4.5-cdh5.3.6 说明执行版本
Setting your password on the command-line is insecure. Consider using -P instead. 这样使用密码是不安全的,推荐使用-p的方式
Preparing to use a MySQL streaming resultset. 使用MySQL流导出数据
Beginning code generation 开始生成Java代码
Executing SQL statement: SELECT t.* FROM `user` AS t LIMIT 1 执行SQL查询语句
Executing SQL statement: SELECT t.* FROM `user` AS t LIMIT 1 执行SQL查询语句
HADOOP_MAPRED_HOME is /opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6 Hadoop的目录是。。。
Note: /tmp/sqoop-cen/compile/55ff43412ccc6eae25cf74ff6a4b119a/user.java uses or overrides a deprecated API. 生成jar
Note: Recompile with -Xlint:deprecation for details.
Writing jar file: /tmp/sqoop-cen/compile/55ff43412ccc6eae25cf74ff6a4b119a/user.jar 写入jar文件
It looks like you are importing from mysql.
This transfer can be faster! Use the --direct 这个转换可以更快,使用直接模式
option to exercise a MySQL-specific fast path.
Setting zero DATETIME behavior to convertToNull (mysql)
Beginning import of user 开始导入数据
Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
mapred.jar is deprecated. Instead, use mapreduce.job.jar 使用mapreduce的jar包

使用SQL查询语句(无需 tablename 无需选择列 无需where )

bin/sqoop import \
--connect jdbc:mysql://hostname-ubuntu:3306/test \
--username root \
--password ubuntu \
--query 'select id from user where $CONDITIONS' \
--target-dir /user/cen/sqoop/imp_user_query \
--split-by id
  • 错误:When importing query results in parallel, you must specify --split-by.

  • 增加:--split-by id

  • 错误:Query [select id from user] must contain '$CONDITIONS' in WHERE clause.

  • 解决:--query 'select id from user where $CONDITIONS' \

增量数据导入Incremental import(只导入新增加的)

1. query 对时间戳进行条件查询(更好用)

where createtime => 20170721000000 and createtimt < 201707220000

2. 使用 sqoop 的参数

--check-column Source column to check for incremental

change 根据哪一个字段进行查询

--incremental Define an incremental import of type

'append' or 'lastmodified' 追加方式

--last-value Last imported value in the incremental

check column 查询的开始值

Export( HDFS > RDBMS )( Hive > RDBMS )

底层通过JDBC连接数据库,通过生成 JAVA (只有 map 程序) 代码,编译成 jar ,经过 YARN 执行

#执行命令(五要素)
bin/sqoop export \
--connect jdbc:mysql://hostname-ubuntu:3306/test \
--username root \
--password ubuntu \
--table user \
--export-dir /user/cen/sqoop/imp_user

Import Hive table

从 RDBMS 导入到 Hive 表中,底层实现:正常 Import > HDFS > load

# 关系型数据库 4 要素(IP+database/username/pw/table) + Hive 4 要素(import/database/table/分隔符)
bin/sqoop import \
--connect jdbc:mysql://hostname-ubuntu:3306/test \
--username root \
--password ubuntu \
--table user \
--hive-import \
--hive-database default \
--hive-table user \
--fields-terminated-by '\t' \
--delete-target-dir \
# 需要缓冲目录,若目录存在则删除 --create-hive-table #若表不存在,需要创建的话

通过文件执行 sqoop 命令

!!格式如下:

#这是注释!!
bin/sqoop
import
--connect
jdbc:mysql://hostname-ubuntu:3306/test
--username
root
--password
ubuntu
--table
user
--target-dir
/user/cen/sqoop/imp_user

执行:

sqoop --options-file /opt/datas/xxx.xx

Sqoop 工具使用的更多相关文章

  1. 使用sqoop工具从oracle导入数据

    sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 从RDBMS中抽取出的数据可以被Ma ...

  2. sqoop工具从oracle导入数据2

    sqoop工具从oracle导入数据 sqoop工具是hadoop下连接关系型数据库和Hadoop的桥梁,支持关系型数据库和hive.hdfs,hbase之间数据的相互导入,可以使用全表导入和增量导入 ...

  3. Sqoop工具

    简介 SQOOP是用于对数据进行导入导出的. (1)把MySQL.Oracle等数据库中的数据导入到HDFS.Hive.HBase中 (2)把HDFS.Hive.HBase中的数据导出到MySQL.O ...

  4. hive数据导入Sqoop工具

    下载Sqoop ,直接解压缩;然后导入2个环境变量 1.导入oracle数据库中表emp的数据到hive表中 1.导入到HDFS中 $ sqoop import --connect jdbc:mysq ...

  5. sqoop工具介绍(hdfs与关系型数据库进行数据导入导出)

    数据表 第一类:数据库中的数据导入到HDFS上 #数据库驱动jar包用mysql-connector-java--bin,否则有可能报错! ./sqoop import --connect jdbc: ...

  6. 初识sqoop

    Sqoop 产生背景 Sqoop 的产生主要源于以下几种需求: 1.多数使用 Hadoop 技术处理大数据业务的企业,有大量的数据存储在传统的关系型数据库(RDBMS)中. 2.由于缺乏工具的支持,对 ...

  7. 大数据之sqoop

    一.安装: 1 解压然后把mysql的驱动放在$SQOOP_HOME/lib 目录中2. conf/sqoop-en.sh export HADOOP_COMMON_HOME=/home/hadoop ...

  8. sqoop的安装与使用

    1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具.充分利用MapReduce并行特点以批处理的方式加快传输数据.发展至今 ...

  9. Sqoop安装与使用(sqoop-1.4.5 on hadoop 1.0.4)

    1.什么是Sqoop Sqoop即 SQL to Hadoop ,是一款方便的在传统型数据库与Hadoop之间进行数据迁移的工具,充分利用MapReduce并行特点以批处理的方式加快数据传输,发展至今 ...

随机推荐

  1. <Android 基础(九)> Ndk配置与Demo

    介绍 The NDK is a toolset that allows you to implement parts of your app using native-code languages s ...

  2. django choice字段模板展示

    class UserInfo(AbstractUserInfo): """ 用户表 """ gender_choice = ( (1,&qu ...

  3. GitHub教程(三) 本地仓库托管到GitHub

    本文开头先特别声明一下:由于GitHub教程属于Git系列教程的GitHub子篇章,因此GitHub教程中将不再详细介绍Git操作命令及其用法,我会根据实际需要穿插着回顾Git操作命令.如果读者需要学 ...

  4. python3绘图示例6-2(基于matplotlib,绘图流程介绍及设置等)

    #!/usr/bin/env python# -*- coding:utf-8 -*- import os import numpy as npimport matplotlib as mpltfro ...

  5. 酷狗音乐PC端怎么使用听歌识曲功能?

    生活中很多时候会听到一些美妙的音乐,耳熟或者动听却不知道它的名字.就像第一眼看到你心动的那个她却不知她叫什么.移动端有酷狗音乐的听歌识曲.现在PC端也有了相同的功能,每当我们看到一部精彩影视剧听到美妙 ...

  6. April 4 2017 Week 14 Tuesday

    Problems are not stop signs, they are guidelines. 问题不是休止符,而是引向标. It is ture during our explorations ...

  7. java 内存举例

    1. java内存的主要划分 2.  OOTest02.java 的内存划分 public class OOTest02{ public static void main(String[] args) ...

  8. Mac安装protobuf 流程

    下载 https://github.com/google/protobuf/releases 找到对应版本下载 编译 cd protobuf./autogen.sh./configuremake 安装 ...

  9. python将图像转化为矩阵

    Image.fromarray(matrix).show()

  10. override与重载的区别

    override与重载的区别override 与重载的区别,重载是方法的名称相同.参数或参数类型不同,进行多次重载以适应不同的需要 Override 是进行基类中函数的重写.