Sqoop依赖与hadoop

引言

Sqoop依赖与hadoop
       数据的一方,存储在hdfs
       底层的数据传输实现map/reduce yarn 只有map任务
因为官网sqoop没有hadoop2.5对应的版本,要根据hadoop的版本进行编译(好像不用对应版本也可以,不过建议最好对应版本)。所以这里使用CDH 5.3.6。比较稳定。 去Cloudera的官网下载相应的发布版本号 http;//archive.cloudera.com/cdh5/

使用CDH 5.3.6版本快速搭建Hadoop 2.x的伪分布和Hive环境
Hadoop-2.5.0-cdh5.3.6.tar.gz         安装在/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6
Hive-0.13.1-cdh5.3.6.tar.gz              安装在/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6
Zookeeper-3.4.5-cdh.5.4.6.tar.gz    安装在/opt/cdh-5.3.6/zookeeper-3.4.5-cdh.5.4.6
Sqoop-1.4.5-cdh5.3.6.tar.gz             安装在/opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6

Sqoop 安装及基本使用讲解

(1)解压安装包到/opt/cdh-5.3.6/sqoop-1.4.5-cdh5.3.6

[python]  view plain  copy
  1. tar –zxvf Sqoop-1.4.5-cdh5.3.6.tar.gz –C /opt/cdh-5.3.6/  

(2) 把mysql的jdbc驱动mysql-connector-java-5.1.10.jar复制到sqoop项目的lib目录下
(3) 在${SQOOP_HOME}/conf中执行命令

[python]  view plain  copy
  1. mv sqoop-env-template.sh sqoop-env.sh  

(4) 修改配置文件sqoop-env.sh

[python]  view plain  copy
  1. #Set path to where bin/hadoop is available  
  2. export HADOOP_COMMON_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6  
  3.   
  4. #Set path to where hadoop-*-core.jar is available  
  5. export HADOOP_MAPRED_HOME=/opt/cdh-5.3.6/hadoop-2.5.0-cdh5.3.6  
  6.   
  7. #set the path to where bin/hbase is available  
  8. #export HBASE_HOME=/usr/local/hbase  
  9.   
  10. #Set the path to where bin/hive is available  
  11. export HIVE_HOME=/opt/cdh-5.3.6/hive-0.13.1-cdh5.3.6  
  12.   
  13. #Set the path for where zookeper config dir is  
  14. #export ZOOCFGDIR=/usr/local/zk  

好了,搞定了,下面就可以运行了。
测试:
1、列出mysql数据库中的所有数据库

[python]  view plain  copy
  1. sqoop list-databases --connect jdbc:mysql://localhost:3306/ -username root -password root  

2、连接mysql并列出数据库中的表

[python]  view plain  copy
  1. sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password root  

使用Sqoop导入数据到HDFS及本质分析

(1)gather metadata   获取元数据

(2)submit map only job 提交MR任务 仅仅执行map任务

创建测试表:

[sql]  view plain  copy
  1. create table my_user(  
  2.     id  tinyint(4) not null auto_increment,  
  3.     account varchar(255) default null,  
  4.     passwd varchar(255) default null,  
  5.     primary key (id)  
  6. )  
  7.   
  8. insert into my_user values ('1','admin','admin');  
  9. insert into my_user values ('2','test2','test2');  
  10. insert into my_user values ('3','test3','test3');  
  11. insert into my_user values ('4','test4','test4');  
  12. insert into my_user values ('5','test5','test5');  
  13. insert into my_user values ('6','test6','test6');  
  14. insert into my_user values ('7','test7','test7');  

导入数据到hdfs

