本文地址:http://www.reibang.com/p/651fb104088c,轉(zhuǎn)載請(qǐng)說(shuō)明出處。
從事大數(shù)據(jù)方面的工作已經(jīng)有一段時(shí)間了,對(duì)于Hadoop的各種組件也有了比較全面的了解走芋,有幸也用R做過(guò)一些數(shù)據(jù)分析的項(xiàng)目,免不了要將R和Hadoop進(jìn)行結(jié)合絮识。
做過(guò)數(shù)據(jù)分析的人應(yīng)該對(duì)于R都比較熟悉绿聘,它的強(qiáng)項(xiàng)在于可以通過(guò)各種模型(拿來(lái)即用)對(duì)數(shù)據(jù)進(jìn)行加工嗽上、建模和分析次舌。但處理大數(shù)據(jù)不是它的強(qiáng)項(xiàng)。對(duì)于大規(guī)模數(shù)據(jù)的處理兽愤,Hadoop可以算是最佳的工具彼念。Hadoop生態(tài)圈提供了豐富的組件可以處理數(shù)據(jù)。比如
HDFS提供分布式存儲(chǔ)
Hive提供類(lèi)似SQL的接口對(duì)數(shù)據(jù)進(jìn)行處理
Spark可以提供全內(nèi)存的數(shù)據(jù)處理
等等浅萧。但Hadoop在數(shù)據(jù)分析和挖掘領(lǐng)域提供的組件還比較弱逐沙,雖然Spark提供了MLLIB組件提供算法支持,但仍然比較有限洼畅,且更不說(shuō)R強(qiáng)大的圖形繪制功能吩案。有時(shí)候我們需要擁有大數(shù)據(jù)的處理能力,同時(shí)又想使用R語(yǔ)言靈活而強(qiáng)大的數(shù)據(jù)分析和展示能力帝簇,那么自然就會(huì)想將兩者結(jié)合起來(lái)徘郭。R和Hadoop的結(jié)合一般有如下幾種方式(可能不全_):
R直接讀取HDFS的數(shù)據(jù)
R連接Hive使用Hadoop的數(shù)據(jù)
R通過(guò)SparkR使用Spark來(lái)處理Hadoop的數(shù)據(jù)
本文主要介紹R連接Hive組件靠益,通過(guò)SQL語(yǔ)句獲取Hadoop上的數(shù)據(jù)。關(guān)于Hive的基礎(chǔ)知識(shí)和使用方法這里不做過(guò)多介紹残揉。
R連接Hive是通過(guò)JDBC接口來(lái)進(jìn)行操作胧后。Hive組件通過(guò)一個(gè)名為HiServer2的服務(wù)來(lái)提供JDBC接口。假設(shè)啟動(dòng)HiServer2的機(jī)器的IP地址為192.168.1.101抱环,端口號(hào)為10000(默認(rèn)端口)壳快,那么在192.168.1.101上運(yùn)行beeline工具可以測(cè)試JDBC服務(wù)是否正常。beeline是Hive組件提供的一個(gè)sql客戶端镇草,可以通過(guò)JDBC接口連接到Hive服務(wù)眶痰。用beeline測(cè)試的結(jié)果如下:
$beeline -u jdbc:hive2://192.168.1.101:10000 -n mr
mr為hive的用戶名。如果連接成功表示Hive的JDBC服務(wù)運(yùn)行正常梯啤,這是我們使用R連接Hive的前提條件凛驮。
以上步驟完成以后,我們就可以開(kāi)始使用R語(yǔ)言來(lái)訪問(wèn)Hive了条辟。這里推薦使用RStudio工具來(lái)進(jìn)行開(kāi)發(fā)黔夭。下圖是實(shí)際所用的R的版本。
R語(yǔ)言訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)需要下載如下包:
rJava:R調(diào)用Java的類(lèi)所需要的包
DBI:R訪問(wèn)關(guān)系型數(shù)據(jù)庫(kù)的接口
RJDBC:RJDBC訪問(wèn)數(shù)據(jù)庫(kù)的包
以上包可以通過(guò)執(zhí)行如下腳本安裝:
install.package("rJava")
install.package("DBI")
install.package("RJDBC")
library('rJava')
library('DBI')
library('RJDBC')
下載所需要的R包以后羽嫡,還需要將集群中Hive JDBC的驅(qū)動(dòng)包拷貝出來(lái)放在R程序所在的本地本姥。具體步驟為:
- 在hive的安裝目錄lib下面一般有一個(gè)jdbc-standalone的jar,類(lèi)似如下名字:
hive-jdbc-1.2.1000.2.4.2.0-258-standalone.jar
- 在hadoop的安裝目錄lib下有一個(gè)hadoop-common的jar杭棵,類(lèi)似如下名字:
hadoop-common-2.7.1.2.4.2.0-258.jar
以上jar包的名字根據(jù)Hadoop的版本不同而不同婚惫,將以上兩個(gè)jar包拷貝到R所在的系統(tǒng)目錄下,假設(shè)目錄為D:\RHive魂爪,在R中可以通過(guò)setwd函數(shù)將工作目錄切換到j(luò)ar包所在的目錄:
setwd("D:\\RHive")
然后執(zhí)行如下R腳本完成到Hive的連接:
drv <- JDBC(“org.apache.hive.jdbc.HiveDriver”, “hive-jdbc-1.2.1000.2.4.2.0-258-standalone.jar;hadoop-common-2.7.1.2.4.2.0-258.jar”) //加載驅(qū)動(dòng)
conn <- dbConnect(drv, “jdbc:hive2://192.168.56.102:10000”, “mr”, “”) //建連接
dt = dbGetQuery(conn,“select * from student limit 10”) //測(cè)試連接
上述腳本中conn為JDBC連接先舷,dbGetQuery可以執(zhí)行Hive查詢,返回的結(jié)果在R中即為dataframe的數(shù)據(jù)結(jié)構(gòu)滓侍。后續(xù)就可以使用R中的各種函數(shù)或者模型來(lái)對(duì)Hive中的數(shù)據(jù)進(jìn)行處理了蒋川。更方便的是可以使用ggplot工具直接圖形展示Hive中的數(shù)據(jù),方便的對(duì)數(shù)據(jù)進(jìn)行探索撩笆。