WedX - журнал о программировании и компьютерных науках

Драйвер Hive ql, как указать имя базы данных, отличное от значения по умолчанию

Я пишу пример программы для подключения к хранилищу метаданных Hive с использованием класса org.apache.hadoop.hive.ql.Driver. Пример фрагмента приведен ниже.

String userName = "test";
HiveConf conf = new HiveConf(SessionState.class);
  conf.set("fs.default.name", "hdfs://" + hadoopMasterHost + ":8020"); 
  conf.set("hive.metastore.local","false");
  conf.set("hive.metastore.warehouse.dir","/user/hive/warehouse"); 
  conf.set("hive.metastore.uris","thrift://" + hadoopMasterHost + ":9083"); 
  conf.set("hadoop.bin.path", "/usr/hdp/2.2.0.0-2041/hadoop/bin"); 
  conf.set("yarn.nodemanager.hostname", hadoopMasterHost);
  conf.set("yarn.resourcemanager.hostname", hadoopMasterHost);

  ss = new MyCliSessionState(conf);
  ss.out = new PrintStream(System.out, true, "UTF-8");
  ss.err = new PrintStream(System.err, true, "UTF-8");

  SessionState.start(ss);

  driver = new Driver(conf);
  query = "show tables";

if (userName == null || userName.isEmpty())
        return driver.run(query);

    UserGroupInformation ugi = createUgi(userName);
    CommandProcessorResponse response = ugi.doAs(new PrivilegedExceptionAction<CommandProcessorResponse>() {
        public CommandProcessorResponse run() throws Exception {
            CliSessionState ss = null;
            ss = new MyCliSessionState(conf);
            ss.out = new PrintStream(System.out, true, "UTF-8");
            ss.err = new PrintStream(System.err, true, "UTF-8");

            // refresh thread local SessionState and Hive
            SessionState.start(ss);
            Hive.get(conf, true);

            return driver.run(query);
        }
    });

    return response;

Я могу подключиться к базе данных по умолчанию и получить список всех таблиц. Но как я могу подключиться к другим базам данных (кроме по умолчанию)? Я попытался найти свойство конфигурации куста, но не смог найти ни одного, чтобы указать имя базы данных. Может кто-нибудь помочь мне, пожалуйста.

18.12.2015

Ответы:


1

Похоже, вы хотите пойти по сложному пути и заново внедрить утилиту Билайн. Большинству людей это покажется мазохистской попыткой, но кто я такой, чтобы судить об этом?

В любом случае, на этом этапе вы должны выполнять команды HQL, как и все остальные... и каждый должен знать о команде "use":

driver.run("use " +argDatabase) ;
// check status
driver.run("show tables") ;
// check status, parse output
driver.run("describe extended " +argTable) ;
// check status, parse output
18.12.2015
  • Я попытался запустить пример запроса. Ответ был успешным. Но запрос на отображение таблиц по-прежнему дает мне список таблиц базы данных по умолчанию. Есть ли что-то, что мне не хватает, например, какой-либо параметр конфигурации улья нужно изменить? 21.12.2015
  • Используете ли вы одну и ту же сессию для обеих команд, а не воссоздаете/переустанавливаете/обновляете что-либо между ними? 21.12.2015
  • Каждый запрос выполняется в своем сеансе. Должен ли я работать в одном сеансе? 22.12.2015
  • Я вызываю приведенный выше код в методе каждый раз для каждого запроса. 22.12.2015
  • Метафизический вопрос: как вы думаете, что означает сеанс? 22.12.2015
  • Спасибо @Samson, это сработало после выполнения обоих запросов в одном сеансе. 23.12.2015
  • Новые материалы

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


    Для любых предложений по сайту: [email protected]