1. Sqoop 简介
- Apache Sqoop 是一种专门为 hadoop 和比如关系型数据库等结构化数据库之间的高效数据转换一种工具。
- 数据的搬运工
- Sqoop 在大多数自动化数据转换的过程中,依托于数据库相关的 Schema 描述信息,转换的过程是使用 MapReduce 来进行的
- Sqoop 目前有两个版本,完全不兼容,Sqoop 和 Sqoop2. 可以通过版本号来进行简单的区分,1.4.x 为 sqoop 或 sqoop1,1.99.x 为 sqoop2
2. Sqoop 数据的导入(import)
- 传统的 RDBMS 中的数据导入到 hbase…
- 从传统数据库获取元数据信息(schema、table、field、field type),把导入功能转换为只有 Map 的
Mapreduce 作业,在 mapreduce 中有很多 map,每个 map 读一片数据,进而并行的完成数据的拷贝。
3. Sqoop 数据的导出(export)
- hbase 中的数据导出到 rdbms 中
- 获取导出表的 schema、meta 信息,和 Hadoop 中的字段 match;多个 map only 作业同时运行,完成 hdfs 中数据导出到关系型数据库中。
4. Sqoop 的安装
-
准备安装文件
- sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
-
解压
- tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/
-
重命名
- mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop
-
配置环境变量
export SQOOP_HOME=/opt/sqoop export PATH=$PATH:$SQOOP_HOME/bin
-
修改配置文件
mv sqoop-env-template.sh sqoop-env.sh
==vim sqoop-env.sh==
export HADOOP_COMMON_HOME=/opt/hadoop export HBASE_HOME=/opt/hbase export HIVE_HOME=/opt/hive export ZOOCFGDIR=/opt/zookeeper/conf
-
因为 SQOOP 要连接 rdbms,所以需要将该数据的驱动 jar 包添加进 sqoop 的 classpath 中,所以将 mysql 的 jar 包上传至 $SQOOP_HOME/lib
- mysql 需要 mysql-connector-java-5.1.32.jar 以上版本支持。
5. Sqoop 的基本操作
- 列出数据库
sqoop-list-databases –connect jdbc:mysql://uplooking05:3306/ –username root –password root
- 列出所有的表
sqoop-list-tables –connect jdbc:mysql://uplooking05:3306/up1 –username root –password root
6. mysql 中的数据导入到 hdfs 中
sqoop-import –connect jdbc:mysql://uplooking05/up2 –username root –password root –table user
- == 在执行导入的过程中,一定要确定 RDBMS 中的表中有 pk==
- –target-dir: 导入到自定义的 hdfs 目录中
- –append : 追加导入
- -m : 指定 maptask 的数量
- –username : 数据库的用户名
- –password : 数据库的密码
- –connect : 数据库的 url
- –delete-target-dir : 一般与 –target-dir 联用, 与 –append 是 == 互斥 == 的
- –last-value : 跳过几行数据,追加其余所有的数据
-
–where: 根据条件进行导入
- sqoop-import –connect jdbc:mysql://uplooking05/up2 –username root –pass
word root –table user –target-dir /sqoop/user –delete-target-dir –where ‘id>2’**
- sqoop-import –connect jdbc:mysql://uplooking05/up2 –username root –pass
-
–query: 导入 mysql 查询的结果到 hdfs
- sqoop-import –connect jdbc:mysql://uplooking05/up2 –username root –pass
word root –target-dir /sqoop/user –delete-target-dir –query “select name,age from user where age>10 and $CONDITIONS” –split-by ‘age’
- sqoop-import –connect jdbc:mysql://uplooking05/up2 –username root –pass
7. mysql 中的数据导入 hbase 中
sqoop-import –connect jdbc:mysql://uplooking05/up2 –username root –password root –table user –hbase-row-key id –hbase-table ns1:t2 –column-family f1
–hbase-row-key: 可以不指定, 不指定默认 hbase 中的 row-lkey 就是 mysql 中的主键
==注意: 导入数据到 hbase 数据库之前需要在 hbase 中先创建表和列族==
8. hdfs 中的数据导出到 mysql
sqoop-export –connect jdbc:mysql://uplooking05:3306/up2 –username root –password root –table user –export-dir /sqoop/user2
==注意: 导出之前首先需要在 mysql 中创建表==
9. hbase 中的数据导出到 mysql
不可行