[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --table my_user  \   
  6. --target_dir /user/beifeng/sqoop/imp_my_user \  
  7. --num-mappers 1 \ 或者-m  

不写导出目录,默认导出到用户名下,如:/user/beifeng/my_user
默认4个map任务,默认逗号隔开

Sqoop导入数据设置数据存储格式parquet

hdfs中常见的数据存储格式
    textfile
    orcfile
    parquet

[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --table my_user  \   
  6. --target_dir /user/beifeng/sqoop/imp_my_user_parquet \  
  7. --num-mappers 1 \  
  8. --as-parquetfile  

在hive中create table hive_user

[sql]  view plain  copy
  1. create table default.hive_user_orc(  
  2.     id int,  
  3.     username string,  
  4.     passwd string  
  5. )  
  6. row format delimited fields terminated by ','  
  7. stored as parquet  

加载数据

[python]  view plain  copy
  1. load data inpath '/user/beifeng/sqoop/imp_my_user_parquet' into table default.hive_user_orc  

查询数据

[sql]  view plain  copy
  1. select * from hive_user_orc;  

发现数据全部是null 这是sqoop1.4.5的bug 到1.4.6后已经修复

Sqoop导入数据使用query讲解

查询指定列数据导入

[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --table my_user  \   
  6. --target_dir /user/beifeng/sqoop/imp_my_user_columns \ 目标路径  
  7. --num-mappers 1 \ map数  
  8. --columns id,account \ 导出的指定列  

在实际的项目中,要处理的数据,需要进行初步清洗和过滤
    某些字段过滤
    条件
    join

[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --query 'select id,account from my_user where $CONDITIONS '  \   
  6. --target_dir /user/beifeng/sqoop/imp_my_user_query \  
  7. --num-mappers 1 \  

Sqoop导入数据设置数据压缩为sanppy

[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --table my_user  \   
  6. --target_dir /user/beifeng/sqoop/imp_my_sannpy \  
  7. --delete-target-dir \如果目标目录存在,则删除。如果不设置这个,目标目录存在则会报错  
  8. --num-mappers 1 \  
  9. --compress \ 设置压缩 下面是压缩方法  
  10. --compression-codec org.apache.hadoop.io.compress.SnappyCodec \  
  11. -- fields-terminated-by '\t' \ 设置字符之间的格式  

报错:cdh不支持压缩格式
检查:

[python]  view plain  copy
  1. cd {hadoop}/bin/native  
  2. ls  

什么都没有

[python]  view plain  copy
  1. bin/hadoop checknative 检查本地库支持哪些压缩操作  

发现都是false
解决方法:
编译cdh中的hadoop源码,将native的包拷贝到{hadoop}/bin/hadoop/native下

对snappy压缩数据结合Hive进行数据的导入与分析

[sql]  view plain  copy
  1. drop table if exists default.hive_user_snappy;  
  2. create table default.hive_user_snappy(  
  3.     id int,  
  4.     username string,  
  5.     passwd string  
  6. )  
  7. row format delimited fields terminated by ',';  
  8.   
  9. load data inpath '/user/beifeng/sqoop/imp_my_sannpy' into table default.hive_user_snappy  

mysql table
    mysql导入数据到hdfs
        hdfs sanpy
    创建hive表
        hive create table
    导入hdfs数据到hive
        load data into table
    hive中数据分析
        query

Sqoop导入数据时两种增量方式导入

增量数据的导入
    有一个唯一的标识符,通常这个表都有一个字段,比如插入时间createtime
    query
        where createtime > 20161105 and createtime < 20161106
    sqoop自带增量导入
        --check-column  /检查哪一个值
        --incremental   /append or lastmodified
        --last-value    /检查的值的最后一个值数多少

[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --table my_user  \   
  6. --target_dir /user/beifeng/sqoop/imp_my_increament \  
  7. --num-mappers 1 \  
  8. --incremental append \ 不能和--delete-target-dir一起使用  
  9. --check-column id \  
  10. --last-value 4  

Sqoop导入数据direct使用

[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --table my_user  \   
  6. --target_dir /user/beifeng/sqoop/imp_my_direct \  
  7. --delete-target_dir \  
  8. --num-mappers 1 \  
  9. --direct  
  10. 速度变快  

Sqoop导出数据Export使用

hive table 
    table    
        hiveserver2进行jdbc方式查询数据
    hdfs file
        export -> mysql/oracle

[python]  view plain  copy
  1. touch /opt/datas/user.txt  
  2. vi /opt/datas/user.txt  
  3.     8,test8,test8  
  4.     9,test9,test9  
  5. bin/hdfs dfs -mkdir -p /user/beifeng/sqoop/exp/user/  
  6. bin/hdfs dfs -put /opt/datas/user /user/beifeng/sqoop/exp/user/  
  7.   
  8.           
  9. bin/sqoop export \  
  10. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  11. --username root \  
  12. --password 123456 \  
  13. --table my_user  \   
  14. --export-dir /user/beifeng/sqoop/exp/user \  
  15. --num-mappers 1 \  

Sqoop如何将RDBMS表中的数据导入到Hive表中

[sql]  view plain  copy
  1. use default;  
  2. create table user_hive(  
  3.     id int,  
  4.     account string,  
  5.     passwd string  
  6. )  
  7. row format delimited fields terminated by '\t'  
[python]  view plain  copy
  1. bin/sqoop import \  
  2. --connect jdbc:mysql://hadoop-senior.com:3306/test \  
  3. --username root \  
  4. --password 123456 \  
  5. --table my_user  \   
  6. --delete-target-dir \  
  7. --fields-terminated-by '\t' \  
  8. --num-mappers 1 \  
  9. --hive-import \  
  10. --hive-database default \  
  11. --hive-table user_hive  

Sqoop如何导出Hive表中数据到RDBMS中

这就是将hdfs中数据导出到rdbms中,同:Sqoop导出数据Export使用

Sqoop使用--options-file进行运行任务讲解

Hive中有 
    bin/hive –f 脚本 便可以执行
sqoop中使用 
    bin/sqoop –option-file 脚本 便可以执行了,脚本最好按官方文档写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极个别的谭同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值