sqoop从hive、hdfs导入导出数据(mysql)

背景:sqoop主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。这里主要以mysql为例介绍一下,导入导出的使用方法。

详情参考官方文档:http://sqoop.apache.org/docs/1.4.5/SqoopUserGuide.html#_purpose_4

1.首先安装对应版本的sqoop
2.拷贝mysql的jar包到,/home/sqoop/lib 下

3.使用方式介绍

导入数据到hdfs

1)方式一
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--table table123 \
--target-dir /user/foo/joinresults \   
#hdfs路径
--num-mappers 1 \             #map数量
--as-parquetfile \ #设置文件格式
--columns id,name \  #可设置要导出的列
2)方式二sql的方式
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \   #where是必须的
--target-dir /user/foo/joinresults \   #hdfs路径
--delete-target-dir \ #若目标目录已存在,则删除
--compress \ #指定压缩
--compression-codec org.apache.hadoop.io.compress.snappyCodec \ #指定压缩方式snappy
--fields-terminated-by '|'

3)导入增量数据除了在sql里用where条件过滤,还可以有命令选项如下
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \   #where是必须的
--target-dir /user/foo/joinresults \   #hdfs路径
#--delete-target-dir \ #若目标目录已存在,则删除(不能通下边的append追加,一起使用)
--check-column \  #检查哪一列,如id
--incremental  append \  #追加,还可选  lastmodified
--last-value 7636 \ #id大于7636的

4)快速导出数据
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \   #where是必须的
--target-dir /user/foo/joinresults \   #导入hdfs路径
--delete-target-dir \ #若目标目录已存在,则删除(不能通下边的append追加,一起使用)

--direct \ #用这个命令从mysql导出的时候就不走mapreduce而是直接import的,速度用比以前快很多。
5)数据导出
sqoop export \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--table table123 \   
--export-dir /user/foo/joinresults \   #导出hdfs路径

6)导入导出到hive
sqoop import \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--query 'select * from table123 WHERE $CONDITIONS' \   #where是必须的
--fields-terminated-by '|'
--hive-import \
--hive-database default \
--hive-table table 123 \

导出hive到mysql
sqoop export \
--connect jdbc:mysql://localhost/db \
--username root \
--password 123456 \
--table table123 \   
--export-dir /user/foo/joinresults \   #导出hive表数据存储路径
--input-fields-terminated-by '|' \  #分隔符

注意:
1.4.6以前的版本从database导入数据到hive的话,hive存储格式如果为parquet的话,导入会出错

脚本执行的方式
bin/sqoop --option-file /opt/script/sqoop_test.txt --table tablename(还可以用这种方式传递参数)
vi sqoop_test.txt
import 
--connect 
jdbc:mysql://localhost/db 
--username 
root 
--password 
123456 
--table 
table123 
--target-dir 
/user/foo/joinresults 
--num-mappers 

猜你喜欢

转载自blog.csdn.net/qq_34485930/article/details/80868017
今日推荐