Соедините R и Impala

Я, конечно, знаю о воспроизводимом примере и фрагменте кода, но для этого вопроса я должен быть (я не могу быть иначе) неясным.

Я пытаюсь соединить R и Impala. Оставим в стороне проблемы («официально» я не могу установить программное обеспечение на этот компьютер... но я использовал портативные версии R и RStudio)

Я попробовал пакет RImpala.

rimpala.connect(IP = myip,
              port = the port where Impala sees,
              principal = maybe this is not clear)

Я почти уверен, что причиной моих проблем является аргумент principal, документация мне непонятна. Во всяком случае, я пробовал несколько комбинаций того, что в документации говорится, что это должно быть там.

В любом случае я получаю ту же ошибку:

Ошибка в .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl,: java.lang.IllegalArgumentException: принципал Kerberos должен состоять из 3 частей: 10.60.10.22:8888/impala/@tempuser

Я искал в Интернете эту ошибку, и, похоже, она связана с некоторыми вещами Java, но у меня нет знаний об этом языке.

Может быть полезно знать, что у меня нет доступа к своему ПК, скажем, я не могу установить какое-либо программное обеспечение или сделать то, что может сделать только администратор.

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

Подробнее

Теперь, когда я думаю об этом, я заполнил аргумент IP адресом, который я видел в панели навигации моего браузера для подключения к Hue. Я догадался, что это то же самое, но, возможно, я тоже ошибся в этом вопросе, поскольку я сказал, что почти уверен, что ошибка не из-за этого.


person SabDeM    schedule 05.11.2015    source источник
comment
Насколько мне известно, Hue обходит аутентификацию пользователя Kerberos, т. е. вы проходите аутентификацию в Hue, используя логин/пароль Hue, затем Hue проходит аутентификацию в Impala, используя собственный ключ/keytab Kerberos. Таким образом, вы не знаете, какую строку подключения использовать для прямого доступа к Impala, вы не знаете, какой логин использовать против Impala, и вы не знаете, какой механизм аутентификации использовать (пароль? Билет Kerberos?)   -  person Samson Scharfrichter    schedule 06.11.2015
comment
Кстати, документы RImpala совершенно ясны: IP и порт должны каким-то образом указывать на сервис Impala. А принципал относится к принципалу Kerberos службы Impala — требуется, если весь кластер Hadoop использует kerberos (тогда у вас должен быть клиент Kerberos на вашем ПК, а также пользователь/пароль), в противном случае игнорируется   -  person Samson Scharfrichter    schedule 06.11.2015
comment
@SamsonScharfrichter спасибо за ваш комментарий. В качестве IP и порта я использовал тот, который увидел в браузере при подключении к Hue, скажем, 10.10.10.20:8888, где первая часть — IP, а 8888 — порт. Я до сих пор понятия не имею, правильно ли это и нужно ли (и как) заполнить аргумент principal.   -  person SabDeM    schedule 07.11.2015
comment
В документации Cloudera для Hue, в разделе Интерфейс запросов Impala, говорится... вы можете просмотреть текущую конфигурацию на вкладке Настройки. Вы должны взглянуть на эту вкладку.   -  person Samson Scharfrichter    schedule 08.11.2015
comment
Если ваша Impala была установлена ​​со значениями по умолчанию, порт Impala — 21050. Однако вам необходимо выяснить IP-адрес, на котором была установлена ​​Impala.   -  person USchneider    schedule 02.12.2015


Ответы (5)


Вместо использования пакета RImpala, как насчет использования RJDBC для подключения. Вы можете загрузить последнюю версию JAR-файла драйвера Impala JDBC с веб-сайта Cloudera: http://www.cloudera.com/downloads/connectors/impala/jdbc/2-5-5.html

затем импортируйте эти файлы в банку в R и используйте их для подключения.

install.packages("rJava")

install.packages("DBI")

install.packages("RJDBC")

library(DBI)

library(rJava)

library(RJDBC)

cp <- c(        
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/commons-codec-1.3.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/commons-logging-1.1.1.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/hive_metastore.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/hive_service.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/httpclient-4.1.3.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/httpcore-4.1.3.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/libfb303-0.9.0.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/libthrift-0.9.0.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/log4j-1.2.14.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/ql.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/slf4j-api-1.5.11.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/slf4j-log4j12-1.5.11.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/TCLIServiceClient.jar",
           "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/zookeeper-3.4.6.jar"
)

