Spark SQLとImpalaを使用して寄木細工のファイルを読み込むことができますが、Hiveを使用しても同じことができるかどうか疑問に思っています。多くの記事を読んでいますが、まだ混乱しています。
簡単に言えば、寄木細工のファイルがあります-users.parquetと言います。ここで、users.parquetからHive(明らかにテーブル)にデータをロード/挿入/インポートする方法について説明します。
明らかな何かを見逃している場合は、アドバイスまたは正しい方向を教えてください。
寄木細工のファイルメタデータを使用したHiveテーブルの作成
https://phdata.io/examples-using-textfile-and-parquet-with-Hive-and-impala/
詳細については、寄木細工ツールを使用して寄木細工ファイルのスキーマを取得してください http://kitesdk.org/docs/0.17.1/labs/4-using-parquet-tools-solution.html
詳細については、ファイルの上部にあるスキーマを使用してテーブルを構築します 、Hiveテーブルを作成してparquet/avroスキーマから寄木細工のファイルを読み取ります
最初にHiveで適切なスキーマを使用してテーブルを作成し、次に寄木細工のファイルを指すようにする必要があるため、スキーマを取得することが重要です。
同様の問題がありました。1つのVMにデータがあり、別のデータに移動する必要がありました。
元のParquetファイルについては(場所とスキーマ)をご覧ください:describe formatted users;
およびshow create table users;
後者はすぐにスキーマを取得し、HDFS hdfs://hostname:port/apps/Hive/warehouse/users
の場所も示します。
テーブルのパーティション分割について調べるshow partitions users;
テーブルのParquetファイルをHDFSからローカルディレクトリにコピーします
hdfs dfs -copyToLocal /apps/Hive/warehouse/users
それらを他のクラスター/ VMに移動するか、移動先に移動します
同じスキーマを使用して、宛先CREATE USERS ...
にユーザーテーブルを作成します。
CREATE TABLE users ( name string, ... )
PARTITIONED BY (...)
STORED AS PARQUET;
次に、それぞれのフォルダ内のParquetファイルを移動します(必要に応じて、作成したテーブルの場所を確認します)
hdfs dfs -ls /apps/Hive/warehouse/users/
hdfs dfs -copyFromLocal ../temp/* /apps/Hive/warehouse/
パーティションごとに、Hiveがそれぞれのサブディレクトリを指すようにする必要があります:alter table users add partition (sign_up_date='19991231') location '/apps/Hive/warehouse/users/sign_up_date=19991231';
(bashスクリプトでこれを行うことができます)
それは私のために働いた、それが役立つことを願っています。
それが少し「ハック」かどうかはわかりませんが、私はzeppelin(ambariに同梱)を使用します。 spark2と組み合わせて次のことを簡単に行うことができます。
%spark2
import org.Apache.spark.sql.SaveMode
var df = spark.read.parquet("hdfs:///my_parquet_files/*.parquet");
df.write.mode(SaveMode.Overwrite).saveAsTable("imported_table")
この方法の利点は、スキーマが異なる場合でも、多くの寄木細工のファイルをインポートできることです。
これを試すことができます...エクスポート/インポートは、Hiveの寄木細工を含むすべての種類のファイル形式で機能します。これは一般的な概念であり、ローカル(または)クラスタ全体の負荷などの要件に基づいて少し調整できます。
注:個々のステップを実行するときに、$の代わりにハードコーディングできます。また、スクリプトから実行するときに、パラメーターとして「HDFSパス」、「スキーマ」、および「テーブル名」を渡します。パラメータを渡すだけで、無制限のテーブルをエクスポート/インポートできます
ありがとう
クマール