Cześć, mam problem z utworzeniem tabeli w HIVE na podstawie plików powstałych w wyniku aplikacji Map Reduce.
Jestem kompletnym laikiem. Domyślam się, że mogłem coś schrzanić już właśnie w Map Reduce, dlatego od początku.
Konfiguracja:
job.setJarByClass(this.getClass());
job.setMapperClass(SomeMapper.class);
job.setMapOutputValueClass(Text.class);
job.setMapOutputValueClass(MyOwnClass.class);
job.setReducerClass(SomeReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(MyOwnObject.class);
job.setOutputFormatClass(SequenceFileOutputFormat.class);
A tak wygląda ten "MyOwnObject":
public class MyOwnObject implements WritableComparable<MyOwnObject>, Serializable {
private static final long serialVersionUID = ....
private IntWritable propertyA;
private IntWritable propertyB;
...
// - bezargumentowy konstruktor
// - settery, gettery
// - compareTo
// - toString (return propertyA<SEP>propertyB<SEP>...)
W HIVE tworzę tabelę:
CREATE TABLE DUMMY_TABELA ( PRIMARY_KEY TEXT, PROPERTY_A TEXT, PROPERTY B, TEXT ....) ROW FORMAT DELIMITED FIELDS TERMINATED BY '<SEP>' STORED AS SEQUENCEFILE;
W katalogu ktory podalem jako wyjsciowy dla aplikacji MapReduce dostaje kilka plikow - niech nazywają się plik1, plik2, etc... W jaki sposób z nich wszystkich utworzyć jedną tabelę w HIVE?
LOAD DATA INPATH 'pathToMyOutputDirectory/plik1' INTO TABLE DUMMY_TABELA
Kończy się
Error: Error while compiling statement: FAILED: SemanticException Unable to load data to destination table. Error: j
ava.lang.RuntimeException: java.io.IOException: WritableName can't load class: MyOwnObject (state=42000,code=40000
)
Gdzie coś schrzaniłem?