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
- 全部导入
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"
- 查询导入
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识别为自己的变量。
- 导入指定列
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中如果涉及到多列,用逗号分隔,分隔时
不要添加空格
- 使用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中如果表不存在,不会自动创建