1. 起因

一次hive查数过程中,发现hive中缺省了10天的近3000w的数据,自问自答:怎么办,当然是要补数啊!从哪里补,mongo啊(还好mongo中有一份)!

mongo中数据是bson保存,而且数据列与hive不一样!

2. 解决方案

方案1:mongoexport

思路:由于mongoexport只能以逗号分割字段,所以要导到hive里面最快的方式就是,利用mysql可以导逗号的cvs文件,还可以指定列,并且约束严格可以方便的检查数据正确性。

所以,第一反应是mongo to cvs to mysql to hive,但是很快就失败了,过程还是要记录下来的!

第一步:mongo to cvs

语句:sudo ./mongoexport -hxxx --port xxx -u xxx -pxxx -d sms -c outbox1 --type=csv -f id,type,mobile, -q '{optime:{$gte: "2017-02-19 05:40:00", $lte: "2017-02-20 05:40:00"}}' -o /home/q/temp_mongo/mongo_data.cvs

第二步:cvs to mysql

语句:LOAD DATA LOCAL INFILE '/home/xxx/xx00' INTO TABLE xxxtable FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

插曲:mongo_data.cvs数据太大60多G,采用split切分split -50000 mongo_data.cvs,每个文件5w行切分,第一次测试就先切1000行吧:csplit /mongo_data.cvs 1000先将文件切成了2份!

问题

mongoexport对字符串不加"导致字段中包含逗号,,导致导入失败!(知道为啥不直接到hive了吧,导数过程肯定有问题啊,mysql解决问题多方便快捷)

mongoexport对于\不会转义,所以字符串中出现\[汉字],eg : \请...形式的字符,mysql无法识别。

报错: [HY000][1300] Invalid utf8 character string: 'xxx'

最简单的方法要解决这些问题太玛法,迅速放弃,期待mongoexport更智能点吧,找其他快速解决的办法!

方案2:mongo shell

mongoexport不能解决问题,借助shell也许是最快的办法了。

思路:mongo shell to cvs to hive

第一步: 新建脚本 export.js

db.auth("xxx","xxx");

conn = new Mongo();

db = conn.getDB("xxxdb");

var cur = db.xxxdb.find({optime:{$gte: "2017-02-19 05:40:00", $lte: "2017-02-20 05:40:00"}});

var obj;

while(cur.hasNext()){

obj = cur.next();

print(obj.id+"\t"+ ... +"\t"+obj.subaccount+"\n");

}

tip: 和在命令行语法差不多,可以随意指定输出格式!这样就可以直接一步到hive了

第二步: 使用mongo执行cd .../mongodb/bin目录下的mongo脚本,./mongo --help查看帮助

sudo ./mongo xxxip:30000/xxdb -u xxx -p xxx export.js > /home/q/temp_mongo/outbox

注:export.js放在当前目录,所以没有路径!并且要删除outbox前两行输出: sed -i '1,2d' outbox

第三步:导hive

#!/usr/bin/env bash

source /etc/profile

eval cd $(dirname $0)

currentDir=$(pwd)

line="xxx"

_HIVE_TABLE=xxxdb

PATH_FILE="${currentDir}/xxx"

gzip ${PATH_FILE}

PATH_GZ="${PATH_FILE}.gz"

echo "PATH_GZ:${PATH_GZ}"

hive -e "set mapreduce.job.name = ${0}_xxx;USE wirelessdata; \ alter table ${_HIVE_TABLE} add IF NOT EXISTS PARTITION(num='${line}'); \ LOAD DATA LOCAL INPATH '${PATH_GZ}' OVERWRITE INTO TABLE ${_HIVE_TABLE} partition(num=${line});" || exit 1

rm -f ${PATH_FILE}

rm -f ${PATH_GZ}

echo "end success."

搞定,也算比较快的方式吧- -!

3. 总结

我想只有坑踩多了,才会成长吧!你将从本文获取如下知识点:

使用mongoexport导出mongo数据。

使用shell脚本个性化导出mongo数据。

cvs导mysql,字符串中特殊字符的问题。

cvs导hive的脚本基本知识。

mysql,hive,mongo之间数据导入导出方法。

