Soru Hadoop / Hive: Yerel bir makinede .csv'den veri yükleniyor


Bu bir yeni gelen geliyor ...

Hadoop ve Hive benim için kurulmuştu, bu yüzden bilgisayarımda AWS kümesindeki verilere erişen Hive sorgularını çalıştırabilirim. MS SQL Server'da yaptığım gibi, bilgisayarımda depolanmış .csv verileriyle Hive sorguları çalıştırabilir miyim?

O zaman .csv verilerini Hive'ye nasıl yüklerim? Hadoop ile ne ilgisi var ve bunu hangi modda çalıştırmalıyım?

Hangi ayarları önemsemeliydim ki, eğer yanlış bir şey yapsaydım, herzaman geri dönüp, daha önce benim için neyin yol açtığı konusunda taviz vermeden Amazon'da sorgulamalar yapabilirim.


25
2017-10-11 14:24


Menşei




Cevaplar:


Aşağıdaki basit adımlarla çalışmama izin verin:

Adımlar:

Öncelikle, csv dosyanızdaki alan adlarını kullanarak kovanda bir tablo oluşturun. Örneğin, csv dosyanızın üç alan (id, isim, maaş) içerdiğini ve "personel" adı verilen kovanda bir tablo oluşturmak istediğinizi varsayalım. Kovandaki tabloyu oluşturmak için aşağıdaki kodu kullanın.

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

İkincisi, tablonuz kovanda oluşturulduğunda, csv dosyanızdaki verileri kovandaki "personel" tablosuna yükleyelim.

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

Son olarak, verilerin başarılı bir şekilde yüklenip yüklenmediğini kontrol etmek için "Personel" tablonuzun içeriğini kovanda görüntüleyin.

hive> SELECT * FROM Staff;

Teşekkürler.


29
2017-09-26 08:21



Burada çift tırnak olmalı terminated by ","; - deepdive
Bunun herhangi bir nedeni kabul edilen cevap olarak işaretlenmemiştir? - pugmarx
Tablo oluşturma sırasında sınırlayıcı ayarlamak sezgisel değildir. Belirli bir dosyadan veri yükleme sırasında sınırlayıcı ayarlayabilmeyi beklerim. Yeni veri dosyasında farklı sınırlayıcı varsa ne olur? - Manish Munikar


Bir kovan kurulumunuz varsa, yerel veri setini hdfs / s3'te doğrudan Hive yükleme komutunu kullanarak koyabilirsiniz.

Yükleme komutunu yazarken "Yerel" anahtar kelimesini kullanmanız gerekecektir.

Hiveload komutu için sözdizimi

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

Daha detaylı bilgi için aşağıdaki linke bakınız. https://cwiki.apache.org/confluence/display/Hive/LanguageManual%20DML#LanguageManualDML-Loadingfilesintotables 


13
2017-10-11 15:28





Bunu etkinleştirmenin başka bir yolu var.

  1. .csv veri dosyasını yerel bilgisayarınızdan HDFS'ye kopyalamak için hadoop hdfs -copyFromLocal kullanın, '/ path / filename' deyin

  2. Hive konsolu girin, bir Hive tablosu yapmak için dosyadan yüklemek için aşağıdaki komut dosyasını çalıştırın. '\ 054', alan ayırıcıyı temsil eden sekizli sayıdaki 'virgül' ascii kodudur.


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';

6
2017-10-14 00:43



Alan sınırlayıcının sekizli olarak ifade edilmesi gerekiyor mu? Neden sadece ',' kullanmıyorsunuz? - John Prior
John, evet, sekizlik 054 sadece ascii ',' ve Hive destek kullanımı ',' dir - Lex Lian


Bunu deneyebilirsin Aşağıda dosyaların nasıl oluşturulduğuna dair birkaç örnek verilmiştir. Aracı - https://sourceforge.net/projects/csvtohive/?source=directory

  1. Gözat kullanarak bir CSV dosyası seçin ve şu kök dizinini ayarlayın: / user / bigdataproject /

  2. Aracı tüm csv dosyaları ile Hadoop komut dosyası oluşturur ve aşağıdaki örnekte Hadoop'a csv eklemek için Hadoop komut dosyası oluşturuldu

    #!/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 kovan -f ./Appearances.hive

    hadoop fs -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv kovan -f ./AwardsManagers.hive


4
2017-07-13 14:45





Csv dosyası formatındaki veriler aşağıdaki formatta olacaktır.

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

Ve eğer ',' ile sonlanan alanı kullanırsak, o zaman her sütun aşağıdaki gibi değerler alacaktır.

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

ayrıca sütun değerinden herhangi biri varsa comma Değer olarak o zaman işe yaramaz.

Yani bir tablo oluşturmak için doğru yolu OpenCSVSerde kullanarak olabilir

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

1
2017-12-09 19:27



Bu, tablonuzun nasıl tanımlanmış olursa olsun, tüm sütunları Dizeler olarak kaydetmenin dezavantajına sahiptir. - Susensio