sqoop架构非常简单,是hadoop生态系统的架构最简单的框架。 sqoop1由client端直接接入hadoop,任务通过解析生成对应的maprecue执行
Sqoop的输入输出/导入导出是相对于文件系统HDFS的, 因此HDFS的导入导出如图1,图2
图1 导入
图2 导出
单机版安装步骤:
1、解压, 移动到相关目录( 软件及mysql驱动在底部分享 )
mv sqoop-env-template.sh sqoop-env.sh
2、配置环境变量
export SQOOP_HOME=/XX/sqoop.xx
source /etc/profile
3、添加数据库驱动包
cp mysql-connector-java-5.1.10.jar /sqoop-install-path/lib
4、重命名配置文件,修改配置内容( 图1)
注意: 如果前缀和这个文档中的命名一致的话就不需要指定环境变量了, 如hive 和 hbase
mv sqoop-env-template.sh sqoop-env.sh
-----------------------------------------------------
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/chy/hadoop
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/chy/hadoop
-----------------------------------------------------
5、修改配置configure-sqoop( 图2 )
注意: 去掉未安装服务相关内容;例如(HBase、HCatalog、Accumulo),这样做是运行sqoop命令出现的警告
#if [ ! -d "${HBASE_HOME}" ]; then
# echo "Error: $HBASE_HOME does not exist!"
# echo 'Please set $HBASE_HOME to the root of your HBase installation.'
# exit 1
6、测试
sqoop version ( 图3)
# 连接后的效果(图4,图5),可以看到mysql数据库中的已经被sqoop连接
sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password 123
# 技巧: 连接mysql速度慢怎么办?
# 解决: 取消名称检测,提升访问速度
vim /etc/my.cnf
------------------
skip-name-resolve
sqoop list-databases -connect jdbc:mysql://47.97.169.52:3307/ -username root -password root 图1
图2
图3
图4
图5
在sqoop的docs目录下,打开index,html即可查看官网内容 file:///F://spoop/sqoop-1.4.7.bin__hadoop-2.6.0/docs/SqoopUserGuide.html#_literal_sqoop_export_literal
# 直连,连接一次就会失效
sqoop list-databases -connect jdbc:mysql://node1:3306/ -username root -password 123
# 通过自定义配置文件连接, 将需要导入或导出的参数写在配置文件汇总
sqoop --options-file 自定义文件
前提:因为要使用MapReduce框架所以需要启动DN和RM
# mr程序一直处于阻塞状态需要查看nodemanager是否启动成功
## 启动NM
start-yarn.sh
##勿忘记启动resourcemanager
yarn-daemon.sh start resourcemanager
## 8032 端口,resourcemanager
演示案例
# 1. 编写自定义启动文件
[root@node4 sqoop]# vim option
## 插入指定字段书写方式
------------------------------
import
--connect
jdbc:mysql://node1:3307/result_db
--username
root
--password
root
--as-textfile
--columns
id,browser_name
--table
dimension_browser
--delete-target-dir
-m
1
--target-dir
/sqoop/data
------------------------------
## 插入sql语句方式
------------------------------
import
--connect
jdbc:mysql://node1:3307/result_db
--username
root
--password
root
--as-textfile
--delete-target-dir
-m
1
--target-dir
/sqoop/data
-e
select * from dimension_browser where $CONDITIONS
------------------------------
## 将数据导入到hive中
------------------------------
import
--connect
jdbc:mysql://47.97.169.52:3307/result_db
--username
root
--password
root
--as-textfile
--query
'select * from dimension_browser where $CONDITIONS'
--delete-target-dir
--target-dir
/sqoop/tmp
-m
1
--hive-import
--create-hive-table
--hive-table
browser
----------------------注意: 这里如果无法自动建表,则需要我们在hive中创建对应的表,然后通过load data inpath '/sqoop/tmp/part-m-00000' into table browser;导入到hive数据中------------------------------
# 注意
## $CONDITIONS: -e情况下必须添加,类似mybatis的动态查询
## 在有条写的情况下格式 select * from dimension_browser where $CONDITIONS where id>20
# 3.运行测试
[root@node4 sqoop]# sqoop --options-file option
# 查看是否导入成功?是否生成了相关的文件,图1
# 通过hive查看文件的内容,图2
图1
图2
演示案例
# 导出到mysql
export
--connect
jdbc:mysql://node01:3307/test
--username
root
--password
123
-m
1
--columns
id,browser_name,browser_version
--export-dir
/sqoop/data
--table
h_browser
# 导出到mysql 指定分隔符(导入同理)
export
--connect
jdbc:mysql://node01:3307/test
--username
root
--password
123
-m
1
--columns
id,browser_name,browser_version
--export-dir
/sqoop/data
--table
h_browser
--input-fields-terminated-by
分隔符( eg: 逗号,顿号,^A.,\t..)
注意: 1.需要被导出的hdfs目录下有数据 ,即需要结合导入一起使用 2.导出数据到mysql时, 需要在mysql创建对应的表 (字段类型名称要匹配)
链接:https://pan.baidu.com/s/1P_BndD3_bmafHI_7tTVwPA 点赞私聊获取提取码哦~~~ 提取码:u7tb