DataX と MongoDB 間のデータのインポートとエクスポートのケース
0. 前に書く
- バージョン情報の説明:
MySQL データベースと DataX はマシン node01 にインストールされ、MongoDB はマシン node02 にインストールされます。
DataXバージョン:DataX3.0(オープンソース版)
MongoDB バージョン: MongoDB-5.0.2 (Linux 環境にインストール済み)
Linux版:CentOS7.5
1.MongoDBの事前知識
1.1 基本概念の詳細説明
1.1.1 データベース
1 つの mongodb で複数のデータベースを作成できます。MongoDB のデフォルトのデータベースは「db」で、データ ディレクトリに保存されます。MongoDB の 1 つのインスタンスは複数の独立したデータベースを保持でき、それぞれが独自のコレクションと権限を持ち、異なるデータベースは異なるファイルに配置されます。
一般的な操作は次のとおりです。
1) すべてのデータベースを表示
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
な
次のように解析されます。
-
admin: パーミッションの観点からは、これは「ルート」データベースです。ユーザーがこのデータベースに追加されると、そのユーザーはすべてのデータベース権限を自動的に継承します。すべてのデータベースの一覧表示やサーバーのシャットダウンなど、一部の特定のサーバー側コマンドも、このデータベースからのみ実行できます。
-
local: このデータはレプリケートされず、単一のローカル サーバーに限定された任意のコレクションを保存するために使用できます。
-
config: Mongo がシャーディング設定に使用される場合、構成データベースはシャーディングに関する情報を保存するために内部的に使用されます。
2) 現在使用しているデータベースを表示する
> db
test
な
3) データベースの切り替え
> use local
switched to db local
> db
local
な
1.1.2 コレクション
コレクションは、MySQL のテーブルに似た MongoDB ドキュメント グループです。
コレクションはデータベースに存在し、コレクションには固定構造がありません。つまり、さまざまな形式や種類のデータをコレクションに挿入できますが、通常、コレクションに挿入するデータには特定の関連性があります。
createCollection() メソッドは、MongoDB でコレクションを作成するために使用されます。コレクションを作成する方法を見てみましょう。
文法形式:
db.createCollection(name, options)
パラメータの説明:
-
name: 作成するコレクション名
-
options: オプションのパラメーター。次のパラメーターを使用して、メモリ サイズとインデックスに関連するオプションを指定します。
分野 | タイプ | 説明 |
---|---|---|
キャップされた | ブール値 | (オプション) true の場合、キャップ付きコレクションを作成します。固定コレクションは、最大値に達すると、最も古いドキュメントを自動的に上書きする固定サイズのコレクションです。値がtrueの場合、 sizeパラメータを指定する必要があります。 |
autoIndexId | ブール値 | (オプション) true の場合、_id フィールドにインデックスを自動的に作成します。デフォルトは false です。 |
サイズ | 価値 | (オプション) 上限付きコレクションの最大値 (バイト単位) を指定します。cappedがtrueの場合、このフィールドも指定する必要があります。 |
最大 | 価値 | (オプション) 上限付きコレクションに含まれるドキュメントの最大数を指定します。 |
ケース 1: テスト ライブラリに Whybigdata のコレクションを作成する
> use test switched to db test
> db.createCollection("whybigdata")
{ "ok" : 1 }
> show collections
Whybigdata
// 插入数据
> db.whybigdata.insert({
"name":"whybigdata","url":"www.whybigdata.com"}) WriteResult({ "nInserted" : 1 })
// 查看数据
> db.whybigdata.find()
{ "_id" : ObjectId("5d0314ceecb77ee2fb2d7566"), "name" : "whybigdata", "url" : "www.whybigdata.com" }
解析手順:
ObjectId は一意の主キーに似ており、すばやく生成して並べ替えることができます. これには 12 バイト (既定値)、24 の 16 進数で構成される文字列が含まれます (各バイトには 2 つの 16 進数を格納できます)。
-
最初の 4 バイトは、作成時の UNIX タイムスタンプを表します
-
次の 3 バイトはマシン識別コードです。
-
次の 2 バイトは、プロセス ID から PID を形成します。
-
最後の 3 バイトは乱数です
ケース 2: 固定コレクション mycol を作成する
> db.createCollection("mycol",{ capped : true,autoIndexId : true,size : 6142800, max : 1000})
> show tables;
whybigdata
mycol
な
ケース 3: コレクションを自動的に作成する
MongoDB では、コレクションを作成する必要はありません。ドキュメントを挿入すると、MongoDB は自動的にコレクションを作成します。
> db.mycol2.insert({
"name":"whybigdata"}) WriteResult({ "nInserted" : 1 })
> show collections
whybigdata
mycol
mycol2
ケース 4: コレクションの削除
> db.mycol2.drop()
True
> show tables;
whybigdata
mycol
な
1.1.3 ドキュメント
ドキュメントはキーと値のペアのセットです。MongoDB ドキュメントは同じフィールドを設定する必要はなく、同じフィールドは同じデータ型である必要はありません。これはリレーショナル データベースとは大きく異なり、MongoDB の非常に顕著な特徴でもあります。
簡単な例:
{
"name":"whybigdata"}
知らせ:
-
ドキュメント内のキーと値のペアは順序付けられています。
-
MongoDB では、型と大文字と小文字が区別されます。
-
MongoDB ドキュメントに重複キーを含めることはできません。
-
ドキュメント キーは文字列です。いくつかの例外を除いて、キーには任意の UTF-8 文字を使用できます。
2. DataX のインポートとエクスポートのケース
2.1 MongoDB データを読み取り、HDFS にインポートする
2.1.1 設定ファイルの書き込み
[whybigdata@node01 datax]$ vim job/mongdb2hdfs.json
{
"job": {
"content": [
{
"reader": {
"name": "mongodbreader",
"parameter": {
"address": ["node02:27017"],
"collectionName": "whybigdata",
"column": [
{
"name":"name",
"type":"string"
},
{
"name":"url",
"type":"string"
}
],
"dbName": "test",
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"column": [
{
"name":"name",
"type":"string"
},
{
"name":"url",
"type":"string"
}
],
"defaultFS": "hdfs://node01:8020",
"fieldDelimiter": "\t",
"fileName": "mongo.txt",
"fileType": "text",
"path": "/datax-out",
"writeMode": "append"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
Mongobreader パラメータ分析
-
address: MongoDB データのアドレス情報。MonogDB はクラスターの場合があるため、IP ポート情報は Json 配列の形式で指定する必要があります。【必要】
-
ユーザー名: MongoDB ユーザー名。【オプション】
-
userPassword: MongoDB パスワード。【オプション】
-
collectionName: MonogoDB のコレクション名。【必要】
-
column: MongoDB ドキュメントの列名。【必要】
-
name: 列の名前。【必要】
-
タイプ: 列のタイプ。【オプション】
-
スプリッター: MongoDB は配列型をサポートしていますが、Datax フレームワーク自体は配列型をサポートしていないため、mongoDB によって読み取られる配列型は、このセパレーターを介して文字列に結合する必要があります。【オプション】
2.1.2 実行
[whybigdata@node01 datax]$ bin/datax.py job/mongdb2hdfs.json
2.1.3 結果の表示
2.2 MongoDB データを MySQL に読み込む
2.2.1 MySQL でテーブルを作成する
mysql> create table whybigdata(name varchar(20),url varchar(20));
2.2.2 DataX 構成ファイルの書き込み
[whybigdata@node01 datax]$ vim job/mongodb2mysql.json
{
"job": {
"content": [
{
"reader": {
"name": "mongodbreader",
"parameter": {
"address": ["node02:27017"],
"collectionName": "whybigdata",
"column": [
{
"name":"name",
"type":"string"
},
{
"name":"url",
"type":"string"
}
],
"dbName": "test",
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": ["*"],
"connection": [
{
"jdbcUrl": "jdbc:mysql://node01:3306/datax",
"table": ["mongo"]
}
],
"password": "123456",
"username": "root",
"writeMode": "insert"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
2.2.3 実行
[whybigdata@node01 datax]$ bin/datax.py job/mongodb2mysql.json
2.2.4 結果の表示
mysql> select * from whybigdata;
+ + +
| name | url |
+ + +
| whybigdata | www.whybigdata.com |
+ + +
全文終わりました!