2016-04-27 16 views
0

私はHBase(バージョン1.1.X)にローカルに保存されたいくつかのXMLファイルを入れようとしています。XMLをHBaseに入れる適切な方法

私の目標は、MapReduce(リダクションステージなし、)を使用して、HBaseテーブルにこれらのXMLのコンテンツを文字列として保存し、HDFSにロードしないことです。ここで

は私の擬似コードです:

fetchXMLs(path); 
XML2OneLineFile(); 
configureHBase(); // + establishing connection 
Map(input, output); //input: one XML file in one line; output : is the Put() of HBase; 
closeConnection(); 

は正しい問題に取り組むこの方法です、またはそれを行うためのより良い方法はありますか?

ps:XMLからデータを解析したり抽出したりする必要はありません。保存するだけです。事前に

おかげ

答えて

1

HBaseのは本当にを格納ラージオブジェクトのために作られていません。あなたのxmlのサイズにもよりますが、HBaseはあなたが探している解決策ではないかもしれません。

現在、私はxmlを含む複数のファイルタイプからなるデータベースに取り組んでいます。私が気に入ったのは、1Mo以下のファイルをHBaseに保存し、残りをHadoopに保存し、メタデータをSQLまたはHBaseに保存することでした。

これは、このデータで達成したいことの多くに依存します。

+0

実際、私のXMLはそれほど大きくはありません。言い換えれば、短期間にたくさんの小さなサイズのXML(約90.000ファイルから80KB〜500KBまで)を格納する必要があります。 – mttb12

+1

Hbaseは問題ありません。これらのファイルの内容をスキャンする必要がない場合は、コンテンツを列属性にダンプするだけです。ただし、スキャンが遅くなります(各ファイルのすべての内容をスキャンする必要があります)。どのようにデータにアクセスする必要がありますか? – Whitefret

+0

データは、Hbaseテーブルの特定の(まれにすべての)レコードへのターゲット取得によってアクセスされます。だから、まだHDFSにファイルを読み込まないというアイデアは正しいですか? – mttb12

2

XMLストリングをHbaseに格納するのではなく、byte [] として格納し、デシリアライズを使用してそのオブジェクトを(直列化タイプの)オブジェクトとして戻すことができます。

Apache commons APIを使用すると、以下のようにすることができます。

EXの場合

:デシリアライズのための

byte[] xmlInBytes = org.apache.commons.lang.SerializationUtils.serialize(Serializable obj) 

、あなたはオブジェクトがw3c文書なる可能性がある場合、オブジェクトは、W3C文書に型変換する必要があります。この

static Object deserialize(byte[] objectData) 

を行うことができます。

私は既にXMLだけでなく多くの種類のオブジェクトでテストしました。 同じように動作するはずです。お役に立てれば。

関連する問題