sqoop - yaokun123/php-wiki GitHub Wiki

sqoop

一、概述

Sqoop是apache旗下的一款 ”Hadoop和关系数据库之间传输数据”的工具

导入数据:将MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统

导出数据:从Hadoop的文件系统中导出数据到关系数据库

二、Sqoop的工作机制

将导入和导出的命令翻译成MapReduce程序实现

在翻译出的MapReduce中主要是针对Inputformat和outputformat进行定制

三、Sqoop安装部署

Sqoop安装很简单,解压好进行简单的修改就可以使用

1、下载安装包

https://mirrors.bfsu.edu.cn/apache/sqoop/1.4.7

2、解压

cd /opt/soft/
tar -xzvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /opt/install

3、修改配置文件

cd /opt/install/sqoop-1.4.7.bin__hadoop-2.6.0/conf/
mv sqoop-env-template.sh sqoop-env.sh
vim sqoop-env.sh

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/kkb/install/hadoop-3.1.4

#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/kkb/install/hadoop-3.1.4

#set the path to where bin/hbase is available
export HBASE_HOME=/kkb/install/hbase-2.2.2

#Set the path to where bin/hive is available
export HIVE_HOME=/kkb/install/apache-hive-3.1.2

#Set the path for where zookeper config dir is
export ZOOCFGDIR=/kkb/install/apache-zookeeper-3.6.2-bin

4、添加两个必要的jar包 qoop需要两个额外依赖的jar包,将两个jar包添加到sqoop的lib目录下

cd /opt/soft
cp java-json.jar mysql-connector-java-5.1.38.jar /opt/install/sqoop-1.4.7.bin__hadoop-2.6.0/lib/

5、配置Sqoop环境变量

sudo vim /etc/profile	
export SQOOP_HOME=/kkb/install/sqoop-1.4.7.bin__hadoop-2.6.0
export PATH=:$SQOOP_HOME/bin:$PATH

# 让环境变量生效
source /etc/profile

四、Sqoop的数据导入

1、列举出所有的数据库

# 命令行查看帮助
sqoop help
sqoop list-databases --help

# 列出node03主机所有的数据库
sqoop list-databases --connect jdbc:mysql://node03:3306/ --username root --password 123456

# 查看某一个数据库下面的所有数据表
sqoop list-tables --connect jdbc:mysql://node03:3306/database_name --username root --password 123456

2、准备表数据 在mysql中准备数据,略。。。

3、导入数据库表数据到HDFS

使用sqoop命令导入、导出数据前,要先启动hadoop集群
下面的命令用于从MySQL数据库服务器中的emp表导入HDFS。

sqoop import --connect jdbc:mysql://node03:3306/userdb --password 123456 --username root --table emp -m 1

# 为了验证在HDFS导入的数据,请使用以下命令查看导入的数据
hdfs dfs -ls /user/hadoop/emp

# 以上有参数--m 1,表示只启动一个map task进行数据的导入
# 如果要开启多个map task的话,需要在命令中添加--split-by column-name,如下,其中map个数为4
sqoop import --connect jdbc:mysql://node03:3306/userdb --password 123456 --username root --table emp -m 4 --split-by id

4、导入HDFS指定目录

# 在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。
# 使用参数 --target-dir来指定导出目的地,
# 使用参数--delete-target-dir来判断导出目录是否存在,如果存在就删掉

sqoop import --connect jdbc:mysql://node03:3306/userdb --username root --password 123456 --delete-target-dir --table emp --target-dir /sqoop/emp -m 1

5、导入到hdfs指定目录并指定字段之间的分隔符

# 默认情况下它会用逗号(,)分隔表的数据和字段。
# 使用参数--fields-terminated-by来指定分隔符

sqoop import --connect jdbc:mysql://node03:3306/userdb --username root --password 123456 --delete-target-dir --table emp --target-dir /sqoop/emp2 -m 1 --fields-terminated-by '\t

6、导入关系表到Hive

# 1、将我们mysql表当中的数据直接导入到hive表中的话,我们需要将hive的一个叫做hive-exec-3.1.2.jar的jar包拷贝到sqoop的lib目录下
cd /kkb/install/apache-hive-3.1.2/lib/
cp hive-exec-3.1.2.jar /kkb/install/sqoop-1.4.7.bin__hadoop-2.6.0/lib/

# 2、将我们mysql当中的数据导入到hive表当中来
hive (default)> create database sqooptohive;
hive (default)> use sqooptohive;
hive (sqooptohive)> create external table emp_hive(id int,name string,deg string,salary int ,dept string) row format delimited fields terminated by '\001';

# 3、开始导入
sqoop import --connect jdbc:mysql://node03:3306/userdb --username root --password 123456 --table emp --fields-terminated-by '\001' --hive-import --hive-table sqooptohive.emp_hive --hive-overwrite --delete-target-dir --m 1

https://zhuanlan.zhihu.com/p/515539102