MongoDB部署与对接CDH的Hive

本篇文章,参考了两位大佬的博客,稍微做了一些修改,仅仅供参考。

一、MongoDB部署

1.1 软件版本

CDH6.2.1
MongoDB3.4.24
CentOS7

1.2 下载

点击链接https://www.mongodb.com/try/download/community,进入官网下载rpm文件:
红框下载
我们需要下载四个package:
1、server: mongoDB的服务端程序
2、utilities: 附加工具,如数据导入导出(可选)
3、mongos: 部署集群(可选)
4、shell: 用命令行连接mongoDB

1.3 安装

输入如下命令则可以安装上述4个package:

rpm -ivh mongodb-org-server-3.4.24-1.el7.x86_64.rpm 
rpm -ivh mongodb-org-tools-3.4.24-1.el7.x86_64.rpm
rpm -ivh mongodb-org-mongos-3.4.24-1.el7.x86_64.rpm
rpm -ivh mongodb-org-shell-3.4.24-1.el7.x86_64.rpm

这里我将rpm包放在/opt/mongodb 目录下,rpm -qpl rpm包名 可以查看对应路径,
比如执行:

rpm -qpl mongodb-org-mongos-3.4.24-1.el7.x86_64.rpm

1.4 启动

systemctl start mongod

1.5 连接

mongo --port 27017

1.6 配置

经过以上步骤,会生成一个/etc/mongod.conf的配置文件,配置了mongoDB默认的配置。默认的配置文件如下:

# mongod.conf
 
# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/
 
# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
 
# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:
 
# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo
 
# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
 
 
#security:
 
#operationProfiling:
 
#replication:
 
#sharding:
 
## Enterprise-Only Options
 
#auditLog:
 
#snmp:

这是一个yaml格式的配置文件,其中systemLog.path指明了mongoDB的系统运行日志的路径,storage.dbPath指定了mongoDB数据文件存放路径,processManagement.pidFilePath指明了mongoDB运行时进程文件存放路径,net.port指明了mongodDB服务的网络端口号,net.bindIp则制定了mongoDB网络服务绑定的ip地址。直接使用这些默认的配置,mongoDB就可以运行起来。但是,会存在以下问题:
1.上面这些路径都是散落在操作系统的各个目录中,在实际情况中我们想在一个存储空间比较大的路径下来存储mongoDB的数据,同时将相关的一些文件都放在同一目录下,例如这个路径是/data/mongodb/。/data/mongodb存储的是mongoDB存储的数据,日志文件目录使用默认目录;
2.默认配置的网络服务绑定地址为127.0.0.1,也就意味着默认情况下只能本机连接mongoDB。
3.采用的默认端口27017在一些情况下可能会遭到外部的攻击。需要改一个不太常用的端口。
所以,我们修改了这个默认的配置文件内容如下:

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /data/mongodb
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile

# network interfaces
net:
  port: 27017  #测试集群,不做修改
  bindIp: 0.0.0.0  # Listen to local interface only, comment to listen on all interfaces.


#security:

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options

#auditLog:

执行以下命令准备好环境

[root@Mysql_Master ~]# mkdir /data/mongodb
[root@Mysql_Master bin]# chown -R mongod:mongod /data/mongodb/

如果相应的日志文件也修改了目录,创建对应目录即可。

1.7 启动

如果没有使用mongoDB默认的文件目录和默认的端口,那么在启动之前,我们需要将selinux的状态设置为Permissive

setenforce 0

执行启动mongodb服务:

systemctl start mongod

1.8 设置账号密码(此步暂时省略)

第1步:开启认证
转到/bin路径下

./mongod --auth

第2步:创建管理员用户

> use admin
switched to db admin
> db.createUser({user:"admin",pwd:"password",roles:["root"]})
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }

第3步:认证登陆

> db.auth("admin", "password")

二、 Hive对接MongoDB

2.1 配置

查看hive-env.sh路径:
红框地址
我这里之前有配置用于其他服务,不做修改。
下载jar包,放入上述目录下:
https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver/3.6.3

https://mvnrepository.com/artifact/org.mongodb.mongo-hadoop/mongo-hadoop-hive/2.0.2

https://mvnrepository.com/artifact/org.mongodb.mongo-hadoop/mongo-hadoop-core/2.0.2

注意:mongo-java-driver的jar包版本不能低于mongodb组件版本

其他版本软件下载地址:
https://repo1.maven.org/maven2/org/mongodb/

进入到上述网站后,点击对应红色框选的jar包下载到windows端后上传linux对应hive-env.sh的目录下即可:

修改文件权限:

chmod -R 777 /opt/cloudera/parcels/GPLEXTRAS/lib/hadoop/lib

2.2 简单测试

Mongodb服务器上执行:

[root@Mysql_Master bin]# mongo --port 27017
> use test;

> db.user.insert({name:'lisi',age:22})

进入到hive中测试:

hive> use text;

hive> CREATE TABLE user_tmp ( 
    >  name STRING, 
    >  age INT
    >  ) STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler'  
    > WITH SERDEPROPERTIES('mongo.columns.mapping'='{"name":"name","age":"age"}')
    > TBLPROPERTIES('mongo.uri'='mongodb://192.168.99.41:27017/test.user');

hive> select * from user_tmp;

Mongodb中再插入数据:

> db.user.insert({name:'zhangsan',age:11})
> db.user.insert({name:'liqiushi',age:33})
> db.user.insert({name:'jiuer',age:19})
> db.user.insert({name:'lanlan',age:24})

再进入hive中查询查看:

同时,可以尝试CRUD的其他操作,数据都是实时同步的。

解释:如果是内部表,在删除表时,也会删除mongodb里面的数据。
Mongo.columns.mapping:hive表与mongodb字段的映射,字段名完全相同,可以不写,

('mongo.columns.mapping'='{"id":"_id","adam":"Adam","create_time":"createTime"}')
mongo.uri'='mongodb://用户名:密码@IP:端口/库.表

注意
本次测试没有加入用户名密码,因为之前没有配置,设置密码时建议不要导游@会与mongo.uri造成无法识别。
参考文档:
https://blog.csdn.net/shujuelin/article/details/106372341
https://blog.csdn.net/weixin_37569048/article/details/103110047
写的很棒!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值