Sqoop安装配置

1.下载

https://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

2.上传安装包 sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

注意:sqoop安装包的选择,要选择安装包中含有 bin字符的安装包,否则运行会报错:缺少文件!

使用Xshell工具的xftp插件上传sqoop安装包到usr/local/

3.解压sqoop安装包

#解压安装包
[root@hadoop01 local]#tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
#重命名sqoop目录
[root@hadoop01 local]#mv sqoop-1.4.7 sqoop

4.配置环境变量

#编辑环境变量配置文件
[root@hadoop01 local]#vi /etc/profile
​
#向其中追加以下内容
export SQOOP_HOME=/usr/local/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
​
#重新加载配置文件
[root@hadoop01 local]#source /etc/profile

5.添加 JDBC驱动jar包

#将用于连接mysql的JDBC驱动包添加到sqoop目录下的lib目录中,以下命令从hive中复制而来
[root@hadoop01 local]#cp hive/lib/mysql-connector-java-5.1.49-bin.jar sqoop/lib/

6.修改配置文件

在 Sqoop 安装目录的 conf 子目录下,系统已经提供了一个环境变量文件模板sqoop-env-template.sh,使用 cp 操作复制一个副本,并改名为 sqoop-env.sh,修改sqoop-env.sh (可选,一般安装了Hadoop、HBase、Hive后可不配置此文件)

#修改sqoop运行的环境变量文件sqoop-env.sh
[root@hadoop01 local]#cd sqoop/conf/
[root@hadoop01 conf]#cp sqoop-env.template.sh sqoop-env.sh
[root@hadoop01 conf]#vi sqoop-env.sh
​
#追加以下内容到文件中
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive

7.测试

(1)测试Sqoop是否配置成功

[root@hadoop01 conf]#cd
​
#查看sqoop的版本号
[root@hadoop01 ~]#sqoop version
​
#查看sqoop的命令参数
[root@hadoop01 ~]#sqoop help

 (2)修改sqoop启动信息

启动的时候,有相关的警告信息,我们可以配置bin/configure-sqoop 文件,先注销对应的相关语句.

建议:使用notpad++进行编辑,使用其列模式:按住Alt键,垂直拖动鼠标即可以列模式编辑。

#注释掉对应行号 75~107 行的内容
​
#注释掉对应行号 129~147 行的内容
​
#注释掉对应行号 227~228 行的内容
​
#注释掉对应行号 230~231 行的内容

8.sqoop操作

连接对应MySQL数据库

  • 交互式访问

[root@hadoop01 ~]#sqoop list-databases --connect jdbc:mysql://hadoop03:3306 --username root --password 123456
  • 文件授权访问

#生成密码文件,为隐藏文件
[root@hadoop01 ~]#echo -n "123456" > .password
#查看文件
[root@hadoop01 ~]#ls -a
[root@hadoop01 ~]#cat .password
#修改文件访问权限为400
[root@hadoop01 ~]#chmod 400 .password
#将密码文件上传至HDFS
[root@hadoop01 ~]#hdfs dfs -put .password /
​
#使用密码文件访问mysql数据库
[root@hadoop01 ~]#sqoop list-databases --connect jdbc:mysql://hadoop03:3306 --username root --password-file /.password
使用 Sqoop 获取指定 URL 数据库中所有表
[root@hadoop01 ~]#sqoop list-tables --connect jdbc:mysql://hadoop03:3306/mysql?useSSL=false --username root --password 123456
  1. sqoop导入数据

    #使用xshell上传文件EMP.sql
    
    #在安装mysql的节点上登录mysql [root@hadoop03 ~]#mysql -u root -p 123456
    
    #在 MySQL 中新建一个sqoop_db 数据库 mysql>create database sqoop_db; mysql>use sqoop_db;
    
    #导入EMP.sql文件到sqoop_db 数据库中 mysql>source /root/EMP.sql;
    
    #查看数据 mysql>show tables; #查询数据 mysql>select * from EMP;
  2. Import导入对应参数

    通用参数

    --connect <jdbc-url> : 指定JDBC连接串

    --username <username> : 用户名

    --password <password> : 密码

    --password-file: 包含密码的文件

    导入控制参数

    --append :追加数据至已存在的HDFS数据集

    --columns<col,col,col…> :指定导入的列

    -e,--query<statement> :执行SQL语句,查询结果将被导入

    --table<table-name> :读取的表名

    --target-dir<dir> :将导入的HDFS目录,用于单表路径指定

    --warehouse-dir :将导入的HDFS目录,用于多表路径指定

    --where<where express> :条件过滤

    --delete-target-dir :如果目录存在则删除目录

    -m,--num-mappers :导入时并行map任务数量

    -z,--compress :启用压缩

    --mapreduce-job-name<name> :作业名称

    输入格式控制参数

    --input-enclosed-by<char> :设置输入字符包围符

    --input-escaped-by<char> :设置输入转义符

    --input-fields-terminated-by<char> :设置输入字段分隔符

    --input-lines-terminated-by<char> :设置输入行分隔符

    输出格式控制参数

    --fields-terminated-by<char> :设置字段分隔符

    --lines-terminated-by<char> :设置行分隔符

    Hive 参数

    --create-hive-table :自动创建Hive表

    --hive-database<database-name> :设置Hive数据库名

    --hive-import :导入RDBMS表至Hive

    --hive-overwrite :如果数据存在则覆盖

    --hive-partition-key :分区键

    --hive-partition-value :分区值

    --hive-table<table-name> :指定导入Hive的表

    HBase 参数

    --column-family<family> :设置导入的目标列族

    --hbase-create-table :自动创建HBase表

    --hbase-row-key<col> :指定哪一列作为RowKey

    --hbase-table :指定导入的HBase表名

    --hbase-bulkload :启用批量加载

  3. 将mysql中的数据导入到HDFS

