hadoop之sqoop------>数据迁移工具

一、环境准备

 1. sqoop工具  ------->sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

 2. mysql安装包------>mysql-5.7.17-winx64.zip

 3.mysql数据库连接工具------>Navicat Premium

 4.mysql驱动程序------>mysql-connector-java-5.1.40.tar.gz


二 、环境搭建

  1.安装mysql数据库------>见上一篇文章  win10安装mysql

  2.安装数据库连接工具------>Navicat Premium

  3.建立数据库连接    此处以 连接本机ip地址为例    192.168.19.10 

  

注意:连接中遇到的问题(如果成功连接,此步骤可以跳过)

     连接------>建立连接------>输入mysql的用户名,密码等 ------>确定------>连接

  hadoop之sqoop------>数据迁移工具_第1张图片

连接失败:出现的异常:

   Host * is not allowed to connect to this MySQL server

解决办法
   在本机登入mysql后,更改“mysql”数据库里的“user”表里的“host”项,从”localhost”改为'%'。
步骤:   

进入mysql的BIN目录


mysql -u root -p
mysql>
mysql>use mysql;
mysql>select 'host' from user where user='root';    


   #查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)


mysql>update user set host = '%' where user ='root';


#修改host值(以通配符%的内容增加主机/IP地址,当然也可以直接增加某个特定IP地址,

如果执行update语句时出现ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 错误,需要

select host from user where user = 'root';
查看一下host是否已经有了%这个值,如果有了直接执行下面的flush privileges;即可)

mysql>flush privileges;
mysql>select host,user from user where user='root';
mysql>quit

 4.上传sqoop并解压


    tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz ./

  

三 、sqoop的使用

第一类:数据库中的数据导入到HDFS上

进入到sqoop/bin目录下

(1)指定输出路径、指定数据分隔符


./sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123  
        --table trade_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'


(2)指定Map数量 -m 

      

./sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123  
--table trade_detail --target-dir '/sqoop/td1' --fields-terminated-by '\t' -m 2


(3)增加where条件, 注意:条件必须用引号引起来


./sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123  
--table trade_detail --where 'id>3' --target-dir '/sqoop/td2'


(4)增加query语句(使用 \ 将语句换行)

                ./sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123 \
--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS' --split-by trade_detail.id --target-dir '/sqoop/td3'


注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上
而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上$CONDITIONS

如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上

第二类:将HDFS上的数据导出到数据库中(不要忘记指定分隔符)

              ./ sqoop export --connect jdbc:mysql://192.168.8.120:3306/itcast --username root --password 123 
--export-dir '/td3' --table td_bak -m 1 --fields-terminated-by ','


你可能感兴趣的:(hadoop篇)