Sqoop学习笔记

一、概述

sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。

        核心的功能有两个:1、导入、迁入   2、导出、迁出

导入数据:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统

导出数据:从 Hadoop 的文件系统中导出数据到关系数据库 mysql 等 Sqoop 的本质还是一个命令行工具,和 HDFS,Hive 相比,并没有什么高深的理论。

sqoop:

工具:本质就是迁移数据, 迁移的方式:就是把sqoop的迁移命令转换成MR程序

hive

工具,本质就是执行计算,依赖于HDFS存储数据,把SQL转换成MR程序

二、工作机制

将导入或导出命令翻译成 MapReduce 程序来实现 在翻译出的 MapReduce 中主要是对 InputFormat 和 OutputFormat 进行定制

三、安装及基本命令

sqoop用法手册

1、修改 sqoop-env.sh

export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.7.5

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.7.5

#set the path to where bin/hbase is available
export HBASE_HOME=/home/hadoop/apps/hbase-1.2.6

#Set the path to where bin/hive is available
export HIVE_HOME=/home/hadoop/apps/apache-hive-2.3.3-bin

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/home/hadoop/apps/zookeeper-3.4.10/conf

2、导入需要的jar包

hive/lib下mysql 驱动包,拷贝到sqoop的lib

hive/lib下hive-common-2.3.3.jar包,拷贝到sqoop的lib

hive/lib下hive-exec-1.2.1.jar,拷贝到sqoop的lib

3、验证安装是否成功

 sqoop-version 或者 sqoop version

4、基本操作

(1)列出mysql有哪些数据库

sqoop list-databases \
--connect jdbc:mysql://localhost:3306/ \
--username root \
--password 123456

如果报错: Access denied for user 'root'@'hdp-1' (using password: YES)

将hdp-1修改成localhost,或者用hdp-2操作hdp-1的mysql

(2)列出某个数据库有哪些表

sqoop list-tables \
--connect jdbc:mysql://hdp-1:3306/mysql \
--username root \
--password 123456

(3)创建一张跟mysql中的help_keyword表一样的hive表hk:

sqoop create-hive-table \
--connect jdbc:mysql://hdp-1:3306/sqoop \
--username root \
--password 123456 \
--table tb3 \
--hive-table sqoop

版本问题会导致 ERROR tool.CreateHiveTableTool: Encountered IOException running create table job: java.io.IOException: Hive exited with status 1

四、数据导入

一 、 从RDBMS导入到HDFS中

1、语法格式

sqoop import (generic-args) (import-args)

2、常用参数

--connect <jdbc-uri> jdbc 连接地址
--connection-manager <class-name> 连接管理者
--driver <class-name> 驱动类
--hadoop-mapred-home <dir> $HADOOP_MAPRED_HOME
--help help 信息
-P 从命令行输入密码
--password <password> 密码
--username <username> 账号
--verbose 打印流程信息
--connection-param-file <filename> 可选参数

普通导入:导入mysql库中的tb3数据到HDFS上

导入的默认路径:/user/hadoop/tb3

./sqoop import   \
--connect jdbc:mysql://hdp-1:3306/sqoop   \
--username root  \
--password 123456 \
--table tb3   \
-m 1

导入: 指定分隔符和导入路径

sqoop import   \
--connect jdbc:mysql://hadoop1:3306/mysql   \
--username root  \
--password root   \
--table help_keyword   \
--target-dir /user/hadoop11/my_help_keyword1  \
--fields-terminated-by '\t'  \
-m 2

导入数据:带where条件

sqoop import   \
--connect jdbc:mysql://hadoop1:3306/mysql   \
--username root  \
--password root   \
--where "name='STRING' " \
--table help_keyword   \
--target-dir /sqoop/hadoop11/myoutport1  \
-m 1

查询指定列

sqoop import   \
--connect jdbc:mysql://hadoop1:3306/mysql   \
--username root  \
--password root   \
--columns "name" \
--where "name='STRING' " \
--table help_keyword  \
--target-dir /sqoop/hadoop11/myoutport22  \
-m 1
selct name from help_keyword where name = "string"

导入:指定自定义查询SQL

sqoop import   \
--connect jdbc:mysql://hadoop1:3306/  \
--username root  \
--password root   \
--target-dir /user/hadoop/myimport33_1  \
--query 'select help_keyword_id,name from mysql.help_keyword where $CONDITIONS and name = "STRING"' \
--split-by  help_keyword_id \
--fields-terminated-by '\t'  \
-m 4

在以上需要按照自定义SQL语句导出数据到HDFS的情况下:
1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义
2、自定义的SQL语句中必须带有WHERE \$CONDITIONS

二、把MySQL数据库中的表数据导入到hbase

sqoop import \
--connect jdbc:mysql://hadoop1:3306/mysql \
--username root \
--password root \
--table help_keyword \
--hbase-table new_help_keyword \
--column-family person \
--hbase-row-key help_keyword_id

(三)把MySQL数据库中的表数据导入到hive

bin/sqoop import --connect jdbc:mysql://s201:3306/test --username sqoop --password sqoop --table emp --hive-import --m 1

五、数据导出

1、从hdfs导出至mysql

       前提环境:export-dir中包含传输的数据,且数据之间按input-fields-terminated-by分割,要提前保证mysql中存在表table employee,且数据结构一致(否则报错)

bin/sqoop export \
--connect jdbc:mysql://hdp-1:3306/userdb \
--username root \
--password 123456\
--table employee \
--export-dir /user/centos/emp/
--input-fields-terminated-by ',' 

导出的时候容易报错:Export job failed!

解决方法:1、字符集编码改成:utf-8

                  2、指定map为1,即在命令最后加 “--m 1”   默认的map是4个

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值