2017-07-21 7 views
1

Hbaseに各電話番号のデータを保存しようとしています。 特定の国の番号のほとんどがホットスポットにつながる同じ国コードで始まるので、私が使用する行キーは逆順(PhoneNumber)です。 このデータをmysqlからHbaseに移動します。HBase行キースプリットアルゴリズム

私は100万の電話番号の無作為標本を取り出し、Hbaseの2つの定義済みStringアルゴリズムであるUniformSplitとHexStringSplitを200分割しました。

UniformSplitでは、8つの領域しかデータを取得しません。 HexStringSplit 81リージョンではデータが取得されます。

他のスプリットアルゴリズムを使用できますか他の戦略がありますか?

答えて

0

おそらく、このアルゴリズムの1つを使用する場合、別の行キーデザインを使用する必要があります。私はこのためのスキーマを提案することができます。 MD5または電話番号の一部類似ハッシュを使用して塩として最初のいくつかの数字を使用し、この場合には、行キーは、この場合

salt+phoneNumber 

なり、あなたのいずれかを適用することができるため、より均一な分布を有することになりますデフォルトのスプリットアルゴリズム。

0

私は一般的に@ alexander-kuznetsovに同意しますが、md5またはハッシュを使用しても問題は解決しません。

私は、次のような設計を示唆している:私は電話番号はロングまたはINTであることを前提としてい

ここ
rowKey = (phoneNumber % number_of_regions) + phoneNumber 

を。これにより、領域の数に応じて行キーが分配されます。 また、私は通常、分割前のテーブルHBase Amin APIから次のような方法でデータを挿入するために開始する前に:

void createTable(TableDescriptor desc, 
      byte[] startKey, 
      byte[] endKey, 
      int numRegions) 
     throws IOException 

そして、私は通常、あまりにもスプリットポリシーを指定:

tableDescriptor.setRegionSplitPolicyClassName(ConstantSizeRegionSplitPolicy.class.getName()) 
関連する問題