Bootstrap

Sqoop基础入门

目录

sqoop介绍

工作机制

sqoop安转

测试sqoop

将MySQL数据导入到HDFS中

将MySQL数据导入到Hive中

将MySQL数据导入Hive----HCatalog API


sqoop介绍

sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的HDFS、HIVE中导出数据到关系数据库mysql等。

工作机制

sqoop知识导入或导出,底层原理是MapReduce(但是只使用map阶段,没有经历shuffle阶段) .

sqoop安转

#你的hive安装在哪一台主机,你的sqoop就要装在哪一台主机,该操作是以node1为例

1、在node1中,上传sqoop的安装包到/export/software目录
2、在node1中,解压sqoop安装包到/export/server目录

 tar -xvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /export/server/
 
3、在node1中,对解压后的sqoop目录进行重命名
 cd /export/server/
 mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop-1.4.7
 
4、在node1中,修改sqoop的配置文件,
 cd /export/server/sqoop-1.4.7/conf
 mv sqoop-env-template.sh sqoop-env.sh 
 
 修改sqoop-env.sh 文件,设置以下内容
 export HADOOP_COMMON_HOME=/export/server/hadoop-3.3.0
 export HADOOP_MAPRED_HOME=/export/server/hadoop-3.3.0
 export HIVE_HOME=/export/server/hive-3.1.2 
 
 5、在node1中,加入mysql的jdbc驱动包和hive的执行包
 cp /export/server/hive-3.1.2/lib/mysql-connector-java-5.1.32-bin.jar   /export/server/sqoop-1.4.7/lib/
 
cp /export/servers/hive-3.1.2/lib/hive-exec-3.1.2.jar /export/servers/sqoop-1.4.7/lib/

cp /export/server/hive-3.1.2/hcatalog/share/hcatalog/hive-hcatalog-core-3.1.2.jar /export/server/sqoop-1.4.7/lib/
 
 6、在node1,node2、node3中,配置环境变量
   vim /etc/profile
   添加以下内容
   
   export SQOOP_HOME=/export/server/sqoop-1.4.7
   export PATH=:$SQOOP_HOME/bin:$PATH
   
   # HCatelog
 export HCAT_HOME=/export/server/hive-3.1.2/hcatalog
export hive_dependency=$HIVE_HOME/conf:$HIVE_HOME/lib/*:$HIVE_HOME/hcatalog/share/hcatalog/hive-hcatalog-core-3.1.2.jar

   添加完之后一定要保存退出,执行以下命令
   source /etc/profile

测试sqoop

 sqoop list-databases \
 --connect jdbc:mysql://node1:3306/ \
 --username root --password 123456

 

将MySQL数据导入到HDFS中

1)默认分隔符导入

# 导入使用的是默认分隔符
sqoop import \   #sqoop导入
--connect jdbc:mysql://up01:3306/userdb \ #要连接的数据库主机名和数据库名字
--table emp \   #表名
--username root \  #用户名
--password 123456 \ #密码
--target-dir /sqoop/result1 \  #HDFS的目标目录
--delete-target-dir \     #如果HDFS的目标目录存在,则删除
--m 1       #开启一个Map任务

 2)制定分隔符导入

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

将MySQL数据导入到Hive中

1)需要先创建库

# Hive中创建测试使用的数据库
drop database if exists test cascade ;
create database if not exists test;

2)不需要创建表,直接导入数据

#1、使用hive默认分隔符 '\001',使用默认的hive表名(和MySQL表名相同)
sqoop import \
--connect jdbc:mysql://up01:3306/userdb \
--table emp_conn \
--username root \
--password 123456 \
--hive-import \
--hive-database test \
--m 1 

 将MySQL数据导入Hive----HCatalog API

1)需要创建表

// Hive中创建测试使用的数据库
drop database if exists test cascade ;
create database if not exists test;


-- 手动在hive中建一张表
create table test.emp_hive
(
    id     int,
    name   string,
    deg    string,
    salary int,
    dept   string
)
    row format delimited fields terminated by '\t'
    stored as orc;

2) 导数据

sqoop import \
--connect jdbc:mysql://up01:3306/userdb \
--table emp \
--username root \
--password 123456 \
--fields-terminated-by '\t' \
--hive-database test \
--hive-table emp_hive \
-m 1

;