2016-09-12 6 views
2

Java APIを使用してHBaseテーブルを切り捨てる予期しない動作が発生しています。具体的には、私は、次の操作をしています:HBase:Java APIによるテーブルの切り捨て

  1. はテーブル

これらの操作に対応したコードを有効に切り捨てテーブル

  • を表
  • を無効にし、次のされています

    Configuration conf = HBaseConfiguration.create(); 
    // ... 
    // Setting properly the configuration information 
    // ... 
    try (HBaseAdmin admin = new HBaseAdmin(conf)) { 
        if (admin.isTableEnabled(TABLE_NAME)) { 
         admin.disableTable(TABLE_NAME); 
        } 
        admin.truncateTable(TableName.valueOf(TABLE_NAME), false); 
        // Enabling the table after having truncated 
        admin.enableTable(TABLE_NAME); 
    } catch (MasterNotRunningException e) { 
        e.printStackTrace(); 
    } catch (ZooKeeperConnectionException e) { 
        e.printStackTrace(); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
    

    ここで、トランケート操作後のadmin.enableTable(TABLE_NAME)ステートメントは012をスローします。それが正しいか? Java APIを使用してテーブルを切り捨てると、自動的に再度有効になりますか?

    私はAPIをチェックしていますが、私はこの動作を参照していませんでした。

    HBaseバージョン1.0.0-cdh5.5.0を使用しています。

  • 答えて

    2

    HBaseの3つの操作を実行する必要性を切り捨てる:それは既に を提示する場合、それは既に提示(それが最初に無効にする必要がある第2の動作のテーブルをドロップとして)

  • テーブルをドロップ場合

    1. テーブルを無効にし
    2. 上記のテーブルを再作成します(任意の作成によって自動的にテーブルが有効になります)

    同じ動作はhbase-shell tr​​uncateコマンドで行います。シェルとjava apiの唯一の違いは、シェルが自動的にすべてを実行することですが、java apiでは、最初に2番目のドロップ操作を明示的に無効にして最後の操作で再度作成する必要があるため、デフォルトでは新しいテーブルが有効になります。

    希望するもの...

  • 関連する問題