mysql hive的导数_记一次蛋疼的mongo to hive导数过程相关推荐

  1. 多队列 部分队列没有包_记一次TCP全队列溢出问题排查过程

    简介:记一次TCP全队列溢出问题排查过程 1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家. 2. 问题描述 ...

  2. mysql connection是什么_记一次MySQL出现too many connection

    今天中午的时候突然接到报警,MySQL连接数暴增..本来设置的max_conntion=6000, 这个数值连接已经够用.接到报警速度连接服务器连接mysql总是报如下错误: [mysql@local ...

  3. mysql 二十条记录_记 MySQL优化 20条

    大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查 ...

  4. mysql 安装只有一半_记一次MySQL安装出现的坑爹问题。。。

    关键词:mysql安装msvcr100.dll缺失  vc++2010 : win10系统首次安装mysql,图方便下载了图形界面的安装包(5.6.4),本以为小事一桩:装一半失败.卸载清注册表.重装 ...

  5. net start mysql 服务名无效_记一次服务器被植入挖矿木马cpu飙升200%解决过程

    来自:开源中国,作者:我叫刘半仙  链接:https://my.oschina.net/liughDevelop/blog/1786631 " 某日,正在午休中,突然一则噩耗从前线传来:网站 ...

  6. mysql挂载数据卷_记一次生产数据库数据文件进行分区转移

    概述 由于之前同事没有对磁盘分区做规划,可以看到数据和系统是在同个分区的,没有单独规划一个数据分区给数据库,还有个分区是640G没有用上.下面简单介绍一下mysql数据库数据文件的转移过程. 1.新建 ...

  7. mysql无法启动修复_记一次MySQL无法启动及修复经历

    记得有次本地的MySQL无法启动,网上说,去删掉InnoDB日志就行,我就傻乎乎的去删掉了InnoDB相关的文件,果然,没有任何问题,正常启动了. 可是谁曾想,过了几天,故障复现了,我就按部就班的又去 ...

  8. mysql native数据同步_记一次MySQL(5.7版本)数据库的主从同步和备份

    我遇到的问题 我先后在BAT三大云服务器商购买了学生机,配置如下百度云2核/4G 阿里云1核/2G 腾讯云1核/2G 我的解决方案 由于我不知道百度云的续费规则,导致买了2核/4G的服务器之后以为像阿 ...

  9. Mysql排序添加名词_记面试中问到的MySQL的SQL调优问题

    目录 1.场景还原 2.名词解释 3.实践情况 4.个人观点 5.引申问题 1.场景还原 面试官:小伙子,听说你会SQL调优,那我这里有一条SQL,你来帮我调优一下.SQL如下: SELECT * F ...

  10. 阿里云下mysql远程访问被拒绝_记一次MySQL数据库拒绝访问的解决过程

    最近在折腾wordpress博客,连接MySQL数据库时提示拒绝访问.经过排查,解决了问题.这里记录下解决问题的方案,以及解决的思路.如有遇到类似问题的读者可以参考下. 用wordpress搭博客,数 ...

最新文章

  1. 一文吃透JAVA定时器格式
  2. 清华大学校内智能车竞赛辅导资料
  3. All input tensors must be on the same device
  4. 第三阶段:2.产品运营:4.活动运营
  5. Ubuntu下使用VSCode的launch.json及tasks.json编写
  6. 用计算机怎么录资料,如何在短时间内快速录入大量数据 -电脑资料
  7. 饥荒海难创建显示专用服务器,饥荒创建世界时一直显示启动服务器 | 手游网游页游攻略大全...
  8. SharePoint Framework 构建你的第一个web部件(三)
  9. 【opencv学习】【图像的阈值处理】
  10. pydobc连接sql server_pyodbc 连接sql server
  11. element 让日期选择器一直显示选择面板
  12. 学习网站及编程电子书下载网站
  13. vscode写的html网页中文乱码
  14. 经纬财富:徐州炒白银需要注意哪些技术指标
  15. halcon与C#混合编程(三)数字识别
  16. jetson nano 部署yolov5s
  17. 【CentOS 7笔记35】,几个特殊符号和一些常用命令#171117
  18. 利用turtle库绘制五角星(以及填充)
  19. 查看电脑已连接无线的密码
  20. 刷PAT啦1008~1010

热门文章

  1. 新员工月度计划制定心得
  2. 前后端分离实现excel批量导入导出功能
  3. 一起学习PySNMP——理解什么是MIB
  4. 弹性碰撞次数与圆周率的关系 - 3Blue1Brown
  5. unity 更换standard shader
  6. ubuntu16.04 部署dzzoffice+onlyoffice 局域网实现word、excel文档协同编辑
  7. 2022年政府工作报告词频分析
  8. data 谷歌浏览器更改user 路径_谷歌浏览器修改缓存路径
  9. 激光SLAM导航系列(四)全局路径规划
  10. QQ浏览器书签栏不见了怎么办 找回QQ浏览器书签栏方法