Sqoop安装使用手册_云帆大数据学院
2015-08-07 18:46
435 查看
Sqoop安装使用手册
1. Sqoop介绍
Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2. 安装配置
1. 环境准备
sqoop-1.4.3-cdh4.7.0.tar.gz 10.1.1.117 master //安装好hadoop,hbase和hive。
2. 安装配置
在master节点上用hadoop用户登陆,解压Sqoop安装包并配置环境变量。复制sqoop-1.4.3-cdh4.7.0.tar.gz到/home/hadoop目录,解压:
$ tar -zxvf sqoop-1.4.3-cdh4.7.0.tar.gz
复制mysql的jdbc库mysql-connector-java.jar到~/sqoop-1.4.3-cdh4.7.0/lib。
修改~/.bashrc环境变量,在 .bashrc 的末尾插入以下变量:
export SQOOP_HOME=/home/hadoop/sqoop-1.4.3-cdh4.7.0 export PATH=$PATH:$SQOOP_HOME/bin
保存并更新~/.bashrc:
$ source ~/.bashrc
3. 测试数据准备
在MySQL数据库test建测试表hadoop_related并添加测试数据:mysql> create table hadoop_related (id int, project varchar(20), version varchar(20), primary key (id)); mysql> INSERT INTO hadoop_related VALUES (1,'hadoop','2.0.0-cdh4.7.0'), (2,'hbase','0.94.15-cdh4.7.0'),(3,'hive','0.10.0-cdh4.7.0'), (4,'pig','0.11.0-cdh4.7.0'), (5,'sqoop','1.4.3-cdh4.7.0'), (6,'sqoop2','1.99.2-cdh4.7.0'),(7,'zookeeper','3.4.5-cdh4.7.0'), (8,'flumeng','1.4.0-cdh4.7.0');
4. 用Sqoop连接查看数据库
列出mysql数据库中的所有数据库$ sqoop list-databases --connect jdbc:mysql://master/ --username hadoop --password 123456
连接mysql并列出test数据库中的表
$ sqoop list-tables --connect jdbc:mysql://master/test --username hadoop --password 123456
5. 与Hadoop导入导出
1. 从数据库导出表的数据到HDFS上文件
可以通过-m设置并行数据,即map的数据,决定文件的个数。默认目录是/user/${user.name}/${tablename},可以通过–target-dir设置hdfs目标目录。
$ hdfs dfs -mkdir -p /user/sqoop $ sqoop import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --target-dir /user/sqoop/hadoop_related -m 1
2. 将hdfs上的数据导入到关系数据库中
目标表的表结构需要先创建出来,否则export操作会直接失败。mysql> create table hadoop_related_hdfs (id int, project varchar(20), version varchar(20), primary key (id)); $ sqoop export --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related_hdfs --export-dir /user/sqoop/hadoop_related
验证结果:
数据会首先写到hadoop_related_hdfs_tmp表,导入操作成功后,再由hadoop_related_hdfs_tmp表导入到hadoop_related_hdfs结果表中,同时会清除hadoo_related_hdfs_tmp表。
如果有map失败,则成功的map会将数据写入tmp表,export任务失败,同时tmp表的数据会被保留。
如果tmp中已有数据,则此export操作会直接失败,可以使用–clear-staging-table指定在执行前清除中间表。
6. 导入数据到Hbase
使用sqoop把mysql中数据导入hbase中$ sqoop import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --hbase-table hadoop_related --column-family related --hbase-create-table
进入hbase shell
hbase(main):003:0> describe 'hadoop_related' DESCRIPTION ENABLED 'hadoop_related', {NAME => 'related', DATA_BLOCK_ENCODING => 'NO true NE', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSIONS = > '3', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => '21474 83647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_ MEMORY => 'false', ENCODE_ON_DISK => 'true', BLOCKCACHE => 'true '} hbase(main):004:0> get 'hadoop_related' , '1' COLUMN CELL related:id timestamp=1438418082341, value=1 related:project timestamp=1438418082341, value=hadoop related:version timestamp=1438418082341, value=2.0.0-cdh4.7.0
关于将Hbase的数据导入到mysql里,Sqoop并不是直接支持的,一般采用如下3种方法:
将Hbase数据扁平化成HDFS文件,然后再由Sqoop导入.
将Hbase数据导入Hive表中,然后再导入mysql。
直接使用Hbase的Java API读取表数据,直接向mysql导入不需要使用Sqoop。
7. 与Hive导入导出
1. 从数据库导出表的数据到Hive
$ sqoop-import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --hive-table hadoop_related --create-hive-table --hive-import --hive-home /home/hadoop/hive-0.10.0-cdh4.7.0
2. 将Hive上的数据导入到关系数据库中
将Hive中的表数据导入到MySQL,MySQL中的目标表必须提前创建好。mysql> create table hadoop_related_hive (id int, project varchar(20), version varchar(20), primary key (id)); $ sqoop export --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related_hive --export-dir /home/hadoop/hiveData/warehouse/hadoop_related/part-m-00000 --input-fields-terminated-by '1'
8. sqoop-eval使用
eval可以很快的使用sql语句对数据库进行操作,这使得用户在执行import操作之前检查sql语句是否正确。$ sqoop eval --connect jdbc:mysql://192.168.56.1/test --username root --password 123456 --query "SELECT id, project, version FROM hadoop_related_hive LIMIT 10"
9. 增量导入
Sqoop提供了原生增量导入的特性,包含以下三个关键参数:Argument | Description |
---|---|
–check-column (col) | 指定一个“标志列”用于判断增量导入的数据范围,该列不能是字符型,最好是数字或者日期型(这个很好理解吧)。 |
–last-value (value) | 指定增量模式,包含“追加模式” append 和“最后修改模式” lastmodified (该模式更满足常见需求)。 |
–last-value (value) | 指定“标志列”上次导入的上界。如果“标志列”是最后修改时间,则–last-value为上次执行导入脚本的时间。 |
增量job的创建:
$ sqoop job --create SqoopIncre -- import --connect jdbc:mysql://master/test --username hadoop --password 123456 --table hadoop_related --hive-import --hive-table hadoop_related_incre --incremental append --check-column id --last-value 0
执行Job:
$ sqoop job --exec SqoopIncre
转载请注明:云帆大数据学院 » Sqoop安装使用手册
相关文章推荐
- hive启动报错:Terminal initialization failed; falling back to unsupported
- http://blog.csdn.net/lpdx111/article/details/7638147
- hdoj-1023-Train Problem II【卡特兰数】
- hdu 5353 Average || 2015 Multi-University Training Contest 6 || 简单题
- 2015 Multi-University Training Contest 6(HDOJ5353)
- Aircrack-ng新手指南
- 2015 Multi-University Training Contest 5 hdu 5352 MZL's City
- Codeforces 538 E. Demiurges Play Again
- AIDL 分析2
- WIN7下运行hadoop程序报:Failed to locate the winutils binary in the hadoop binary path
- SLF4J: Class path contains multiple SLF4J bindings.
- 大数据专家Bernard Marr:大数据是如何对抗癌症的?
- 来自大数据的反思:需要你读懂的10个小故事
- CodeForces 195B After Training(STL)
- UVa 10803 Thunder Mountain (任意两点最短路的最大值+Floyd)
- 2015 Multi-University Training Contest 6
- 2015 Multi-University Training Contest 6 hdu 5358 First One
- 安卓 绑定service的aidl出现异常的解决
- MongoDB not authorized on admin to execute command --auth Authentication failed.
- hdu-5323-Solve this interesting problem(2015 Multi-University Training Contest 3)