Невозможно скомпилировать код HBase Mapreduce для сохранения вывода в HBase - PullRequest
0 голосов
/ 12 марта 2020

Мой код пытается взять костюм и ранг из входного файла и сохранить карты колоды, которые отсутствуют в HBase. Код работает правильно, если вход и выход являются текстовыми файлами, и правильно сохраняет его в HDFS.

Я следовал учебному пособию для HBase и добавил код, чтобы взять вывод и сохранить его в HBase вместо вывода файл. Как только я добавляю импорт для HBase TableMapper, TableReducer и TableMapReduceUtil, я получаю следующие ошибки:

ubuntu@ip-172-31-42-214:~/server/hadoop-2.10.0/repo/hw3$ javac cards.java  -cp $(hbase classpath):$(hadoop classpath)cards.java:21: error: cannot find symbol
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
                                        ^
  symbol:   class TableMapReduceUtil
  location: package org.apache.hadoop.hbase.mapreduce
cards.java:22: error: cannot find symbol
import org.apache.hadoop.hbase.mapreduce.TableMapper;
                                        ^
  symbol:   class TableMapper
  location: package org.apache.hadoop.hbase.mapreduce
cards.java:23: error: cannot find symbol
import org.apache.hadoop.hbase.mapreduce.TableReducer;
                                        ^
  symbol:   class TableReducer
  location: package org.apache.hadoop.hbase.mapreduce
cards.java:82: error: cannot find symbol
        public static class reduce extends TableReducer<Text, IntWritable, Text, IntWritable> {
                                           ^
  symbol:   class TableReducer
  location: class cards
cards.java:89: error: cannot find symbol
                public void reduce(Text key, Iterable<IntWritable> value, Context context)
                                                                          ^
  symbol:   class Context
  location: class reduce
cards.java:39: error: cannot find symbol
                Configuration conf = HbaseConfiguration.create();
                                     ^
  symbol:   variable HbaseConfiguration
  location: class cards
cards.java:41: error: cannot find symbol
                Admin admin = conn.getAdmin();
                ^
  symbol:   class Admin
  location: class cards
cards.java:42: error: cannot find symbol
                HTableDescriptor htdesc = new HTableDescriptor(TableName.valueOf("MissingCards"));
                ^
  symbol:   class HTableDescriptor
  location: class cards
cards.java:42: error: cannot find symbol
                HTableDescriptor htdesc = new HTableDescriptor(TableName.valueOf("MissingCards"));
                                              ^
  symbol:   class HTableDescriptor
  location: class cards
cards.java:42: error: cannot find symbol
                HTableDescriptor htdesc = new HTableDescriptor(TableName.valueOf("MissingCards"));
                                                               ^
  symbol:   variable TableName
  location: class cards
cards.java:43: error: cannot find symbol
                HColumnDescriptor hcdesc = new HColumnDescriptor(Bytes.toBytes("cf"));
                ^
  symbol:   class HColumnDescriptor
  location: class cards
cards.java:43: error: cannot find symbol
                HColumnDescriptor hcdesc = new HColumnDescriptor(Bytes.toBytes("cf"));
                                               ^
  symbol:   class HColumnDescriptor
  location: class cards
cards.java:54: error: cannot find symbol
                TableMapReduceUtil.initTableReducerJob("cards", reduce.class, job);
                ^
  symbol:   variable TableMapReduceUtil
  location: class cards
cards.java:121: error: cannot find symbol
                        put.addColumn(CF, SUIT, Bytes.toBytes(key.toString()));
                                          ^
  symbol:   variable SUIT
  location: class reduce
14 errors

Я не уверен, что в моих классовых путях Had oop и HBase чего-то не хватает, но насколько я вижу, он включает в себя все необходимые jar-файлы:

ubuntu@ip-172-31-42-214:~/server/hadoop-2.10.0/repo/hw3$ hbase classpath
/usr/local/Hbase/conf:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/tools.jar:/usr/local/Hbase:/usr/local/Hbase/lib/shaded-clients/hbase-shaded-client-byo-hadoop-2.2.3.jar:/usr/local/Hbase/lib/client-facing-thirdparty/audience-annotations-0.5.0.jar:/usr/local/Hbase/lib/client-facing-thirdparty/commons-logging-1.2.jar:/usr/local/Hbase/lib/client-facing-thirdparty/findbugs-annotations-1.3.9-1.jar:/usr/local/Hbase/lib/client-facing-thirdparty/htrace-core4-4.2.0-incubating.jar:/usr/local/Hbase/lib/client-facing-thirdparty/log4j-1.2.17.jar:/usr/local/Hbase/lib/client-facing-thirdparty/slf4j-api-1.7.25.jar:/home/ubuntu/server/hadoop-2.10.0/etc/hadoop:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/common/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/common/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/hdfs:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/hdfs/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/hdfs/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/yarn:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/yarn/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/yarn/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/mapreduce/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/mapreduce/*
ubuntu@ip-172-31-42-214:~/server/hadoop-2.10.0/repo/hw3$ hadoop classpath
/home/ubuntu/server/hadoop-2.10.0/etc/hadoop:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/common/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/common/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/hdfs:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/hdfs/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/hdfs/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/yarn:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/yarn/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/yarn/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/mapreduce/lib/*:/home/ubuntu/server/hadoop-2.10.0/share/hadoop/mapreduce/*

Есть ли дополнительные jar-файлы, которые отсутствуют в моих classpath-файлах или изменился путь импорта в более новых версиях HBase, который не был указан в учебник я следовал? Я не смог понять это.

Я могу предоставить любую дополнительную информацию по мере необходимости. Заранее спасибо.

...