テストクラスを作成し、いくつかのデータを挿入し、HBase のデータ量をテストしました。これは非常に単純な関数ですが、ここで問題が発生します。。Web ページでは読み取りおよび書き込みリクエストが表示されますが、メモリまたはディスクのデータはありません。
そこでHDFSに行って確認してみようと思ったのですが、データもありました。
では、データ量が少ないために表示されないということはあるのでしょうか?さらにいくつか追加してしばらく待ったところ、データ量が 6k に達しました。
HBaseのページに行ってみてはいかがでしょうか?キャッシュ内にデータがあることがわかります。。。
キャッシュにデータがあり、シェルでもクエリできるのに、メモリにデータがないのはなぜですか?
アイデア 1:
HDFS (Hadoop Distributed File System) には、ディスクへのデータの書き込みを開始するためのメモリのサイズを制御する重要なパラメータがあります。パラメータは hbase.hregion.memstore.flush.size であるため、ファイルが小さ すぎてしきい値をトリガーできません。これは、リージョン内の MemStore データが 128MB に達すると、フラッシュ操作がトリガーされて、MemStore データがディスク上の HFile ファイルに更新されることを意味します。
そこで、pomで修正してみることにしました。デフォルトは 64M ですが、それを 1M に変更し、いくつかの試行を 1 回追加しますか?
<properties>
<hbase.hregion.memstore.flush.size>128m</hbase.hregion.memstore.flush.size>
<!-- 其他的属性配置 -->
</properties>
アイデア 2:
メモリ上のデータをファイルに書き込みます。
hbase(main):006:0> flush 'rmc:rmc_test'
Took 3.8114 seconds
要約:
HBase にデータを挿入する場合、挿入されるデータごとに新しい put オブジェクトが必要となるため、リストを使用して put に入力する方がはるかに高速であり、1 つのセルが 1 put になります。