web-dev-qa-db-ja.com

ParquetファイルをHiveに直接読み込むことはできますか?

Spark SQLとImpalaを使用して寄木細工のファイルを読み込むことができますが、Hiveを使用しても同じことができるかどうか疑問に思っています。多くの記事を読んでいますが、まだ混乱しています。

簡単に言えば、寄木細工のファイルがあります-users.parquetと言います。ここで、users.parquetからHive(明らかにテーブル)にデータをロード/挿入/インポートする方法について説明します。

明らかな何かを見逃している場合は、アドバイスまたは正しい方向を教えてください。

寄木細工のファイルメタデータを使用したHiveテーブルの作成

https://phdata.io/examples-using-textfile-and-parquet-with-Hive-and-impala/

16
annunarcist

詳細については、寄木細工ツールを使用して寄木細工ファイルのスキーマを取得してください http://kitesdk.org/docs/0.17.1/labs/4-using-parquet-tools-solution.html

詳細については、ファイルの上部にあるスキーマを使用してテーブルを構築します 、Hiveテーブルを作成してparquet/avroスキーマから寄木細工のファイルを読み取ります

10
Ram Manohar

最初にHiveで適切なスキーマを使用してテーブルを作成し、次に寄木細工のファイルを指すようにする必要があるため、スキーマを取得することが重要です。

同様の問題がありました。1つのVMにデータがあり、別のデータに移動する必要がありました。

  1. 元のParquetファイルについては(場所とスキーマ)をご覧ください:describe formatted users;およびshow create table users;後者はすぐにスキーマを取得し、HDFS hdfs://hostname:port/apps/Hive/warehouse/usersの場所も示します。

  2. テーブルのパーティション分割について調べるshow partitions users;

  3. テーブルのParquetファイルをHDFSからローカルディレクトリにコピーします

    hdfs dfs -copyToLocal /apps/Hive/warehouse/users
    
  4. それらを他のクラスター/ VMに移動するか、移動先に移動します

  5. 同じスキーマを使用して、宛先CREATE USERS ...にユーザーテーブルを作成します。

    CREATE TABLE users ( name string, ... )
    PARTITIONED BY (...)
    STORED AS PARQUET;
    
  6. 次に、それぞれのフォルダ内のParquetファイルを移動します(必要に応じて、作成したテーブルの場所を確認します)

    hdfs dfs -ls /apps/Hive/warehouse/users/
    hdfs dfs -copyFromLocal ../temp/* /apps/Hive/warehouse/
    
  7. パーティションごとに、Hiveがそれぞれのサブディレクトリを指すようにする必要があります:alter table users add partition (sign_up_date='19991231') location '/apps/Hive/warehouse/users/sign_up_date=19991231';(bashスクリプトでこれを行うことができます)

それは私のために働いた、それが役立つことを願っています。

7
Hendrik F

それが少し「ハック」かどうかはわかりませんが、私は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")

この方法の利点は、スキーマが異なる場合でも、多くの寄木細工のファイルをインポートできることです。

3
Fabian

これを試すことができます...エクスポート/インポートは、Hiveの寄木細工を含むすべての種類のファイル形式で機能します。これは一般的な概念であり、ローカル(または)クラスタ全体の負荷などの要件に基づいて少し調整できます。

注:個々のステップを実行するときに、$の代わりにハードコーディングできます。また、スクリプトから実行するときに、パラメーターとして「HDFSパス」、「スキーマ」、および「テーブル名」を渡します。パラメータを渡すだけで、無制限のテーブルをエクスポート/インポートできます

  • Step1: Hive -S -e "テーブル$ schema_file1。$ tbl_file1を '$ HDFS_DATA_PATH/$ tbl_file1'にエクスポート;" #-HDFSから実行します。
  • Step2:#-データとメタデータの両方が含まれます。それを圧縮し、ターゲットクラスターにscpします
  • Step3: Hive -S -e "'$ HDFS_DATA_PATH/$ tbl_file1'からテーブル$ schema_file1。$ tbl_file1をインポートします;" #-最初のインポートでは、テーブルが存在しないためエラーが発生しますが、自動的にテーブルを作成します
  • Step4: Hive -S -e "'$ HDFS_DATA_PATH/$ tbl_file1'からテーブル$ schema_file1。$ tbl_file1をインポートします;" #-2番目のインポートは、現在利用可能なテーブルとしてエラーなしでデータをインポートします

ありがとう

クマール

0
saranvisa