mysql hive的导数_记一次蛋疼的mongo to hive导数过程
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导数过程相关推荐
- 多队列 部分队列没有包_记一次TCP全队列溢出问题排查过程
简介:记一次TCP全队列溢出问题排查过程 1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家. 2. 问题描述 ...
- mysql connection是什么_记一次MySQL出现too many connection
今天中午的时候突然接到报警,MySQL连接数暴增..本来设置的max_conntion=6000, 这个数值连接已经够用.接到报警速度连接服务器连接mysql总是报如下错误: [mysql@local ...
- mysql 二十条记录_记 MySQL优化 20条
大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查 ...
- mysql 安装只有一半_记一次MySQL安装出现的坑爹问题。。。
关键词:mysql安装msvcr100.dll缺失 vc++2010 : win10系统首次安装mysql,图方便下载了图形界面的安装包(5.6.4),本以为小事一桩:装一半失败.卸载清注册表.重装 ...
- net start mysql 服务名无效_记一次服务器被植入挖矿木马cpu飙升200%解决过程
来自:开源中国,作者:我叫刘半仙 链接:https://my.oschina.net/liughDevelop/blog/1786631 " 某日,正在午休中,突然一则噩耗从前线传来:网站 ...
- mysql挂载数据卷_记一次生产数据库数据文件进行分区转移
概述 由于之前同事没有对磁盘分区做规划,可以看到数据和系统是在同个分区的,没有单独规划一个数据分区给数据库,还有个分区是640G没有用上.下面简单介绍一下mysql数据库数据文件的转移过程. 1.新建 ...
- mysql无法启动修复_记一次MySQL无法启动及修复经历
记得有次本地的MySQL无法启动,网上说,去删掉InnoDB日志就行,我就傻乎乎的去删掉了InnoDB相关的文件,果然,没有任何问题,正常启动了. 可是谁曾想,过了几天,故障复现了,我就按部就班的又去 ...
- mysql native数据同步_记一次MySQL(5.7版本)数据库的主从同步和备份
我遇到的问题 我先后在BAT三大云服务器商购买了学生机,配置如下百度云2核/4G 阿里云1核/2G 腾讯云1核/2G 我的解决方案 由于我不知道百度云的续费规则,导致买了2核/4G的服务器之后以为像阿 ...
- Mysql排序添加名词_记面试中问到的MySQL的SQL调优问题
目录 1.场景还原 2.名词解释 3.实践情况 4.个人观点 5.引申问题 1.场景还原 面试官:小伙子,听说你会SQL调优,那我这里有一条SQL,你来帮我调优一下.SQL如下: SELECT * F ...
- 阿里云下mysql远程访问被拒绝_记一次MySQL数据库拒绝访问的解决过程
最近在折腾wordpress博客,连接MySQL数据库时提示拒绝访问.经过排查,解决了问题.这里记录下解决问题的方案,以及解决的思路.如有遇到类似问题的读者可以参考下. 用wordpress搭博客,数 ...
最新文章
- 一文吃透JAVA定时器格式
- 清华大学校内智能车竞赛辅导资料
- All input tensors must be on the same device
- 第三阶段:2.产品运营:4.活动运营
- Ubuntu下使用VSCode的launch.json及tasks.json编写
- 用计算机怎么录资料,如何在短时间内快速录入大量数据 -电脑资料
- 饥荒海难创建显示专用服务器,饥荒创建世界时一直显示启动服务器 | 手游网游页游攻略大全...
- SharePoint Framework 构建你的第一个web部件(三)
- 【opencv学习】【图像的阈值处理】
- pydobc连接sql server_pyodbc 连接sql server
- element 让日期选择器一直显示选择面板
- 学习网站及编程电子书下载网站
- vscode写的html网页中文乱码
- 经纬财富:徐州炒白银需要注意哪些技术指标
- halcon与C#混合编程(三)数字识别
- jetson nano 部署yolov5s
- 【CentOS 7笔记35】,几个特殊符号和一些常用命令#171117
- 利用turtle库绘制五角星(以及填充)
- 查看电脑已连接无线的密码
- 刷PAT啦1008~1010