Big Data, Hadoop & Tworzenie Tabeli w Hive

W poprzednim poście umieściłem info jak załadować dane do hdfs, Teraz by je przeanalizować za pomocą SQL potrzebujemy stworzyć odpowiednią Tabelę w HIVE.

By nie było zbyt pięknie najpierw musimy pobrać Jar’a który pozwoli nam obsłużyć format danych w naszych plikach( z danymi z Twittera).

http://files.cloudera.com/samples/hive-serdes-1.0-SNAPSHOT.jar

 

Jeśli mamy już Jara w jakimś przystępnym miejscu to możemy zalogować się do konsoli Hive. W sandboxie do którego się logowaliśmy przez http, mamy też GUI do obsługi hive, jednakże zalecam skorzystanie z  shella ze względu na lepszą czytelność komunikatów błędów

[root@sandbox conf]# hive

Powinno się pokazać coś takiego:

Logging initialized using configuration in jar:file:/usr/lib/hive/lib/hive-common-0.12.0.2.0.6.0-76.jar!/hive-log4j.properties

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/usr/lib/hadoop/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/usr/lib/hive/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

hive>

najpierw dodajemy Jara do Hive:

hive> ADD JAR /usr/local/jakubjars/hive-serdes-1.0-SNAPSHOT.jar;

Wydaje się że trzeba go dodawać po każdym logowaniu co jest upierdliwe, ale jeszcze nie znalazłem miejsca gdzie można by zapisać to na trwałe.

Teraz tworzymy tabele:

CREATE EXTERNAL TABLE tweets (
id BIGINT,
created_at STRING,
source STRING,
favorited BOOLEAN,
retweet_count INT,
retweeted_status STRUCT<
text:STRING,
user:STRUCT<screen_name:STRING,name:STRING>>,
entities STRUCT<
urls:ARRAY<STRUCT<expanded_url:STRING>>,
user_mentions:ARRAY<STRUCT<screen_name:STRING,name:STRING>>,
hashtags:ARRAY<STRUCT<text:STRING>>>,
text STRING,
user STRUCT<
screen_name:STRING,
name:STRING,
friends_count:INT,
followers_count:INT,
statuses_count:INT,
verified:BOOLEAN,
utc_offset:INT,
time_zone:STRING>,
in_reply_to_screen_name STRING)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/dzejkop/flume/tweets';

 

 

To na co warto zwrócić uwagę to fakt iż zagnieżdżone dane zostały zapisane w postaci struktur. Daje to ciekawe możliwości. Według dokumentacji tabela może zawierać dodatkowe nieuwzględnione tutaj pola pod warunkiem że będą one miały nazwę i typ zgodny z danymi JSON od Twittera.

Teraz możemy wykonać przykładowe zapytanie SQL w Hive:

hive> select user.screen_name, user.followers_count c from tweets order by c desc;

powinno nam pokazać nazwy użytkowników I informacje o tym ile posiadają followersów. Zapytanei to nie posiada grupowania więc nazwy userów powinny wystąpić tyle razy ile Tweetów wpadło w nasze sidła. Po wykonaniu zapytania pojawią się różne napisy, zostanie stworzony odpowiedni job, który obrobi dane. Finałow finałów powinniśmy zobaczyć wyniki:

sabou35876529   139
sabou35876529   139
sabou35876529   139
sabou35876529   139
sabou35876529   139
sabou35876529   139
sabou35876529   139
Mister_Ka       137
Mister_Ka       137
Mister_Ka       137
Mister_Ka       137

Korzystając z sandboxa, możemy też wykonywać zapytania, jednakże każdorazowo do każdego zapytania musimy wskazać Jara.

Leave a Reply

Your email address will not be published. Required fields are marked *

eighteen + 11 =