1. 程式人生 > 其它 >rstudio找不到r低版本_R本地連線Hive(Mac詳解)

rstudio找不到r低版本_R本地連線Hive(Mac詳解)

技術標籤:rstudio找不到r低版本

目錄

  1. 準備工作
    1. 確認hive server2的ip、埠和訪問許可權
    2. Mac本地安裝Rstudio
    3. Rstudio安裝jar包
  2. 建立R連線hive指令碼函式
  3. 測試
  4. 呼叫R指令碼的函式

1 準備工作

1.1 確認hive server2的ip、埠和訪問許可權

  1. 找維護hadoop的同事, 確認hive server2的ip和埠
  2. 確認hive server的ip在本地能否ping通

開啟終端, 輸入ping ip地址, 如出現下圖則表示能夠ping通,

86f783e2ccf53fc43ab72004cca20f7c.png

3. 再次確認hive server2的埠在本地能否訪問

這裡需要用到telnet, 因此先在終端配置telnet

  • 開啟終端, 輸入
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 下載成功後, 輸入
brew install telnet
  • 使用telnet確認hive server2的埠在本地能否訪問, 因此繼續在終端輸入
telnet ip 埠

如果出現Connected to ip.的提示則說明可訪問啦, 反之如果一直顯示Trying ip...則說明不可訪問, 要麼是ip和埠錯誤, 要麼是可能沒有訪問的許可權, 需找hadoop同事確認清楚, 或者申請許可權去~

1.2 Mac本地安裝Rstudio

首先說明: R是執行環境, Rstudio是開發工具(為了方便使用R語言而生).

因此需先後安裝:

1) R語言環境: https://cran.r-project.org/

2) Rstudio: https://www.rstudio.com/products/rstudio/download/

1.3 Rstudio安裝jar包

在Rconsole輸入

install.packages('DBI')
install.packages('rJava')
install.packages('RJDBC')
devtools::install_github("lengyuyeke/RHJDBC") #注意: 有的Rstudio版本不支援安裝RHJDBC,直接github上安裝可解決版本限制問題

2 建立R連線hive指令碼函式

可將以下另存為一個R指令碼, 比如起名叫function.R, 之後每次連線hive的時候, 直接呼叫本地的該指令碼即可, 避免每次都寫一大坨.

options(java.parameters = "-Xmx8g") # set jvm
library(DBI)
library(RJDBC)
# 連線 Hive
init_jdbc <- function() {
  require(RHJDBC)
  cp <- dir(system.file("java", package = "RHJDBC"), full.names = TRUE) # you can use your own jdbc driver
  .jinit(classpath = cp) # init
  drv <- JDBC("org.apache.hive.jdbc.HiveDriver") # set driver
  con <- dbConnect(drv,
                   "jdbc:hive2://ip:終端/default",
                   "username",
                   "password"
  ) # set connection,url,username,password
  class(con) <- "JHDBCConnection" # change the class of con
  con
}

# 查詢 Hive
get_hive_query <- function(query) {
  print(query)
  conn <- init_jdbc()
  data <- try(dbGetQuery(conn, query), silent = TRUE)
  dbDisconnect(conn)
  if (class(data) %in% c("error", "try-error")) {
    return()
  }
  if (nrow(data) > 0) {
    colnames(data) <- gsub("(.*).(.*)", "2", colnames(data))
    data.table::setDT(data)
    data
  }
}

3 測試

dat<- get_hive_query("select * from tmp.test") 

4 呼叫R指令碼的函式

source("//Users/hanqianyun/Desktop/function.R")
dat<- get_hive_query("select * from tmp.test") 

over~