.背景
公司希望使用MongoDB作为后端业务数据库,使用Hadoop平台作为数据平台。最开始是先把数据从MongoDB导出来,然后传到HDFS,然后用Hive/MR处理。我感觉这也太麻烦了,现在不可能没有人想到这个问题,于是就搜了一下,结果真找到一个MongoDB Connector for Hadoop

1.版本一定要按它要求的来,jar包去http://mvnrepository.com/下载就可以了,使用Hive只需要三个:
mongo-hadoop-core-1.5.1.jar
mongo-hadoop-hive-1.5.1.jar
mongo-java-driver-3.2.1.jar
2.将jar包拷到 <{HADOOP_HOME}/lib与{HIVE_HOME}/lib下,然后启动Hive,加入jar包

$ hiveLogging initialized using configuration in jar:file:/home/hadoop/opt/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties
hive> add jar /opt/module/hadoop/opt/hive/lib/mongo-hadoop-hive-1.5.1.jarr;
hive> add jar /opt/module/hadoop/opt/hive/lib/mongo-java-driver-3.2.1.jarr;

Hive Usage有两种连接方式:

其一MongoDB-based 直接连接hidden节点,使用 com.mongodb.hadoop.hive.MongoStorageHandler做数据Serde
其二BSON-based 将数据dump成bson文件,上传到HDFS系统,使用 com.mongodb.hadoop.hive.BSONSerDe

MongoDB-based方式

hive> CREATE TABLE eventlog> ( >   id string,>   userid string,>   type string,>   objid string,>   time string,>   source string> )> STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler' > WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id"}') > TBLPROPERTIES('mongo.uri'='mongodb://username:password@ip:port/xxx.xxxxxx');
hive> select * from eventlog limit 10;
OK
5757c2783d6b243330ec6b25    NULL    shb NULL    2016-06-08 15:00:07 NULL
5757c27a3d6b243330ec6b26    NULL    shb NULL    2016-06-08 15:00:10 NULL
5757c27e3d6b243330ec6b27    NULL    shb NULL    2016-06-08 15:00:14 NULL
5757c2813d6b243330ec6b28    NULL    shb NULL    2016-06-08 15:00:17 NULL
5757ee443d6b242900aead78    NULL    shb NULL    2016-06-08 18:06:59 NULL
5757ee543d6b242900aead79    NULL    smb NULL    2016-06-08 18:07:16 NULL
5757ee553d6b242900aead7a    NULL    cmcs    NULL    2016-06-08 18:07:17 NULL
5757ee593d6b242900aead7b    NULL    vspd    NULL    2016-06-08 18:07:21 NULL
575b73b2de64cc26942c965c    NULL    shb NULL    2016-06-11 10:13:06 NULL
575b73b5de64cc26942c965d    NULL    shb NULL    2016-06-11 10:13:09 NULL
Time taken: 0.101 seconds, Fetched: 10 row(s)

这时HDFS里是没有存任何数据的,只有与表名一样的文件夹

当你处理的时候,它是直接处理mongo里最新的数据。当然,如果你想存到HDFS里也可以,用CTAS语句就可以。
hive> create table qsstest as select * from eventlog limit 10;

还可以下载下来呢
PS:mongo的用户要有读写权限,jar包别忘了拷进去!
另一种方式我感觉有点没必要,没试,但我找到一篇博客详细写了。
下面转自:MongoDB与Hadoop技术栈的整合应用
BSON-based方式

BSON-based需要先将数据dump出来,但这个时候的dump与export不一样,不需要关心具体的数据内容,不需要指定fields list.

mongodump --host=datatask01:29017 --db=test --collection=ldc_test --out=/tmp
hdfs dfs -mkdir /dev_test/dli/bson_demo/
hdfs dfs -put /tmp/test/ldc_test.bson /dev_test/dli/bson_demo/
- 创建映射表
create external table temp.ldc_test_bson
(id string,fav_id array<int>,info struct<github:string, location:string>
)
ROW FORMAT SERDE "com.mongodb.hadoop.hive.BSONSerDe"
WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"id","fav_id":"fav_id","info.github":"info.github","info.location":"info.location"}')
STORED AS INPUTFORMAT "com.mongodb.hadoop.mapred.BSONFileInputFormat"
OUTPUTFORMAT "com.mongodb.hadoop.hive.output.HiveBSONFileOutputFormat"
location '/dev_test/dli/bson_demo/';

查询一下

