整合hadoop,revo-scaleR和hive

时间:2014-08-26 07:57:16

标签: r hadoop hive revolution-r

我需要将HIVE表中的数据提取到csv文件中并在RevoScaleR中使用它。 目前我们从HIVE中提取数据并手动将其放入文件并在unix文件系统中使用以进行特殊分析,但是,要求是将结果直接重定向到hdfs位置并从那里使用RevoScaleR?

我该怎么做?或者我需要什么样的连接来建立这个。

2 个答案:

答案 0 :(得分:1)

如果我理解您的问题是正确的,您可以使用RevoScaleR ODBC连接导入HIVE表并从那里进行进一步分析。

以下是使用Hortonworks提供的ODBC驱动程序的示例:

OdbcConnString <- "DSN=Sample Hortonworks Hive DSN"

odbcDS <- RxOdbcData(sqlQuery = "SELECT * FROM airline",
                                connectionString=OdbcConnString,
                                stringsAsFactors=TRUE, 
                                useFastRead = TRUE,
                                rowsPerRead=150000)

xdfFile <- "airlineHWS.xdf"

if(file.exists(xdfFile)) file.remove(xdfFile)                       

Flights<-rxImport(odbcDS, outFile=xdfFile,overwrite=TRUE)

rxGetInfo(data="airlineHWS.xdf", getVarInfo=TRUE,numRows = 10)

答案 1 :(得分:0)

陈伟的方法还可以,但只有一个问题。数据作为odbcDS对象中的数据帧临时存储在内存中。如果我们在蜂巢中有大桌子,那么我们就完成了。

我建议通过在hive中使用外部表,然后在革命r中直接使用后端数据来将所有内容保存在磁盘上。

这些内容:

  1. 以文本文件(csv,tab等)格式从现有的配置单元表创建外部表。

      

    CREATE EXTERNAL TABLE ext_table

         

    LIKE your_original_table_name

         

    由','

    终止的行格式删除字段      

    LOCATION'/ your / hdfs / location';

    这里我们创建外部表,它作为csv文件存储在hdfs中。

  2. 接下来,使用insert overwrite命令将原始表复制到外部表。

      

    从your_original_table_name

    插入覆盖表ext_table select *

    如果我们想检查hdfs类型的后端数据:

      

    hadoop fs -ls / your / hdfs / location /

    我们可以看到存储在该位置的零件文件。来吧,让他们双重确定

  3. 现在我们可以使用RxTextData函数从上面的步骤中读取数据

      

    hive_data&lt; - RxTextData(file ='/ your / hdfs / location /',delimiter =',')

    现在你可以使用hive_data创建一个xdf文件作为RxXdfData中的inFile参数,以便更有效地进行进一步处理,但最重要的是数据从未触及过内存。