[root@hadoop01 ~]#sqoop import --connect jdbc:mysql://hadoop03:3306/sqoop_db?useSSL=false --username root --password 123456 --table EMP -m 1 --columns "EMPNO,ENAME,JOB,SAL,COMM" --target-dir sqoop_emp_column --mapreduce-job-name fromMySQLToHDFS --delete-target-dir
查看导入HDFS的数据
[root@hadoop01 ~]#hdfs dfs -ls /user/root/sqoop_emp_column
[root@hadoop01 ~]#hdfs dfs -text /user/root/sqoop_emp_column/part*

导入表数据并指定压缩格式以及存储格式

[root@hadoop01 ~]#sqoop import --connect jdbc:mysql://hadoop03:3306/sqoop_db?useSSL=false --username root --password 123456 --table EMP -m 1 --target-dir sqoop_emp_parquet --mapreduce-job-name fromMySQLToHDFS --as-parquetfile --compression-codec org.apache.hadoop.io.compress.SnappyCodec --delete-target-dir

--as-parquet :指定导出格式为 Parquet 格式,当然也可指定导出格式为 SequenceFile 等其他格式。

--compression-codec : 指定压缩使用的 codec 编码;因为在 Sqoop 中默认时使用压缩的,所以此次只须指定 codec 编码即可。

使用web方式查看导入HDFS的数据

打开浏览器,输入hadoop01:5007 ,查看sqoop_emp_parquet目录中的数据。

导入表数据并使用指定的分隔符和条件

[root@hadoop01 ~]#sqoop import --connect jdbc:mysql://192.168.242.131:3306/sqoop_db?useSSL=false --username root --password 123456 --table EMP -m 1 --target-dir sqoop_emp_split --mapreduce-job-name fromMySQLToHDFS --fields-terminated-by '\t'  --lines-terminated-by '\n' --where 'sal>2000' --delete-target-dir

--fields-terminated-by :设置字段之间的分隔符

--lines-terminated-by :设置行之间的分隔符

--where :指定 emp 表中满足条件的数

查看导入的数据

[root@hadoop01 ~]#hdfs dfs -ls /user/root/sqoop_emp_split
[root@hadoop01 ~]#hdfs dfs -text /user/root/sqoop_emp_split/part*

导入指定查询语句的数据

[root@hadoop01 ~]#sqoop import --connect jdbc:mysql://hadoop1:3306/sqoop_db?useSSL=false --username root --password 123456 --target-dir sqoop_emp_query
--query 'select * from EMP where sal>2000 and deptno=20 and $CONDITIONS' -m 1
--delete-target-dir

--query :指定查询语句,将查询结果导入到HDFS 中,最后需要添加 AND $CONDITIONS ,这是固定写法。--table 可以省略不写了。

