RHive的安裝和用法


RHive 是一種通過HIVE高性能查詢來擴展R計算能力的包。它可以在R環境中非常容易的調用HQL, 也允許在Hive中使用R的對象和函數。理論上數據處理量可以無限擴展的Hive平台,搭配上數據挖掘的利器R環境, 堪稱是一個完美的大數據分析挖掘的工作環境。

環境配置

(配置部分是同事搞定的,只記錄一些細節)

RHive 依賴於Rserve,因此在安裝R的時候有些變化:

  1. ./configure --disable-nls --enable-R-shlib
  2. make
  3. make install

enable-R-shlib 是將R作為動態庫進行安裝,這樣像Rserve依賴於R動態庫的包就可以安裝了,但缺點是會有20%左右的性能下降

Rserve的安裝

正常的安裝R包:

  1. install.packages('rJava')
  2. install.packages('Rserve')

在安裝Rsever用戶下,創建一目錄,並創建Rserv.conf文件,寫入``remote enable''保存並退出。

通過scp -r 命令將Master節點上安裝好的Rserve包,以及Rserv.conf文件拷貝到所有slave節點下,

  1. scp -r /data2/soft/R2.15/library/Rserve slave1:/data2/soft/R2.15/library/
  2. scp -r /data2/soft/R2.15/library/Rserve slave2:/data2/soft/R2.15/library/
  3. scp -r /data2/soft/R2.15/library/Rserve slave3:/data2/soft/R2.15/library/
  4. scp -r /data2/soft/Rserv.conf slave1:/data2/soft/
  5. scp -r /data2/soft/Rserv.conf slave2:/data2/soft/
  6. scp -r /data2/soft/Rserv.conf slave3:/data2/soft/

在所有節點啟動Rserve

  1. Rserve--RS-conf /data2/soft/Rserv.conf
  2. telnet slave1 6311

在Master節點telnet所有slave節點,顯示 Rsrv0103QAP1 則表示連接成功

RHive的安裝

安裝包,並在master節點和所有slave節點創建目錄,並授讀寫權限

  1. R CMD INSTALL RHive_0.0-7.tar.gz
  2. cd /data2/soft/
  3. mkdir -p rhive/data

在master節點和所有slave節點的hadoop用戶下配置環境變量

  1. vi .bash_profile
  2. export RHIVE_DATA=/data2/soft/R/rhive/data

通過scp -r 命令將Master節點上安裝好的RHive包拷貝到所有slave節點下,

  1. scp -r /data2/soft/R2.15/library/RHive slave1:/data2/soft/R2.15/library/
  2. scp -r /data2/soft/R2.15/library/RHive slave2:/data2/soft/R2.15/library/
  3. scp -r /data2/soft/R2.15/library/RHive slave3:/data2/soft/R2.15/library/

查看hdfs文件系統下的jar包是否有讀寫權限

  1. hadoop fs -ls /rhive/lib

最后,啟動hive遠程服務: rhive是通過thrift連接hiveserver的,需要要啟動后台thrift服務,即:在hive客戶端啟動hive遠程服務

  1. nohup hive --service hiveserver &

完畢。

RHive的使用

rhive-api

從HIVE中獲得表信息的函數,比如

  • rhive.list.tables:獲得表名列表,支持pattern參數(正則表達式),類似於HIVE的show table
  • rhive.desc.table:表的描述,HIVE中的desc table
  • rhive.exist.table:

RHive 簡單應用

載入Rhive包,並連接HIVE,獲取數據:

  1. library(RHive)
  2. rhive.connect(host ='host_ip')
  3. d <- rhive.query('select * from emp limit 1000')
  4. class(d)
  5. m <- rhive.block.sample(data_sku, percent =0.0001, seed =0)
  6. rhive.close()

一般在系統中已經配置了host,因此可以直接rhive.connect()進行連接,記得最后要有rhive.close()操作。 通過HIVE查詢語句,將HIVE中的目標數據加載至R環境下,返回的 d 是一個dataframe。

實際上,rhive.query的實際用途有很多,一般HIVE操作都可以使用,比如變更scheme等操作:

  1. rhive.query('use scheme1')
  2. rhive.query('show tables')
  3. rhive.query('drop table emp')

但需要注意的是,數據量較大的情況需要使用rhive.big.query,並設置memlimit參數。

將R中的對象通過構建表的方式存儲到HIVE中需要使用

  1. rhive.write.table(dat, tablename ='usertable', sep =',')

而后使用join等HIVE語句獲得相關建模數據。其實寫到這兒,有需求的看官就應該明白了,這幾項 RHive 的功能就足夠 折騰些有趣的事情了。

  • 注1:其他關於在HIVE中調用R函數,暫時還沒有應用,未來更新。
  • 注2:rhive.block.sample這個函數需要在HIVE 0.8版本以上才能執行。

  • 參考:RHive 的 github 項目


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM