CentOS6.5安裝RHive

獵手家園發表於2016-05-08

1、安裝RServe軟體包(各個節點都要安裝)

[root@Hadoop-NN-01 mysofts] # R CMD INSTALL Rserve_1.7-2.tar.gz

 

2、設定環境變數

[root@Hadoop-NN-01 ~]# vi /etc/profile
export R_HOME= /usr/local/lib64/R
export PATH=$PATH:$R_HOME/bin

[root@Hadoop-NN-01 ~]# source /etc/profile  #儲存生效

 

3、建立Rserv.conf

$R_HOME的目錄下建立Rserv.conf檔案,寫入``remote enable''儲存並退出。

vi Rserv.conf
``remote enable''

 

4、複製檔案

cp /root/mysofts/R-3.2.5/lib/* /usr/lib64/

 

5、所有節點啟動Rserve

如果沒有Rserve請先建立軟鏈:

ln -s /usr/local/lib64/R/bin/Rserve /usr/bin/Rserve

啟動:

Rserve --RS-conf /usr/local/lib64/R/Rserv.conf

驗證:

telnet Hadoop-NN-01 6311    #顯示 Rsrv0103QAP1 則表示連線成功
netstat -tunpl | grep 6311

 

6、RHive包的安裝(各個節點都要安裝,因此Hive也要各節點都要安裝)

[root@Hadoop-NN-01 mysofts] # R CMD INSTALL RHive_2.0-0.2.tar.gz

建立目錄

[root@Hadoop-NN-01 mysofts] # cd $R_HOME
[root@Hadoop-NN-01 mysofts] # mkdir -p rhive/data
[root@Hadoop-NN-01 mysofts] # chmod 777 -R rhive/data

配置環境變數

[root@Hadoop-NN-01 mysofts] # vi /etc/profile
export RHIVE_DATA=/usr/local/lib64/R/rhive/data

如果找不到hadoop命令,把下面加到~/.bashrc中

# hadoop cdh5
export HADOOP_HOME=/home/hadoopuser/hadoop-2.6.0-cdh5.6.0
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

使用hadoopuser建立hdfs目錄

hadoop fs -mkdir /rhive
hadoop fs -mkdir /rhive/lib
hadoop fs -ls /rhive/lib

把jar包複製到相應的目錄

hadoop fs -put /usr/local/lib64/R/library/RHive/java/rhive_udf.jar /rhive/lib

 

7、啟動

hive客戶端啟(master、各slave均可)動hive遠端服務(rhive是透過thrift連線hiveserver的,需要要啟動後臺thrift服務):

nohup hive --service hiveserver2 &   #注意這裡是hiveserver2

 

8、RHive測試

1)rhive-api

從HIVE中獲得表資訊的函式,比如:

    rhive.list.tables():獲得表名列表,支援pattern引數(正規表示式),類似於HIVE的show table

    rhive.desc.table(TableName):表的描述,相當於HIVE中的desc table。

    rhive.exist.table(TableName):表是否存在

2)測試

> rhive.env()

3)簡單應用

#R
>library(RHive)
>rhive.connect(host ='ip')
>d <- rhive.query('select * from emp limit 1000')
>class(d)
>m <- rhive.block.sample(data_sku, percent =0.0001, seed =0)
>rhive.close()

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

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

>rhive.query('use scheme1')
>rhive.query('show tables')
>rhive.query('drop table emp')

但需要注意的是,資料量較大的情況需要使用rhive.big.query,並設定memlimit引數。

將R中的物件透過構建表的方式儲存到HIVE中需要使用:

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

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

 

可能出現的問題:

Exception in thread "main" java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.206.128:10000/default: java.net.ConnectException: Connection refused: connect

解決方法:

1. 檢查hive server2是否啟動:

netstat -anp | grep 10000

2. 檢查conf/hive-site.xml 下的配置是否正確:

    <configuration>
      <property>
       <name>hive.server2.thrift.port</name>
      <value>10000</value>
    </property>
    <property>
       <name>hive.server2.thrift.bind.host</name>
       <value>192.168.206.128</value>
     </property>
    </configuration>

 

相關文章