Hiveテーブルとそれらが表す実際のHDFSファイル(またはディレクトリ)の間のマッピングを見つける方法を知りたいです。テーブルファイルに直接アクセスする必要があります。
HiveはファイルをHDFSのどこに保存しますか?
Hive テーブルは必ずしもウェアハウスに格納されるとは限りません (HDFS のどこにでもテーブルを作成できるため)。
コマンドを使用する必要がありますDESCRIBE FORMATTED <table_name>
。
hive -S -e "describe formatted <table_name> ;" | grep 'Location' | awk '{ print $NF }'
パーティションは別の場所に保存される可能性があることに注意してください。パーティションの場所を取得するには、 の後alpha=foo/beta=bar
に追加する必要があります。partition(alpha='foo',beta='bar')
<table_name>
それらが HDFS に保存されている場所は、どこを見ればよいかがわかれば、かなり簡単に特定できます。:)
http://NAMENODE_MACHINE_NAME:50070/
ブラウザで にアクセスすると、リンクのあるページに移動するはずですBrowse the filesystem
。
$HIVE_HOME/conf
ディレクトリには、プロパティを持つhive-default.xml
and/orがあります。その値は、リンクをクリックした後に移動する場所です。hive-site.xml
hive.metastore.warehouse.dir
Browse the filesystem
私の場合、それは/usr/hive/warehouse
. その場所に移動すると、テーブルの名前が表示されます。テーブル名 (単なるフォルダー) をクリックすると、テーブルのパーティションが表示されます。私の場合、現在は でのみパーティション化されていdate
ます。このレベルのフォルダーをクリックすると、ファイルが表示されます (パーティションが増えると、レベルが増えます)。これらのファイルは、データが実際に HDFS に保存される場所です。
これらのファイルに直接アクセスしようとしたことはありませんが、できると思います。あなたがそれらを編集することを考えているなら、私は細心の注意を払います. :)私にとっては、ディスク上のHiveデータに直接アクセスせずに、必要なことを行う方法を見つけたいと思います。生データにアクセスする必要がある場合は、Hive クエリを使用して結果をファイルに出力できます。これらは、.上のファイルとまったく同じ構造 (列間の仕切りなど) を持ちますHDFS
。私はいつもこのようなクエリを実行し、それらを CSV に変換しています。
クエリからディスクにデータを書き込む方法に関するセクションは、https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-Writingdataintothefilesystemfromqueriesです。
アップデート
Hadoop 3.0.0 - Alpha 1 以降、デフォルトのポート番号が変更されています。NAMENODE_MACHINE_NAME:50070 が NAMENODE_MACHINE_NAME:9870 に変わります。Hadoop 3.x で実行している場合は、後者を使用してください。ポート変更の完全なリストは、HDFS-9427に記載されています。
Hive ターミナル タイプ:
hive> set hive.metastore.warehouse.dir;
(パスが出力されます)
describe formatted <table_name>;
ハイブシェルの内部。
テーブルの場所を示す「場所」の値に注意してください。
Hive テーブルは、Hive ウェアハウス ディレクトリに格納されます。デフォルトでは、MapR は Hive ウェアハウス ディレクトリをルート ボリュームの下の/user/hive/warehouseに設定します。このデフォルトは、$HIVE_HOME/conf/hive-default.xml で定義されています。