使用 eval 可以执行SQL语句并显示结果

[root@hadoop01 ~]# sqoop eval --connect jdbc:mysql://hadoop1:3306/sqoop_db?useSSL=false --username root --password 123456 --query 'select * from EMP where DEPTNO=10'

注意:查询的结果不会保存在HDFS上

导出mysql中所有的表到HDFS

[root@hadoop01 ~]#sqoop import-all-tables --connect jdbc:mysql://localhost:3306/test?useSSL=false --username root --password 123456 --warehouse-dir /mysql/tables -m 1

 运行Sqoop 脚本以封装 import 操作

上面介绍的Sqoop 的使用方式都是直接运行 Sqoop 脚本,这种方式使用起来比较麻烦。在Sqoop中提供了 --options-file 参数,开发人员可以先将 Sqoop 脚本封装到一个文件中,然后使用 --options-file 参数来指定封装后的脚本并运行,这样可以方便后期的维护。

  • 在 sqoop安装目录下创建一个 sqoop_data\emp.opt 文件,注意:每个参数和值均占单独一行

  • 编写emp.opt文件内容 注意:每个参数和值均占单独一行

import 
--connect jdbc:mysql://hadoop03:3306/sqoop_db?useSSL=false 
--username
root 
--password
123456 
--target-dir
sqoop_emp_options_file
--table
EMP
-m
1
--delete-target-dir
  • 运行脚本文件

[root@hadoop01 sqoop_data]#sqoop --options-file emp.opt

 导入 MySQL 数据到 Hive

将 MySQL数据导入到 Hive 的执行原理:先将 MySQL数据导入到HDFS 上,然后再使用 load 函数将 HDFS 的文件加载到 Hive 表中

注意:需要再 Sqoop\lib 包下加入 Hive 的相关组件包,在hive/lib/目录中的两个jar包:hive-common-1.2.1.jar hive-exec-1.2.1.jar

  • Hive 参数说明:

    --create-hive-table :自动创建Hive表

    --hive-database<database-name> :设置Hive数据库名

    --hive-import :导入RDBMS表至Hive

    --hive-overwrite :如果数据存在则覆盖

    --hive-partition-key :分区键

    --hive-partition-value :分区值

    --hive-table<table-name> :指定导入Hive的表

  • 导入数据到Hive,编写emp1.opt脚本

import 
--connect 
jdbc:mysql://hadoop03:3306/sqoop_db?useSSL=false 
--username
root 
--password
123456 
--target-dir
sqoop_emp_options_file
--table
EMP
-m
1
--delete-target-dir
--hive-import
--create-hive-table
--hive-database
wise_db
--hive-table
emp_import

导出 HDFS 数据到 MySQL 上

在导出数据 (表) 前需要先创建待导出表的结构,如果待导出的表在数据库中不存在,则报错;

如果重复导出表,则表中的数据会重复。

  • sqoop-export

//通用参数
Common arguments:
   --connect <jdbc-uri>                                                               
   --password <password>                                      
   --username <username>                                             
// 导出控制参数
Export control arguments:
   --batch                                                                                              
   --columns <col,col,col...>                                                                                         
   --direct                                                                                                            
   --export-dir <dir>                                                                                                   
   -m,--num-mappers <n>                                                                                                   
   --mapreduce-job-name <name>                                                                                         
   --table <table-name> 
       
// 输入文件参数配置
Input parsing arguments:                                      
   --input-fields-terminated-by <char>      
   --input-lines-terminated-by <char> 
       
// 输出文件参数配置
Output line formatting arguments:                
   --fields-terminated-by <char>      
   --lines-terminated-by <char>
  • 导出 HDFS 数据到 MySQL

#在mysql中创建表结构
mysql>use sqoop_db;
mysql>create table emp_demo as select * from EMP where 1=2;
mysql>select * from emp_demo;
​
#导出HDFS数据到mysql的表emp_demo
[root@hadoop01 ~]#sqoop export --connect jdbc:mysql://hadoop03:3306/sqoop_db?useSSL=false --username root --password 123456 --columns "EMPNO,ENAME,JOB,SAL,COMM,DEPTNO" --table emp_demo --export-dir /user/root/emp -m 1

--export-dir :指出将要导出的数据目录。注意:每运行一次上述代码,就会重新插入数据到MySQL

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值