Hadoop---(6)Sqoop(数据传输)

6.Sqoop

 

Sqoop是一个用于hadoop数据和结构化数据之间转换的工具。全称SQL-TO-HADOOP.它可以把hadoop数据,包括hive和hbase存储的数据转化为结构化数据也就是数据库的数据,也可以把关系型数据库数据转化为hadoop数据

 

 

这些转换操作全是通过Hadoop的MapTask来完成的,并不会涉及到Reduce操作。这是因为我们只是进行数据的拷贝,并不会对数据进行处理或者计算,没有什么特殊的处理,所以在map阶段就可以输出数据。

 

 

Sqoop就是一个开源的工具,它允许用户将数据从关系型数据库抽取到hadoop中;也可以把MapReduce处理完的数据导回到数据库中。

 

 

6.1 sqoop命令详解

6.1.1 codegen 将关系型数据库表映射成java class以及javajar包

sqoopcodegen \

--connectjdbc:mysql://hadoop-all-01:3306/hadoop \

--usernamehive \

--passwordhive \

--tableemp \

--bindir/opt/code

 

6.1.2 create-hive-table创建hive表

sqoopcreate-hive-table  \

--connect<jdbc_url> \

--username<username> \

--password<password> \

--table<table_name> \ #根据关系型数据库什么表导

--create-hive-table\ #如果表已经存在,则JOB失败

--hive-database<database_name> \ #指定hive表所属的database

--hive-overwrite\ #如果存在表数据,则覆盖

--hive-table<hive table_name> \ #需要导入hive表的名字

 

 

6.1.3 eval:执行一个sql语句,并在控制台打印出来

sqoopeval \

--connectjdbc:mysql://hadoop-all-01:3306/hadoop \

--usernamehive \

--passwordhive \

-e"SELECT * FROM emp"

 

6.2 export

6.2.1  从HDFS导出数据到关系型数据库

语法:

sqoop export \

--columnscol1,col2,...... 导出到表哪几列

--direct:使用direct导出,速度更快

--export-dir<dir> HDFS哪一个目录导出

-m<n>: 指定mapper个数

--table<table-name>:导出数据库哪一张表

 

解析输入参数:

--input-enclosed-by<char> 设置输入字段的封闭字符

--input-escaped-by<char>:设置输入字段的转义字符

--input-fields-terminated-by<char>HDFS文件字段分隔符

--input-lines-terminated-by<char>HDFS文件换行符

 

 

输出格式化参数:

--enclosed-by<char> 设置字段封闭符

--escaped-by<char> 设置转义字符

--fields-terminated-by<char> 设置每一字段分割符

--lines-terminated-by<char>: 设置每一行结束分割符

--mysql-delimiters:使用mysql默认的分隔符,fields:,  lines: \n  escaped-by: \

#如果在hive表中该字段是字符串且为NULL,然后理解成为NULL而不是\N

--input-null-string<null-string>

#如果在hive表中该字段是非字符串类型且为NULL,然后理解成为NULL而不是\N

--input-null-non-string<null-string>

sqoopexport \

--connectjdbc:mysql://hadoop-all-01:3306/hadoop \

--usernamehive \

--passwordhive \

--drivercom.mysql.jdbc.Driver \

--export-dir/user/hive/warehouse/hadoop.db/m_d \

--columns"id,country,city,phone" \

--tabledirector \

--num-mappers2 \

--direct\

--input-fields-terminated-by',' \

--input-null-string'\\N' \

--input-null-non-string'\\N'

6.2.2 Hive数据导入到RMDBS表

这个其实跟HDFS数据导入到RMDBS表一样,因为数据就是存储在HDFS上的

 

6.3 import HDFS从RMDBS导入数据

import语法:

sqoop import \

--connect<jdbc-uri>

--username<username>

--password<password>

--target-dir<dir> #导入到哪一个HDFS目录

--table<table-name> #导入关系型数据库哪一张表的数据

--as-textfile# 导入为文本文件

--as-avrodatafile#导入为avro文件

--as-sequencefile#导入为序列化文件

--as-parquetfile#导入为parquet文件

--columns<col1,col2...>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值