0: jdbc:hive2://hd-cosmos-01:10000/default> select * from temp.ldc_test_mongo;
+--------------------+------------------------+-----------------------------------------------------------------+--+
| ldc_test_mongo.id  | ldc_test_mongo.fav_id  |                       ldc_test_mongo.info                       |
+--------------------+------------------------+-----------------------------------------------------------------+--+
| @Tony_老七           | [3,33,333,3333,33333]  | {"github":"https://github.com/tonylee0329","location":"SH/CN"}  |
+--------------------+------------------------+-----------------------------------------------------------------+--+
1 row selected (0.345 seconds)

打开数组可以这样


SELECT id, fid
FROM temp.ldc_test_mongo LATERAL VIEW explode(fav_id) favids AS fid;
-- 访问struct结构数据
select id, info.github from temp.ldc_test_mongo

mongodb导入hive相关推荐

  1. mysql表数据以本地文件方式导入Hive

    1.mysql生成数据 1)创建数据库和数据表,脚本如下: SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FORE ...

  2. hive向mysql导数据_导入Hive数据导MySQL

    导入Hive数据到MySQL 1. UDF 使用UDF比较方便,代码在http://svn.apache.org/repos/asf/hive/trunk/contrib/src/java/org/a ...

  3. sqoop将关系型数据库的表导入hive中

    1.sqoop 将关系型数据库的数据导入hive的参数说明: 2. 将关系型的数据库中的表数据导入到hive的表中 sqoop import --connect jdbc:oracle:thin:@/ ...

  4. sqoop1.4.5 导入 hive IOException running import job: java.io.IOException: Hive exited with status 1

    sqoop 导入 hive hive.HiveImport: Exception in thread "main" java.lang.NoSuchMethodError: org ...

  5. sqoop把mysql数据导入hive

    环境: 软件 版本 备注 Ubuntu 19.10   sqoop 1.4.7   mysql 8.0.20-0ubuntu0.19.10.1 (Ubuntu)   hadoop 3.1.2   hi ...

  6. sqoop导入hive时间格式问题解决方案

    sqoop导入hive时间格式问题解决方案 从mysql导入数据时,发现时间格式有问题,要么是时间后面多一位零,要么要使用时间戳,还能不能好好玩耍了?! 于是,我就逛论坛,找大神,最终无果,也许这个问 ...

  7. [hadoop读书笔记] 第十五章 sqoop1.4.6小实验 - 将mysq数据导入hive

    安装hive 1.下载hive-2.1.1(搭配hadoop版本为2.7.3) 2.解压到文件夹下 /wdcloud/app/hive-2.1.1 3.配置环境变量 4.在mysql上创建元数据库hi ...

  8. Sqoop导入hive中null是空字符串还是‘null‘的问题(关注)

    Sqoop导入hive中null字符串处理为NULL 其中注意 这个是转为空字符串而不是'null'这种. 可以用ifnull转化的 这种就是'null'

  9. sqoop从mysql导入hive字符集的问题乱码问题

    sqoop从mysql导入hive字符集的问题 Mysql都是使用utf8的字符集:所以这个与Mysql的配置无直接关系:但是可以通过修改Mysql上面的表默认字符集来解决,这个是不需要修改Hive配 ...

最新文章

  1. 友盟-统计不到线上应用数据的坑
  2. iOS最好用的引导页
  3. Ubuntu Android Studio/IntelliJ IDEA 支持文件中文命名
  4. C++ Iterators(迭代器)
  5. java intfunction_Java IntFunction類代碼示例
  6. 安装UBUNTU Server 11.10
  7. cgcs2000大地坐标系地图_为什么要从北京54和西安80统一到CGCS2000?测绘人必知!...
  8. .net平台的MongoDB使用
  9. MVC Controller与ActionResult的返回值
  10. drupal7 的安装方法
  11. 深度学习二(Pytorch物体检测实战)
  12. 微信朋友圈评论功能的实现步骤
  13. 像素值、物理尺寸、分辨率三者关系
  14. opengl的纹理过滤
  15. S曲线加减速算法 VS 梯形加减速算法
  16. JS 动画基础: 细说 requestAnimationFrame
  17. 7-4 sdut-C语言实验-分割整数
  18. linux 游戏 复刻,魔法门复刻手游官网版-魔法门复刻下载v4.00.9-Linux公社
  19. Chameleon跨端框架——一个理想主义团队的开源作品
  20. Python的安装与运行

热门文章

  1. Datawhale自组织学习报告!
  2. 提高 GPU 训练利用率的Tricks
  3. 达观杯_构建模型(一)linearSVM
  4. 手把手教你如何做建模竞赛(baseline代码讲解)
  5. 超越BERT的模型有哪些?
  6. 一道看完答案你会觉得很沙雕的「动态规划算法题」
  7. 美多商城之支付(支付宝介绍)
  8. 美多商城之用户中心(收货地址2)
  9. socket之send和recv原理剖析
  10. 爬虫之selenium爬取斗鱼网站