一、概述

传统的应用程序管理系统,即应用程序与使用RDBMS的关系数据库的交互,是产生大数据的来源之一。由RDBMS生成的这种大数据存储在关系数据库结构中的关系数据库服务器中。

当大数据存储和Hadoop生态系统的MapReduce,Hive,HBase,Cassandra,Pig等分析器出现时,他们需要一种工具来与关系数据库服务器进行交互,以导入和导出驻留在其中的大数据。在这里,Sqoop在Hadoop生态系统中占据一席之地,以便在关系数据库服务器和Hadoop的HDFS之间提供可行的交互。

Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。它由Apache软件基金会提供。

 二、安装Sqoop

2.1下载sqoop并解压

2.2修改环境配置

vim /etc/profile
export SQOOP_HOME=/usr/local/sqoop-1.4.7
export PATH=$PATH:$SQOOP_HOME/bin
source /etc/profile

2.3配置hadoop

cp sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh
export HADOOP_COMMON_HOME=/usr/local/hadoop-2.9.2
export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.9.2

2.4验证

java 连接云hadoop hadoop怎么连接数据库_java 连接云hadoop

3.连接mysql 

3.1使用centos7自带数据库mariadb

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

java 连接云hadoop hadoop怎么连接数据库_MySQL_02

4.Sqoop mysql hdfs相互传递数据

4.1 新建一个表并填写数据

4.2 将数据导入到hdfs中

sqoop import 
--connect jdbc:mysql://192.168.66.4:3306/networkmanagement \
--username sendi \
--password 1234 \
--table people \
--columns "name,age" \
--where "age>18" \
--target-dir hdfsPeople \
--delete-target-dir \
-m 1
  • –table 是要导入HDFS中的表
  • –columns 选择要导入的列,这里选择把name与age两列导入的HDFS中。
  • –where 对数据进行过滤,只有满足条件的才保存到HDFS中。
  • –target-dri 指定存储在HDFS上的表名
  • –delete-target-dir 表示如果HDFS表存在,则把他删除。
  • -m 说明使用多少个map进行数据迁移,如果表比较大的话,建议使用多个map,默认的map为4个

java 连接云hadoop hadoop怎么连接数据库_HDFS_03

 

4.3 hdfs向mysql导入数据

sqoop export 
--connect jdbc:mysql://192.168.30.138:3306/hadoopDemo \
--username root \
--password 123456 \
--table people \
--fields-terminated-by ',' \
--export-dir /people.txt \
--columns "id,name" \
-m 1
  • -table 指定MySQL接收数据的表 
  • -export-dir 指定从HDFS哪个路径下导出数据 
  • -fields-terminated-by ‘,’ 指定数据分隔符为, 
  • -columns 数据对应的列名