Sqoop安装和导入导出
一,介绍
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库*(例如 : MySQL ,Oracle ,Postgres等)*中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
版本:(两个版本完全不兼容,sqoop1使用最多)
---- sqoop1 : 1.4x
---- sqoop2: 1.99x
同类产品:DataX(阿里*数据交换工具)
二,Sqoop架构
sqoop架构非常简单,是hadoop生态系统中架构最简单的框架。
sqoop1由client端直接接入hadoop,任务通过解析生成对应的MapReduce执行。
三,Sqoop导入流程图
四,Sqoop导出流程图
五,Sqoop安装
1.上传解压
2.配置sqoop的环境变量,局部,全局随意(不会的查看之前的 Linux配置环境变量博客)
---- 配置完 切记 执行 source命令,环境变量才能生效
3.在sqoop安装目录下 lib目录下 添加 mysql数据库驱动包
4.进入到conf目录,重命名 sqoop-env-template.sh 为 sqoop-env.sh
5.进入到 bin目录,修改配置 configure-sqoop
----去掉相关未安装的服务;例如(Hbase,HCatalog,Accumulo);
下面是我注释掉的内容(根据自己安装服务注释):
## Moved to be a runtime check in sqoop.
#if [ ! -d "${HCAT_HOME}" ]; then
# echo "Warning: $HCAT_HOME does not exist! HCatalog jobs will fail."
# echo 'Please set $HCAT_HOME to the root of your HCatalog installation.'
#fi
#if [ ! -d "${ACCUMULO_HOME}" ]; then
# echo "Warning: $ACCUMULO_HOME does not exist! Accumulo imports will fail."
# echo 'Please set $ACCUMULO_HOME to the root of your Accumulo installation.'
#fi
-
测试
sqoop version
如果报 HADOOP_COMMON_HOME not found 去到 conf目录下 编辑 sqoop-env.sh
#Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/home/hadoop-2.6.5 ##你的Hadoop安装目录 #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/home/hadoop-2.6.5 ##你的Hadoop安装目录
如果能查看到 版本号说明安装配置成功了.
六,Sqoop参数
七,Sqoop导入参数
八,Sqoop导出参数
九,常用操作命令
mysql导入到HDFS:
sqoop import --connect jdbc:mysql://node01:3306/psn(mysql数据库名) --username root --password 123456(mysql账号密码) --as-textfile --columns id,name,msg --table psn(数据库中表的名字) --delete-target-dir -m1(map个数) --target-dir /sqoop/data(存储在HDFS上的目录)
mysql导入到hive:
sqoop-import --connect jdbc:mysql://node01/psn --username root --password 123456 --table psn(数据库中表的名字) --hive-import -m 1
HDFS导出到Mysql:
sqoop export --connect jdbc:mysql://node01/psn --username root --password 123456 -m1 --columns id,name,msg --export-dir /sqoop/data(HDFS文件存储路径) --table psn(表得提前建号)
Hive导出到 Mysql上 (针对从mysql 导入到 hive的数据 分隔符是 \001 隐藏分割字符)
sqoop-export --connect jdbc:mysql://node01/psn --username root --password 123456 --table psn --export-dir '/user/hive_local/warehouse/psn' --fields-terminated-by '\001'
mysql导入到hive中,如下:
SOH代表的就是隐藏分割字符
Hive导出到 Mysql上 (针对从mysql 导入到 hive的数据 分隔符一般随情况而定)
sqoop-export --connect jdbc:mysql://node01/psn --username root --password 123456 --table psn --export-dir '/user/hive_local/warehouse/psn' --fields-terminated-by ','