大数据分析:sqoop学习笔记
1. sqoop框架介绍
sqoop是SQL到Hadoop的数据迁移工具。
SQL-to-Hadoop:Sqoop是用于在结构化数据库和Hadoop之间高效传输大批量数据的工具。
Sqoop作用是从结构化数据库向Hadoop中导入数据,也可以从Hadoop向结构化数据库导出数据。
在这里的结构化数据库可以是MySQL、Oracle或者主机等;Hadoop可以是HDFS、Hive、HBase。
导入到Hadoop的数据可以通过MapRudece进行处理。
Sqoop的底层原理本质上是MapReduce任务。首先通过MapReduce从数据库导出一个表,然后从表中逐行抽取数据,最后将一行行的数据导入或导出HDFS。
总而言之,sqoop是用来向hadoop传输结构化数据的传输工具。
2. sqoop的安装配置
1.下载Sqoop
打开官网,选择镜像,选择版本,选择下载链接
2.解压缩
tar -zxvf … -C …
3.配置sqoop-env.sh文件
解压缩后进入sqoop文件夹的conf文件夹下,打开sqoop-env.sh进行配置
这里需要配置四个环境变量:
HADOOP_COMMON_HOME,
HADOOP_MAPRED_HOME,
HBASE_HOME,
HIVE_HOME.
HADOOP_COMMON_HOME与HADOOP_MAPRED_HOME,需要填hadoop文件夹路径
HBASE_HOME,填hbase的文件夹路径
HIVE_HOME.填hive的文件夹路径
配置完保存退出
为了之后使用sqoop方便,可以去~/.bashrc配置环境变量
vi sqoop-env.sh
vi ~/.bashrc
export CLASSPATH=$CLASSPATH:$SQOOP_HOME/lib
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
记得配完要 source ~/.bashrc
4.把MYSQL的驱动复制到sqoop的lib下(如果要使用mysql导数据到hadoop的话)
cp mysql-connector-java-5.1.40-bin.jar /usr/local/sqoop/lib
我的驱动在hive的lib里
查看一下sqoop是不是与mysql链接了
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root -P
然后输入密码
出现这个就连接成功了
3. sqoop的使用
sqoop是通过执行配置文件实现对数据的导入导出
(1)将数据从Hive导出MySQL
“结果截图”中mysql中ml表的前10行数据即可
select * from ml limit 10;
【配置文件】
export
--connect
jdbc:mysql://localhost:3306/shopping //要链接的mysql数据库
--username
root
--password
hadoop
--table //表名
ml
--export-dir
'/user/hive/warehouse/movielens.db/ml'
--fields-terminated-by //hive里的表用的分隔符
','
执行配置文件
sqoop --options-file /opt/sqoopconf/conf1
数据导出成功
在mysql查看该数据
(2)将数据从MySQL导入HBase
“结果截图”中hbase中ml表的前10行数据即可
scan ‘ml’,{LIMIT=>10}
【配置文件】
import
--connect
jdbc:mysql://localhost:3306/shopping
--username
root
--password
hadoop
--table
ml
--hbase-table
ml
--column-family
info
--hbase-row-key
movieID
--hbase-create-table
-m //是否在不存在情况下创建表
1
执行配置文件
sqoop --options-file /opt/sqoopconf/conf2
数据导出成功
在hbase查看数据
(3)MYSQL查询评分值>4的结果,将结果导入HDFS数据
“结果截图”中hdfs中文件的前10行数据即可
head -10 文件名
【配置文件】
import
--connect
jdbc:mysql://localhost:3306/shopping
--username
root
--password
hadoop
--target-dir
hdfs://localhost:9000/sqoop1 //导出到hdfs的目标文件夹
--delete-target-dir //若目标用户已存在,删除它
-m #启动 Map 数量
1
--as-textfile //导入数据以文本格式存放在HDFS上
--null-string
' '
--query //选择要导出的数据(“and $CONDITIONS” 一定要带)
"select * from ml3 where tating>4.0 and $CONDITIONS"
执行成功
查看hdfs里的文件
实验反思:
不同数据库之间要注意表与表之间的数据格式,格式不同会导致数据传输错误,还有注意分隔符,csv是用逗号分隔(要不就先别再数据库建表,直接在配置文件里写新建表)