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
不可行
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。