0


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 :指定哪一列作为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

标签: hadoop hive sqoop

本文转载自: https://blog.csdn.net/m0_56525833/article/details/127433900
版权归原作者 Saddam_J 所有, 如有侵权,请联系我们删除。

“Sqoop安装配置”的评论:

还没有评论