【发布时间】:2021-12-14 15:34:49
【问题描述】:
我正在尝试将 Rstudio Server 从 1.2.5042 升级到最新的 2021.09.1-372。但是当我尝试通过 odbc 连接 hive 时出现问题。然后我将Rstudio Server降级到1.4.1106,还是一样的错误。
> library(DBI)
> con <- dbConnect(odbc::odbc(), "hive", timeout = 10)
Error: nanodbc/nanodbc.cpp:1021: 00000: [Cloudera][ThriftExtension] (9) Error occurred while authenticating via SASL. Error details: SASL(-4): no mechanism available: No worthy mechs found
但是当我回到 1.2.5042 时,odbc 工作正常。我比较了来自 Rstudio 控制台和 Rstudio 终端的 Sys.getenv() 结果,LD_LIBRARY_PATH 或 PATH 没有什么不同。我用谷歌搜索并发现其他人有同样的错误。但他们正在使用 python 或其他东西,他们通过apt install libsasl2 libsasl2-dev 或其他东西修复了它。但是由于 odbc 在 rstudio 内部和 rstudio 外部的终端以及 rstudio 1.2.5042 中都可以正常工作,因此我机器的 odbc env 已经是正确的。而且,isql -v hive 工作正常。 (DSN 配置单元已在 ~/.odbc.ini 中设置)。我不知道如何得到现在的工作。我每天都使用 odbc 从 hive 中查询数据。新版本的 Rstudio Server 有什么需要做的设置吗?
Sys.getenv()和sessionInfo()的输出如下:
> Sys.getenv()
CLICOLOR_FORCE 1
CLOUDERAHIVEINI /opt/cloudera/hiveodbc/lib/64//cloudera.hiveodbc.ini
DISPLAY :0
EDITOR vi
GIT_ASKPASS rpostback-askpass
HOME /home/rstudio
LANG en_US.UTF-8
LD_LIBRARY_PATH /usr/local/lib/R/lib::/lib:/usr/local/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/jvm/java-11-openjdk-amd64/lib/server
LN_S ln -s
LOGNAME rstudio
MAKE make
MPLENGINE tkAgg
PAGER /usr/bin/pager
PATH /usr/lib/rstudio-server/bin:/usr/lib/rstudio-server/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/rstudio-server/bin/postback
R_BROWSER xdg-open
R_BZIPCMD /usr/bin/bzip2
R_DOC_DIR /usr/local/lib/R/doc
R_GZIPCMD /usr/bin/gzip
R_HOME /usr/local/lib/R
R_INCLUDE_DIR /usr/local/lib/R/include
R_LIBS /usr/local/lib/R/site-library:/usr/local/lib/R/library
R_LIBS_SITE
R_LIBS_USER ~/R/x86_64-pc-linux-gnu-library/4.0
R_PAPERSIZE letter
R_PDFVIEWER /usr/bin/xdg-open
R_PLATFORM x86_64-pc-linux-gnu
R_PRINTCMD /usr/bin/lpr
R_RD4PDF times,inconsolata,hyper
R_SESSION_TMPDIR /tmp/Rtmpdxn0JW
R_SHARE_DIR /usr/local/lib/R/share
R_STRIP_SHARED_LIB strip --strip-unneeded
R_STRIP_STATIC_LIB strip --strip-debug
R_SYSTEM_ABI linux,gcc,gxx,gfortran,gfortran
R_TEXI2DVICMD /usr/bin/texi2dvi
R_UNZIPCMD /usr/bin/unzip
R_ZIPCMD /usr/bin/zip
RMARKDOWN_MATHJAX_PATH /usr/lib/rstudio-server/resources/mathjax-27
RS_RPOSTBACK_PATH /usr/lib/rstudio-server/bin/rpostback
RS_SESSION_TMP_DIR /var/run/rstudio-server/rstudio-rsession
RSTUDIO 1
RSTUDIO_CONSOLE_COLOR 256
RSTUDIO_CONSOLE_WIDTH 135
RSTUDIO_HTTP_REFERER http://10.27.5.209:8789/
RSTUDIO_PANDOC /usr/lib/rstudio-server/bin/pandoc
RSTUDIO_PROGRAM_MODE server
RSTUDIO_R_MODULE
RSTUDIO_R_PRELAUNCH_SCRIPT
RSTUDIO_R_REPO
RSTUDIO_R_VERSION_LABEL
RSTUDIO_SESSION_STREAM rstudio-d
RSTUDIO_USER_IDENTITY rstudio
RSTUDIO_USER_IDENTITY_DISPLAY rstudio
RSTUDIO_WINUTILS bin/winutils
SED /usr/bin/sed
SSH_ASKPASS rpostback-askpass
TAR /usr/bin/tar
TERM xterm-256color
USER rstudio
> sessionInfo()
R version 4.0.4 (2021-02-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 20.04.3 LTS
Matrix products: default
BLAS/LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.8.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=C LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] DBI_1.1.1
loaded via a namespace (and not attached):
[1] bit_4.0.4 odbc_1.3.1 compiler_4.0.4 ellipsis_0.3.1 hms_1.0.0 tools_4.0.4 Rcpp_1.0.6 bit64_4.0.5
[9] vctrs_0.3.7 blob_1.2.1 lifecycle_1.0.0 pkgconfig_2.0.3 rlang_0.4.10
我的odbc.ini 内容如下。它适用于 rstudio 1.2.5042。
[hive]
Description=Cloudera ODBC Driver for Apache Hive (64-bit)
Driver=/opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
Host = 192.168.90.54
Port = 10000
UID = hive_username
PWD = hive_password
AuthMech = 3
UseSASL = 1
Database = default
UseNativeQuery=1
举个小例子,我们可以使用 docker 快速运行 hiveserver2,docker-hive 示例可以在这里找到:https://github.com/big-data-europe/docker-hive。克隆它并 cd 到它的目录,然后 docker-compose up -d 将运行一个简单的 hive。然后将新的DSN添加到.odbc.ini,可以在rstudio-server窗格中建立一个新的连接。然后我们可以再次显示错误。
[hive_test]
Description=Cloudera ODBC Driver for Apache Hive (64-bit)
Driver=/opt/cloudera/hiveodbc/lib/64/libclouderahiveodbc64.so
Host = YOUR_LOCAL_IP(or localhost)
Port = 10000
Database = default
UseNativeQuery = 1
顺便说一句,我在 Windows 和 MacOS 上尝试了 Rstudio 桌面,连接到 hive 都可以正常工作。此错误仅发生在 Rstudio-Server 中。我试图将 env 变量从终端中的 R 复制到 Rstudio-server 中的 R 控制台,没有任何变化。我还通过 Rstudio-server 终端尝试了 pyodbc 并在 Rstudio-server 控制台中进行了调整,pyodbc 在终端中也可以正常工作,但在 Rstudio-server 终端中也会出现同样的错误。
更新,我在 Ubuntu 上试过,Rstudio 桌面也有同样的错误。
【问题讨论】:
标签: r hive odbc rstudio rstudio-server