2016-10-04 10 views
0

MapReduceプログラミングでHDFSのデータ構造のようなテーブルにアクセスして保存します。このDSの一部を次の図に示します。このDSには数万の列と数百の行があり、すべてのノードにアクセスできる必要があります。hadoopのテーブルのようなデータ構造を保存してアクセスする

enter image description here

、私の質問は:私はHDFSとMapReduceのプログラミングにアクセスをして、このDSを保存するにはどうすればよいです。配列を使うべきですか? (またはHiveテーブルまたはHbase?)

ありがとう。

答えて

1

HDFSは、分散ファイルに大きなファイルを格納する分散ファイルシステムです。外部ハイブテーブルが上に形成することができる完成

あなたがHDFSにローカルシステムからファイルをコピーすることができますコマンドを使用して

のHadoop FS -copyFromLocal /ソース/ローカル/パスdestincation/HDFS /パス

がコピーワンスdestincation/hdfs/pathを指定します。

このテーブルは、ハイブシェルを使用して照会できます。

1

このシナリオではハイブを検討してください。 SASデータセットまたはR dataframe/dataTableまたはpython pandasのようなテーブルタイプの処理を実行する場合は、ほとんどの場合、同等のことがSQLで可能です。 Hiveは、MapReduceおよびTezエンジンによる強力なSQL抽象化を提供します。あなたがいつかSparkに卒業したいのであれば、データフレームのHiveテーブルを読むことができます。 @sumitは、(HDFS copyFromLocalまたはputコマンドを使用して)ローカルからHDFSにデータを転送し、その上に外部Hiveテーブルを定義する必要があることを指摘しました。

このデータにカスタムのmap-reduceを書きたい場合は、背景ハイブテーブルのデータにアクセスしてください(おそらく/user/hive/warehouse)。 stdinからデータを読み込んだら、マッパーで区切って(セパレータはdescribe extended <hive_table>を使って見つけることができます)、キーと値のペア形式で出力します。

+0

私が言及したように、(これらのデータを必要とする処理のために)一部のノードだけでなく、すべてのノードでこれらのデータにアクセスする必要があります。 copyFromLocalコマンドを使用すると、別のノードおよびすべてのノードに格納されている各データにローカルアクセスがありません。 – fidelroha

+1

各ノードの各データを(各データ部分の3つまたは4つのコピーに対して)持たなければならない場合は、hadoopの各ノードにソフトウェアをインストールするdevops配置のような 'chef'のようになります。それには特別な配慮が必要です。特別なケースが何であるかを知ることは本当に興味があります。 – abhiieor

+0

私がこれらについて述べたこれらのデータはプライマリデータではありません。これらのデータは二次データであり、元のデータに対して実行される主な処理に役立ちます。私は、[分散キャッシュ](https://www.linkedin.com/pulse/distributed-cache-hadoop-examples-gaurav-singh)を使うべきだと思いますが、データのサイズは数KBまたはMBよりはるかに大きいです。 – fidelroha

関連する問題