sqoop导出实战

Sqoop导出实战

普通导出

在Sqoop中,使用export进行导出,指的是从HDFS中导出数据到MySql中:

  1. 构建MySql的表:
CREATE TABLE `u2` (
  `id` int(11) DEFAULT NULL,
  `age` int(11) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
  1. HDFS导出到MySql
第一种:
上传数据到HDFS
[root@qianfeng01 ~]# vim u2.txt
1,18
2,20
3,30
[root@qianfeng01 ~]# hdfs dfs -put u2.txt /

导出语句:
[root@qianfeng01 sqoop-1.4.7]# sqoop export --connect jdbc:mysql://qianfeng01:3306/qfdb \
--username root \
--password 123456 \
--table u2 \
--export-dir '/u2.txt' \
--input-fields-terminated-by ',' \
-m 1
复制代码

要注意以下问题

  • MySql表的编码格式做为utf8,HDFS文件中的列数类型和MySql表中的字段数一样,最好指定分隔符
  • 导出暂不能由Hbase表导出MySql关系型数据库中
  • --export-dir是一个hdfs中的目录,它不识别_SUCCESS文件
  • --query导入的时候注意设置问题。
  • 导出数据中有些列值有"null",会报没法解析
  • 导出数据的类型需要和MySql中的一致(能自动转没有问题)

更新并插入导出

场景:

多维结果数据导出;异常重跑数据

--update-mode : 
updateonly,是默认,仅更新,不会新增数据;
allowinsert :更新并允许插入
--update-key : 指定更新字段
复制代码
CREATE TABLE `upv` (
  `country_id` int(11) NOT NULL AUTO_INCREMENT,
  `visits` int(11) DEFAULT NULL,
  PRIMARY KEY (`country_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

导入数据:
[root@qianfeng01 sqoop-1.4.7]# sqoop import --connect jdbc:mysql://qianfeng01:3306/qfdb \
--username root \
--password 123456 \
--table upv \
--target-dir /sqoopdata/upv \
-m 1  \
--fields-terminated-by ',' \
--null-string '\\N' \
--null-non-string '0';

导出语句:
[root@qianfeng01 sqoop-1.4.7]# sqoop export --connect jdbc:mysql://qianfeng01:3306/qfdb \
--username root \
--password 123456 \
--table upv \
--export-dir /sqoopdata/upv/* \
--input-fields-terminated-by "," \
--update-mode allowinsert \
--update-key country_id
复制代码

Sqoop导出parquet格式的数据

导入数据到HDFS中为parquet格式:

[root@qianfeng01 sqoop-1.4.7]# sqoop import --connect jdbc:mysql://qianfeng01:3306/qfdb \
--username root \
--password 123456 \
--table u2 \
--delete-target-dir \
--target-dir '/sqoopdata/u2' \
-m 1 \
--fields-terminated-by '\t' \
--null-string '\\N' \
--null-non-string '0' \
--as-parquetfile
复制代码

Sqoop的Hcatalog方式

# 创建表:
CREATE TABLE `par` (
  `id` int(11) NOT NULL DEFAULT '0',
  `age` int(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# hive创建表:
hive> create  table if not exists par(
`id` int,
 `age` int
)
row format delimited fields terminated by '\t'
stored as parquet
location '/sqoopdata/u2/';
复制代码

将hive包中的lib目录下的hcatalog相关包拷贝到sqoop的lib目录中去:

考虑将hcatalog的包放到sqoop中或者做环境变量。

必须保证hive对mysql有执行权限
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
复制代码

导出parquet格式语句:

[root@qianfeng01 sqoop-1.4.7] sqoop export \
--connect jdbc:mysql://qianfeng01:3306/qfdb \
--username root \
--password 123456 \
--table par \
--hcatalog-database default \
--hcatalog-table par \
-m 1

参数说明:
--table:MySQL库中的表名
--hcatalog-database:Hive中的库名
--hcatalog-table:Hive库中的表名,需要抽数的表

 更多大数据精彩内容欢迎B站搜索“千锋教育”或者扫码领取全套资料

猜你喜欢

转载自blog.csdn.net/longz_org_cn/article/details/131302771