Можно ли отправлять переменные hive conf через соединение hive odb c при попытке запроса? - PullRequest
1 голос
/ 27 апреля 2020

У меня есть скрипт улья, в верхней части которого есть несколько переменных conf улья. Этот запрос работает нормально, когда я запускаю его на нашем кластере emr, ожидаемые данные возвращаются. Например,

set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
set hive.exec.max.dynamic.partitions=10000;
set mapreduce.map.memory.mb=7168;
set mapreduce.reduce.memory.mb=7168;
set hive.exec.max.dynamic.partitions.pernode=10000;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set hive.execution.engine=mr;
select 
  fruits,
  count(1) as n
from table
group by fruits;

Я хотел бы выполнить этот запрос на другом сервере, который имеет соединение odb c с кустом.

(я в r)

hive_conn <- DBI::dbConnect(odbc(), dsn = "Hive")
results <- DBI::dbGetQuery(hive_conn,  "select fruits, count(1) as n from table group by fruits")

Это работает нормально и возвращает фрейм данных, как и ожидалось.

Однако, если я хочу установить некоторые конфигурации кустов, я не знаю, как отправить их с odb c.

Как я могу сказать hive через odb c, чтобы выполнить мой запрос с выбранными настройками hive conf?

set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partition=true;
set hive.exec.max.dynamic.partitions=10000;
set mapreduce.map.memory.mb=7168;
set mapreduce.reduce.memory.mb=7168;
set hive.exec.max.dynamic.partitions.pernode=10000;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set hive.execution.engine=mr;

1 Ответ

0 голосов
/ 28 апреля 2020

Я нашел решение этой проблемы в документации для драйвера: https://www.simba.com/products/Hive/doc/ODBC_InstallGuide/linux/content/odbc/hi/configuring/serverside.htm

Мне нужно было добавить эти «свойства на стороне сервера» при создании соединения. Вы добавляете строку SSP_ (свойство на стороне сервера), а затем добавляете их в виде пар имя-значение, например:

hive_conn <- dbConnect(odbc(), 
                       dsn = "Hive", 
                       SSP_hive.execution.engine = "mr",
                       SSP_hive.exec.dynamic.partition.mode = "nonstrict",
                       SSP_hive.exec.dynamic.partition = "true",
                       SSP_hive.exec.max.dynamic.partitions = 10000,
                       SSP_mapreduce.map.memory.mb = 7168,
                       SSP_mapreduce.reduce.memory.mb = 7168,
                       SSP_hive.exec.max.dynamic.partitions.pernode = 10000,
                       SSP_hive.exec.compress.output = "true",
                       SSP_mapred.output.compression.codec = "org.apache.hadoop.io.compress.SnappyCodec"
                       )
...