.jinit(classpath<-cp)

drv <- JDBC("com.cloudera.impala.jdbc4.Driver", "C:/Users/Cloudera_ImpalaJDBC4_2.5.31/ImpalaJDBC4.jar")

con <- dbConnect(drv, "jdbc:impala://your_impala_host_address:21050;AuthMech= your authmech number if applicable", "username", "pwd")

data <- dbGetQuery(con, "SELECT * FROM mydb limit 25")

summary(data)
person stellar    schedule 19.08.2016
comment
Знаете ли вы, как закрыть соединение после его открытия? Спасибо - person Henry Navarro; 23.11.2018
comment
@HenryNavarro dbDisconnect(con) закроет соединение с Impala - person mockash; 28.02.2019

Пакет R implyrCRAN и GitHub) предоставляет серверную часть dplyr для Impala, используя для подключения драйвер ODBC или JDBC. Инструкции см. в README.

person ianmcook    schedule 23.06.2017

Мне удалось успешно использовать коннектор ODBC и пакет odbc в R. Похоже, этот метод не имеет никаких зависимостей от Java и рекомендован автором implyr. Исходя из моего ограниченного опыта, этот коннектор лучше справляется с правильным сопоставлением типов данных R с типами данных Impala, что приводит к меньшим размерам объектов в R.

Для Mac процесс выглядит примерно так:

  • Установите коннектор Cloudera ODBC
  • Установить unixodbc: brew install unixodbc
  • Следуйте Руководство по установке коннектора Cloudera ODBC

    • echo export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/opt/cloudera/impalaodbc/lib/universal >> ~/.bash_profile
    • создайте файл ~/.odbcinst.ini с

      [ODBC Drivers] 
      Cloudera ODBC Driver for Impala=Installed
      [Cloudera ODBC Driver for Impala]
      Driver=/opt/cloudera/impalaodbc/lib/universal/libclouderaimpalaodbc.dylib
      Description=Cloudera ODBC Driver for Impala
      
    • при желании создайте файл ~/.odbc.ini с информацией о вашем подключении. Здесь я использую Kerberos:

      [impala]
      Driver = Cloudera ODBC Driver for Impala
      Database = 
      Host =
      Port =
      KrbHostFQDN =
      KrbServiceName =
      KrbRealm =
      AuthMech = 1
      
    • source ~/.bash_profile, чтобы убедиться, что DYLD_LIBRARY_PATH обновлено
  • в R убедитесь, что у вас установлены DBI и odbc: install.packages(c("DBI", "odbc"))
  • Наконец, чтобы установить соединение в R,

    library(DBI)
    library(odbc)
    conn <- dbConnect(odbc::odbc(),
                   driver = "Cloudera ODBC Driver for Impala",
                   #database = "",
                   host = "",
                   port = ,
                   KrbHostFQDN = "",
                   KrbServiceName = "",
                   KrbRealm = "",
                   AuthMech=1)
    
  • Затем, чтобы получить что-то,

    dd <- dbGetQuery(conn, "select * from my_awesome_db.my_awesome_table limit 10;")
    
person matmat    schedule 02.09.2017

Просто хотел по-другому получить доступ к путям к классам, а не писать все jar-файлы:

drv <- JDBC(driverClass = "com.cloudera.impala.jdbc3.Driver", 
        classPath = list.files("C:/Users/Impala",
                               pattern="jar$",full.names=T),
        identifier.quote="'")
person Jason Born    schedule 17.10.2016

Используйте пакет RODBC. Я успешно использую его в производстве. Здесь я пишу учебник для него. Из этого блога

  1. Загрузите ClouderaImpalaODBC32.msi и установите его.
  2. Откройте его и введите необходимую информацию в поля аргументов, вот несколько скриншоты, которые помогут вам сделать это быстрее.
  3. В среде R установите и создайте библиотеку RODBC.
  4. тип,
library(RODBC)
impala <- odbcConnect("Impala")
sqlQuery(impala,"select * from xxx")

Кстати, если у вас среда под Win 10, в функции odbcConnect надо указать свой логин и пароль (Только что из отчета моего коллеги).

Надеюсь, вы успешно используете impala от R.

person Jiaxiang    schedule 20.02.2019