目录
将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