在您的Windows个人计算机上,体验基于MongoDB的MapReduce功能只需15分钟
这篇文章是为那些没有太多时间但想要快速了解新技术的人所设计的。
它的目标是让读者在仅仅使用自己的个人电脑安装MongoDB的MapReduce,并在15分钟内体验一番。
ゴール
コマンドプロンプトで、以下のようにMapReduceの結果を表示します。
動物の種類ごとの集計値を得ることができます。
{
"results" : [
{
"_id" : "cheetah",
"value" : {
"count" : 10
}
},
{
"_id" : "turtle",
"value" : {
"count" : 10
}
},
{
"_id" : "zebra",
"value" : {
"count" : 10
}
}
],
"timeMillis" : 22,
"counts" : {
"input" : 30,
"emit" : 30,
"reduce" : 3,
"output" : 3
},
"ok" : 1
}
>
环境
・操作系统:Windows10 专业版(1803)x64(日语版)
・MongoDB:版本 4.0.0
作业的步骤
-
- 创建任务文件夹
-
- 安装MongoDB
-
- 数据导入
- 执行MapReduce操作
创建作业文件夹
接下来,将创建一个用于下载文件和其他操作的工作文件夹。虽然这项工作不是必需的,但从信息整理的角度来看,我认为最好还是做一下。
C:\sandbox\MongoDBMapReduce
引入MongoDB
下载
请在MongoDB的下载网站上选择以下选项,将“mongodb-win32-x86_64-2008plus-ssl-4.0.0-signed.msi”下载到工作文件夹中。
– 版本:Windows 64位 x64
– 安装包:下载(msi)
安装
双击下载的”mongodb-win32-x86_64-2008plus-ssl-4.0.0-signed.msi”进行执行。
选择默认的”下一步”按钮。
以后,所有内容都将默认一直进行到最后。
创建文件夹
创建以下文件夹。
C:\sandbox\MongoDBMapReduce\data
C:\sandbox\MongoDBMapReduce\data\db
C:\sandbox\MongoDBMapReduce\data\log
创建配置文件(mongod.cfg)。
修复以下已安装的文件。
C:\Program Files\MongoDB\Server\3.2\mongod.cfg
请根据需要将原始文件复制一份。
我們將按照以下方式進行更改。
systemLog:
destination: file
path: c:\data\log\mongod.log
storage:
dbPath: c:\data\db
systemLog:
destination: file
path: C:\sandbox\MongoDBMapReduce\data\log\mongod.log
storage:
dbPath: C:\sandbox\MongoDBMapReduce\data\db
运行mongod
在命令提示符中,转到安装的MongoDB的bin文件夹,并执行mongod命令。
cd C:\Program Files\MongoDB\Server\3.2\bin
mongod
输出如下,并启动mongod。
C:\Program Files\MongoDB\Server\3.2\bin>mongod
2018-08-01T12:24:19.271+0900 I CONTROL [initandlisten] MongoDB starting : pid=13848 port=27017 dbpath=C:\data\db\ 64-bit host=49-OT0087-4
2018-08-01T12:24:19.273+0900 I CONTROL [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] db version v3.2.10
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] git version: 79d9b3ab5ce20f51c272b4411202710a082d0317
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t-fips 3 May 2016
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] allocator: tcmalloc
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] modules: none
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] build environment:
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] distmod: 2008plus-ssl
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] distarch: x86_64
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] target_arch: x86_64
2018-08-01T12:24:19.274+0900 I CONTROL [initandlisten] options: {}
2018-08-01T12:24:19.293+0900 I - [initandlisten] Detected data files in C:\data\db\ created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
2018-08-01T12:24:19.295+0900 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=8G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2018-08-01T12:24:20.333+0900 I NETWORK [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2018-08-01T12:24:20.333+0900 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory 'C:/data/db/diagnostic.data'
2018-08-01T12:24:20.363+0900 I NETWORK [initandlisten] waiting for connections on port 27017
确认MongoDB shell是否正在运行。
在另一个命令提示符中,进入安装的MongoDB的bin文件夹,并执行mongo命令。
cd C:\Program Files\MongoDB\Server\3.2\bin
mongo
以下将以如下方式输出。
C:\Program Files\MongoDB\Server\3.2\bin>mongo
MongoDB shell version: 3.2.10
connecting to: test
一旦退出MongoDB shell。
exit
建立DB
使用“mapreducetest”作为名称创建数据库。
然后,在命令提示符下,在“c:\Program Files\MongoDB\Server\3.2\bin”目录中执行以下命令。
mongo mapreducetest
然后,在MongoDB shell上执行以下操作。
use mapreducetest
show dbs
以下是如下的情况.
c:\Program Files\MongoDB\Server\3.2\bin>mongo mapreducetest
MongoDB shell version: 3.2.10
connecting to: mapreducetest
> use mapreducetest
switched to db mapreducetest
> show dbs
local 0.000GB
mydb 0.000GB
希望使用「show dbs」命令能夠顯示「mapreducetest」,但卻沒有顯示出來。請放心,只要添加下列資料,它就會顯示出來。
数据输入
将数据输入。
将文档添加到名为”animals”的集合中。
请将以下内容复制并粘贴到MongoDB shell中。
db.animals.insert({"type":"cheetah","age":24});
db.animals.insert({"type":"zebra","age":14});
db.animals.insert({"type":"cheetah","age":20});
db.animals.insert({"type":"zebra","age":3});
db.animals.insert({"type":"turtle","age":32});
db.animals.insert({"type":"turtle","age":2});
db.animals.insert({"type":"cheetah","age":24});
db.animals.insert({"type":"zebra","age":14});
db.animals.insert({"type":"cheetah","age":20});
db.animals.insert({"type":"zebra","age":3});
db.animals.insert({"type":"turtle","age":32});
db.animals.insert({"type":"turtle","age":2});
db.animals.insert({"type":"cheetah","age":24});
db.animals.insert({"type":"zebra","age":14});
db.animals.insert({"type":"cheetah","age":20});
db.animals.insert({"type":"zebra","age":3});
db.animals.insert({"type":"turtle","age":32});
db.animals.insert({"type":"turtle","age":2});
db.animals.insert({"type":"cheetah","age":24});
db.animals.insert({"type":"zebra","age":14});
db.animals.insert({"type":"cheetah","age":20});
db.animals.insert({"type":"zebra","age":3});
db.animals.insert({"type":"turtle","age":32});
db.animals.insert({"type":"turtle","age":2});
db.animals.insert({"type":"cheetah","age":24});
db.animals.insert({"type":"zebra","age":14});
db.animals.insert({"type":"cheetah","age":20});
db.animals.insert({"type":"zebra","age":3});
db.animals.insert({"type":"turtle","age":32});
db.animals.insert({"type":"turtle","age":2});
会以以下方式显示。
> db.animals.insert({"type":"cheetah","age":24});
WriteResult({ "nInserted" : 1 })
> db.animals.insert({"type":"zebra","age":14});
WriteResult({ "nInserted" : 1 })
> db.animals.insert({"type":"cheetah","age":20});
WriteResult({ "nInserted" : 1 })
~ 以降、省略 ~
请键入以下内容,以确认存储的数据。
db.animals.find();
实际结果如下所示。
> db.animals.find();
{ "_id" : ObjectId("5b642d16c1c4784ac342eb66"), "type" : "cheetah", "age" : 24 }
{ "_id" : ObjectId("5b642d16c1c4784ac342eb67"), "type" : "zebra", "age" : 14 }
~ 中略 ~
{ "_id" : ObjectId("5b642d16c1c4784ac342eb79"), "type" : "zebra", "age" : 14 }
Type "it" for more
>
让我们再次使用以下命令显示数据库列表。
show dbs
这次,”mapreducetest”也被正确地添加了进去。
> show dbs
local 0.000GB
mapreducetest 0.000GB
mydb 0.000GB
>
执行MapReduce
请在MongoDB shell中复制并粘贴以下内容:
请定义map函数和reduce函数,并将它们传递给mapReduce(),以获取MapReduce的结果。
var map = function() {
emit(this.type, {count: 1});
};
var reduce = function(key, values) {
var result = {count: 0};
values.forEach(function(value) {
result.count += value.count;
});
return result;
};
db.animals.mapReduce(map, reduce, {out: {inline: 1}});
结果如下。
> db.animals.mapReduce(map, reduce, {out: {inline: 1}});
{
"results" : [
{
"_id" : "cheetah",
"value" : {
"count" : 10
}
},
{
"_id" : "turtle",
"value" : {
"count" : 10
}
},
{
"_id" : "zebra",
"value" : {
"count" : 10
}
}
],
"timeMillis" : 22,
"counts" : {
"input" : 30,
"emit" : 30,
"reduce" : 3,
"output" : 3
},
"ok" : 1
}
>
这样一来,可以执行MapReduce了!
最后
那么,这段时间您完成得如何?如果您能告诉我实际耗时多久,我会参考一下。
请参考
在Mongo中执行MapReduce操作
尝试通过使用Windows版MongoDB进行安装并使用MongoShell运行CRUD命令。
在mongodb中玩MapReduce游戏
以上