0403-Sqoop笔记

第一章 Sqoop简介

主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

第二章 Sqoop原理

将导入或导出命令翻译成mapreduce程序来实现。
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。

第三章 Sqoop安装

3.1 下载解压

3.2 修改配置文件 sqoop-env.sh

export HADOOP_COMMON_HOME=/opt/module/hadoop-2.7.2
export HADOOP_MAPRED_HOME=/opt/module/hadoop-2.7.2
export HIVE_HOME=/opt/module/hive
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.10
export ZOOCFGDIR=/opt/module/zookeeper-3.4.10
export HBASE_HOME=/opt/module/hbase

3.3 拷贝JDBC驱动

[yanlzh@node11 software]$ cp mysql-connector-java-5.1.40-bin.jar /opt/module/sqoop/lib/

3.4 验证Sqoop

[yanlzh@node11 sqoop]$ bin/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

3.5 测试Sqoop是否能够成功连接数据库

[yanlzh@node11 sqoop]$ bin/sqoop list-databases --connect jdbc:mysql://node11:3306/ --username root --password 1229

information_schema
metastore
mysql
performance_schema
test

第四章 Sqoop简单实用案例

4.1 导入数据(RDBMS -> HDFS/HIVE/HBASE)

在Sqoop中,“导入”概念指:
从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用> > import关键字。

4.1.1 RDBMS 到 HDFS

  1. 全部导入
sqoop import \
--connect jdbc:mysql://node11:3306/company \
--username root \
--password 1229 \
--table staff \
--target-dir /user/company \
--num-mappers 1 \
--fields-terminated-by "\t" 
  1. 查询导入
sqoop import \
--connect jdbc:mysql://node11:3306/company \
--username root \
--password 1229 \
--table staff \
--target-dir /user/company \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select name,sex from staff where id<=1 and $CONDITIONS;'

提示:must contain ’ $ CONDITIONS’ in WHERE clause.
如果query后使用的是双引号,则$CONDITIONS前必须加转义符,防止shell识别为自己的变量。

  1. 导入指定列
sqoop import \
--connect jdbc:mysql://node11:3306/company \
--username root \
--password 1229 \
--table staff \
--target-dir /user/company \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns id,sex

提示:columns中如果涉及到多列,用逗号分隔,分隔时不要添加空格

  1. 使用Sqoop关键字筛选查询导入数据
sqoop import \
--connect jdbc:mysql://node11:3306/company \
--username root \
--password 1229\
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table staff \
--where "id=1"

4.1.2 RDBMS 到 HIVE

sqoop import \
--connect jdbc:mysql://node11:3306/company \
--username root \
--password 1229 \
--table staff \
--num-mappers 1 \
--hive-import \
--fileds-terminated-by "\t" \
--hive-overwrite \
--hive-table staff_hive

提示:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库,第一步默认的临时目录是/user/yanlzh/表名

4.1.3 RDBMS 到 HBASE

sqoop import \
--connect jdbc:mysql://node11:3306/company \
--username root \
--password 1229\
--table staff \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_company" \
--num-mappers 1 \
--split-by id

4.2 导出数据(HDFS/HIVE/HBASE -> RDBMS)

在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用export关键字。

4.2.1 HIVE/HDFS 到 RDBMS

sqoop export \
--connect jdbc:mysql://node11:3306/company \
--username root \
--password 1229 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"

提示:Mysql中如果表不存在,不会自动创建

4.3 脚本打包

发布了43 篇原创文章 · 获赞 0 · 访问量 544

猜你喜欢

转载自blog.csdn.net/qq_35199832/article/details/103476829