CDB MongoDBから Hiveへのデータ移行

Prev Next

VPC環境で利用できます。

このガイドでは、NAVERクラウドプラットフォーム Object Storageを用いて Cloud DB for MongoDBから Hiveにデータをマイグレーションする方法について説明します。

MongoDBから Hiveにデータをマイグレーションする方法には、次の2つの方法があります。

  1. NAVERクラウドプラットフォーム CDB MongoDBにデータをインポートする方法
  2. CDB MongoDBから Object Storageにデータをエクスポートし、Cloud Hadoop Hiveから External Tableにデータをインポートする方法

hadoop-vpc-use-ex9_0-0

事前タスク

  1. Object Storageを作成します。

  2. Cloud Hadoopクラスタを作成します。

  3. Cloud DB for MongoDBとアプリケーションサーバを作成します。

  4. 作成した MongoDBの Privateドメイン、ポート、ユーザー名、ユーザーパスワードを確認します。

MongoDBでデータを読み込む

アプリケーションサーバにアクセスし、MongoDBサーバにアクセスしてデータをインポートする方法は、次の通りです。

  1. Cloud DB for MongoDB を開始するガイドを参照して、アプリケーションサーバにアクセスし、MongoDBをインストールします。

  2. 以下のコマンドを順に実行して mongoimportをインストールし、圧縮を展開します。

    # wget https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.2/x86_64/RPMS/mongodb-org-tools-4.2.17-1.el6.x86_64.rpm
    # rpm -ivh mongodb-org-tools-4.2.17-1.el6.x86_64.rpm
    # wget https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.2/x86_64/RPMS/mongodb-org-shell-4.2.17-1.el6.x86_64.rpm
    # rpm -ivh mongodb-org-shell-4.2.17-1.el6.x86_64.rpm
    
  3. wget コマンドを用いてインポートするデータをダウンロードします。

    # wget http://www.barchartmarketdata.com/data-samples/mstf.csv
    
  4. 以下のコマンドを実行してダウンロードしたデータを MongoDBにアップロードします。

    # mongoimport mstf.csv --type csv --headerline -d marketdata -c minibars -h <private domain>:<port> -u <username> -p <password> --authenticationDatabase admin
    
    参考

    MongoDBで DBと Collectionを直接作成してもデータを準備できます。

MongoDBから Object Storageにデータをエクスポート

MongoDBにアップロードしたデータを Object Storageにエクスポートする方法は、次の通りです。

  1. 以下のコマンドを実行して AWS CLIをインストールします。

    • NAVERクラウドプラットフォームの Object Storageは AWS S3に対して互換性を持つストレージであるため、AWS CLIを使用できます。
    # curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    # unzip awscliv2.zip
    # ./aws/install
    
    --インストールの確認
    # aws --version
    
  2. 以下のコマンドを実行してデータをエクスポートします。

    # mongoexport --host=<private domain>:<port> --collection=minibars --db=marketdata --out=marketdata.csv -u <username> -p <password> --authenticationDatabase admin
    
  3. Ncloud APIを参照して Access Key IDと Secret Keyを確認します。

  4. 確認した認証キー情報を基に、以下のように aws configureを設定します。

    # aws configure
    AWS Access Key ID [None] : Access Key IDを入力
    AWS Secret Access Key [None] : Secret Keyを入力
    Default region name [None] :
    Default output format [None] :
    
  5. 以下のコマンドを順に実行してバケットリストを確認します。また、データをアップロードし、アップロードが正常に行われたかを確認します。

    # aws --endpoint-url=http://kr.object.ncloudstorage.com s3 ls
    --バケットリスト
    2021-10-16 18:49:28 cdbbucket
    2021-09-29 12:20:58 ex-bucket
    2021-10-05 15:24:46 example-5
    2021-10-06 10:59:15 example-6
    
    # aws --endpoint-url=http://kr.object.ncloudstorage.com s3 cp marketdata.csv s3://<データをアップロードするバケット名>/
    --アップロードの結果
    upload: ./marketdata.csv to s3://ex-bucket/marketdata.csv
    
    # aws --endpoint-url=http://kr.object.ncloudstorage.com s3 ls s3://ex-bucket/
    --アップロード確認の結果
    2021-10-19 11:05:12   16261296 marketdata.csv
    
    参考

    NAVERクラウドプラットフォームコンソールの VPC環境で Services > Storage > Object Storage > Bucket Managementメニューを順にクリックして確認することもできます。

    hadoop-vpc-use-ex9_2-3_ko

Hiveで Object Storageにアップロードされたデータをインポート

Hive External Tableを用いて Object Storageにアップロードしたデータをインポートする方法は、次の通りです。

  1. 以下のコマンドを実行し、Hiveが Object Storageにあるデータをインポートするように External Tableを作成します。

    • locationには、データがアップロードされたバケットの位置を入力します。
    CREATE external TABLE if not EXISTS `marketdata` (
            id STRUCT<oid:STRING, bsontype:INT>,
        Symbol STRING,
        `Timestamp` STRING,
        Day INT,
        Open DOUBLE,
        High DOUBLE,
        Low DOUBLE,
        Close DOUBLE,
        Volume INT)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    location 's3a://<データがアップロードされたバケット名>/';
    
  2. 以下のコマンドを実行し、External Tableとデータが連携されたのか確認します。

    SELECT * FROM marketdata LIMIT 10;
    
    参考

    .csvファイルを編集する必要がある場合、以下のコマンドを使用します。

    • 文字列フィールドの引用符を削除
    find .-name ファイル名.csv -exec perl -pi -e 's/"//g' {} \;
    
    • 1行目(カラム名)を削除
    sed -e 'id’ ファイル名.csv