本文分享本菜鸟的Sqoop学习笔记。Sqoop能够实现Hadoop(hive)与传统数据库之间的数据传递。主要用于数仓(Hive)与数据库之间的数据传输。
本菜鸟QQ:599903582
笨鸟先飞,熟能生巧 ~
比心心 ~
提示:以下是本篇文章正文内容,下面案例可供参考
开源工具,主要用户在Hadoop(Hive)与传统的数据库之间进行数据的传递。
可以将一个关系型数据库中的数据到进到Hadoop的HDFS中,也可以将HDFS的数据倒进到关系型数据库中。
注意:Sqoop2不打算应用于生产环境。Sqoop1可以。
Sqoop,将导入导出的命令翻译成MapReduce程序来实现. (其实只有map)。
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
拷贝jdbc驱动到sqoop的lib目录下
$ cp mysql-connector-java-5.1.27-bin.jar /opt/module/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
全部导入:
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /company \ //指定要发送到的HDFS 的路径,路径不存在自动创建
--delete-target-dir \ //因为是通过Mapreduce程序来实现的,如果目标文件存在会报错,所有如果有就将其删除
--num-mappers 1 \ //设置Map的个数
--fields-terminated-by "\t" \ //元素之间使用什么分割
--split-by id; //分区按照id来分区
注意:
查询导入:
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--target-dir /company \
--delete-target-dir \
--num-mappers 2 \
--fields-terminated-by "\t" \
//根据查询语句来进行导入,must contain
//'$CONDITIONS' in WHERE clause. 必须有
--query 'select id,name,sex from staff where id <= 10 and $CONDITIONS' \
--split-by id
//注意:使用query,必须制定target-dir和split-by,因为这是没有默认值
//如果query后面使用的是创引号,则$CONDITIONS前必须加转移符,放置shell识别为自己的变量
导入指定列:
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--target-dir /company \
--delete-target-dir \
--num-mappers 2 \
--fields-terminated-by "\t" \
--columns id,name \ //指定要上传的指定列
--split-by id
//注意:columns中如果涉及到多列,用逗号分割,分割时不要添加空格
通过sqoop关键字筛选查询指定数据
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--target-dir /company \
--delete-target-dir \
--num-mappers 2 \
--fields-terminated-by "\t" \
--table staff \
--where "id=1" //指定查询规则
bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--delete-target-dir \
--num-mappers 2 \
--hive-import \ //声明hive
--fields-terminated-by "\t" \
--hive-overwrite \ //写入选项
--hive-table staff_hive //传入后的表名
注意:过程分两步。
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_company" \
--num-mappers 1 \
--split-by id
注意:
bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 123456 \
--table staff \
--num-mappers 2 \
--export-dir /user/hive/warehouse/staff_hive \ //指定要输出的文件的路径
--input-fields-terminated-by "\t"
注意:
touch opt/job_HDFS2RDBMS.opt
vi opt/job_HDFS2RDBMS.opt
export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"
执行:
$ bin/sqoop --options-file opt/job_HDFS2RDBMS.opt
Sqoop的内容相对来说比较少,也比较简单,主要也是用于数仓(Hive)与数据库之间的数据传输。
本菜鸟QQ:599903582
笨鸟先飞,熟能生巧 ~
比心心 ~