web-dev-qa-db-ja.com

Hadoop / Hive:ローカルマシン上の.csvからのデータのロード

これは初心者から来ているので...

HadoopとHiveがセットアップされているため、AWSクラスターのデータにアクセスするコンピューターでHiveクエリを実行できます。 MS SQL Serverで行ったように、コンピューターに保存された.csvデータを使用してHiveクエリを実行できますか?

その後、どのように.csvデータをHiveにロードしますか? Hadoopとどのような関係があり、どのモードを実行する必要がありますか?

何か間違ったことをした場合、以前に設定したものを損なうことなくいつでも戻ってAmazonでクエリを実行できるように、どのような設定に注意する必要がありますか?

33
mel

次の簡単な手順を実行してみましょう。

手順:

最初に、csvファイルのフィールド名を使用してHiveにテーブルを作成します。たとえば、csvファイルに3つのフィールド(id、name、salary)が含まれており、「staff」というテーブルをHiveに作成するとします。以下のコードを使用して、Hiveでテーブルを作成します。

Hive> CREATE TABLE Staff (id int, name string, salary double) row format delimited fields terminated by ',';

次に、テーブルがHiveで作成されたので、csvファイルのデータをHiveの「スタッフ」テーブルにロードしましょう。

Hive>  LOAD DATA LOCAL INPATH '/home/yourcsvfile.csv' OVERWRITE INTO TABLE Staff;

最後に、Hiveの「スタッフ」テーブルの内容を表示して、データが正常にロードされたかどうかを確認します

Hive> SELECT * FROM Staff;

ありがとう。

38
Adewole Kayode

hiveがセットアップされている場合は、hdfs/s3のHive loadコマンドを使用してローカルデータセットを直接配置できます。

ロードコマンドを記述するときは、「Local」キーワードを使用する必要があります。

Hiveloadコマンドの構文

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

詳細については、以下のリンクを参照してください。 https://cwiki.Apache.org/confluence/display/Hive/LanguageManual%20DML#LanguageManualDML-Loadingfilesintotables

15
hjamali52

これを可能にする別の方法があります。

  1. hadoop hdfs -copyFromLocalを使用して、.csvデータファイルをローカルコンピューターからHDFSのどこかにコピーします。たとえば、「/ path/filename」

  2. hiveコンソールに入り、次のスクリプトを実行してファイルからロードし、Hiveテーブルとして作成します。 「\ 054」は、フィールド区切り文字を表す8進数の「カンマ」のASCIIコードです。


CREATE EXTERNAL TABLE table name (foo INT, bar STRING)
 COMMENT 'from csv file'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '/path/filename';
10
Lex Lian

CSVファイルの場合、データは以下の形式になります

"column1", "column2","column3","column4"

そして、「、」で終了するフィールドを使用する場合、各列は以下のような値を取得します。

"column1"    "column2"     "column3"     "column4"

また、列値のいずれかに値としてcommaがある場合、まったく機能しません。

したがって、テーブルを作成する正しい方法は、OpenCSVSerdeを使用することです。

create table tableName (column1 datatype, column2 datatype , column3 datatype , column4 datatype)
ROW FORMAT SERDE 
'org.Apache.hadoop.Hive.serde2.OpenCSVSerde' 
STORED AS TEXTFILE ;
6
Arpan

これを試してみてください。ファイルの生成方法に関するいくつかの例を次に示します。ツール- https://sourceforge.net/projects/csvtohive/?source=directory

  1. 参照を使用してCSVファイルを選択し、hadoopルートディレクトリを設定します(例:/ user/bigdataproject /)

  2. ツールはすべてのcsvファイルを使用してHadoopスクリプトを生成し、csvをHadoopに挿入するために生成されたHadoopスクリプトのサンプルを次に示します

    #!/bin/bash -v
    hadoop fs -put ./AllstarFull.csv /user/bigdataproject/AllstarFull.csv Hive -f ./AllstarFull.Hive



    hadoop fs -put ./Appearances.csv /user/bigdataproject/Appearances.csv Hive -f ./Appearances.Hive



    hadoop fs -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv Hive -f ./AwardsManagers.Hive
  3. 生成されたHiveスクリプトのサンプル

    CREATE DATABASE IF NOT EXISTS lahman;
    USE lahman;
    CREATE TABLE AllstarFull (playerID string,yearID string,gameNum string,gameID string,teamID string,lgID string,GP string,startingPos string) row format delimited fields terminated by ',' stored as textfile;
    LOAD DATA INPATH '/user/bigdataproject/AllstarFull.csv' OVERWRITE INTO TABLE AllstarFull;
    SELECT * FROM AllstarFull;

ありがとうビジェイ

4
Vijay Kumar

次の場合にのみ、ローカルCSVファイルをHiveにロードできます。

  1. Hiveクラスターノードの1つから実行しています。
  2. 非クラスターノードにHiveクライアントをインストールし、Hiveまたはbeelineを使用してアップロードしました。
0
Alex B