sqoop数据迁移入门

Sqoop概述

1)官网	
http://sqoop.apache.org

2)场景  
传统型缺点,分布式存储。把传统型数据库数据迁移  

Apache Sqoop是一种用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具 

Sqoop安装部署

1)下载安装包  

2)解压
tar -xzvf .tar

3)修改配置  
vi sqoop-env.sh  

#Set path to where bin/hadoop is available 
#hadoop的安装目录
export HADOOP_COMMON_HOME=/root/hd/hadoop-2.8.5

#Set path to where hadoop-*-core.jar is available
#hadoop的安装目录
export HADOOP_MAPRED_HOME=/root/hd/hadoop-2.8.5

#set the path to where bin/hbase is available
#HBase的安装目录	
#export HBASE_HOME=

#Set the path to where bin/hive is available
#Hive的安装目录
export HIVE_HOME=/root/hd/hive

#Set the path for where zookeper config dir is
#ZooKeeper的安装目录
export ZOOCFGDIR=/root/hd/zookeeper-3.4.10/conf


4)将mysql的驱动jar包上传到sqoop安装目录的lib包下面

5)测试安装成功
bin/sqoop help

Sqoop的import命令

1)数据从mysql中导入到hdfs当中  

 bin/sqoop import \
--connect jdbc:mysql://bigdata121:3306/sq \
--username root \
--password root \
--table user \
--target-dir /sqoop/datas \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"

:是命令行换行的意思
–delete-target-dir 这个意思是如果hdfs文件系统中已经存在了这个文件夹就先删除,然后再创建。

2)数据mysql中导入到hdfs当中进行筛选
bin/sqoop import \
--connect jdbc:mysql://bigdata121:3306/sq \
--username root \
--password root \
--target-dir /sqoop/selectdemo \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select * from user where id<=1 and $CONDITIONS'

3)通过where筛选  
bin/sqoop import \
--connect jdbc:mysql://bigdata121:3306/sq \
--username root \
--password root \
--target-dir /sqoop/selectdemo \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table user \
--where "id<=1"

4)数据导入到hive
其实也是先把mysql的数据弄到hdfs中,在从hdfs中移动到hive
需要先创建hive表
bin/sqoop import \
--connect jdbc:mysql://bigdata121:3306/sq \
--username root \
--password root \
--table user \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table user_sqoop

问题:hiveconf异常处理
~/.bash_profile修改
加上
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/root/hd/hive/lib/*

问题:mysql权限问题

grant all privileges on *.* to root@'%' identified by "password";

flush privileges;

Sqoop的导出export命令

需求:Hive/hdfs的数据导出到mysql

1)根据hive中的字段创建mysql表

2)编写sqoop启动命令 
bin/sqoop export \
--connect jdbc:mysql://bigdata121:3306/sq \
--username root \
--password root \
--table info \
--num-mappers 1 \
--export-dir /user/hive/warehouse/info \
--input-fields-terminated-by "\t"	

3)mysql中查看数据是否导出。

Sqoop打包脚本的使用

1)创建文件夹
mkdir sqoopjob
2)创建脚本文件
vi job_hdfs2mysql.opt

export
--connect
jdbc:mysql://bigdata121:3306/sq
--username
root
--password
root
--table
info
--num-mappers
1
--export-dir
/user/hive/warehouse/info
--input-fields-terminated-by
"\t"
注意:一行命令,一行值

3)执行脚本文件
bin/sqoop --options-file /root/sqoopjob/job_hdfs2mysql.opt

sqoop常用命令

命令 说明
import 将数据导入到集群
export 将集群数据导出
codegen 将某数据库中表生成javaBean并打包为jar
eval 查看sql执行结果
create-hive-table 创建hive表
import-all-tables 导入某个数据库中所有表到hdfs中
list-tables 列出某个数据库下所有表
merge 将hdfs中不同或相同的目录下的数据合并在一起
help 查看帮助
version v 查看版本

sqoop常用参数

参数 说明
–connect 连接关系型数据库
–connection-manager 指定连接管理类
–driver jdbc的driver class
–username 连接数据库的用户名
–password 连接数据库的密码
–verbose 在控制台中打印详细信息
–help 查看帮助
–hive-import 将关系型数据库导入到hive表中
–hive-overwrite 覆盖掉hive表中已经存在的数据
–create-hive-table 创建hive表
–hive–table 接入hive表
–table 指定关系型数据库的表名

你可能感兴趣的:(大数据,大数据开发入门)