Apache spark 通过thrift server-java从web浏览器访问Spark RDD
我们已使用Java使用Spark 1.2.1处理数据,并存储在Hive表中。我们希望从web浏览器以RDD的形式访问此数据 我阅读了文档,了解了完成任务的步骤 我无法找到通过thrift server与Spark SQL RDD进行交互的方法。我发现的示例在代码中有一行,我在Spark 1.2.1 java API文档中找不到用于此的类Apache spark 通过thrift server-java从web浏览器访问Spark RDD,apache-spark,thrift,rdd,Apache Spark,Thrift,Rdd,我们已使用Java使用Spark 1.2.1处理数据,并存储在Hive表中。我们希望从web浏览器以RDD的形式访问此数据 我阅读了文档,了解了完成任务的步骤 我无法找到通过thrift server与Spark SQL RDD进行交互的方法。我发现的示例在代码中有一行,我在Spark 1.2.1 java API文档中找不到用于此的类 HiveThriftServer2.startWithContext 在github中,我看到了使用 导入org.apache.spark.sql.hive.t
HiveThriftServer2.startWithContext
在github中,我看到了使用
导入org.apache.spark.sql.hive.thriftserver,但我在Java API文档中没有看到这一点。不确定我是否遗漏了什么
有人有幸通过thrift从浏览器访问Spark SQL RDD吗?你能发布代码片段吗。我们正在使用Java Thrift是JDBC/ODBC服务器。
您可以通过JDBC/ODBC连接连接到它,并通过HiveDriver访问内容。
您可以不从中获取RDD,因为
HiveContext
不可用。您提到的是一个实验性的特性,不适用于Java 作为一种解决方法,您可以重新解析结果并为客户端创建结构。
例如:
private static String driverName = "org.apache.hive.jdbc.HiveDriver";
private static String hiveConnectionString = "jdbc:hive2://YourHiveServer:Port";
private static String tableName = "SOME_TABLE";
Class c = Class.forName(driverName);
Connection con = DriverManager.getConnection(hiveConnectionString, "user", "pwd");
Statement stmt = con.createStatement();
String sql = "select * from "+tableName;
ResultSet res = stmt.executeQuery(sql);
parseResultsToObjects(res);
我已经把大部分工作做好了。让我们剖析它的每一部分:(文章底部的引用)
HiveThriftServer2.startWithContext
在Scala中定义。我从来没有能够使用Py4j从Java或Python访问它,我也不是JVM专家,但我最终选择了Scala。这可能与注释@DeveloperApi
有关。这就是我在Spark 1.6.1中导入Scala的方式:
import org.apache.spark.sql.hive.thriftserver.HiveThriftServer2
对于阅读本文而不使用配置单元的任何人来说,Spark SQL上下文是不行的,您需要配置单元上下文。但是,HiveContext构造函数需要Java spark上下文,而不是scala上下文
import org.apache.spark.api.java.JavaSparkContext
import org.apache.spark.sql.hive.HiveContext
var hiveContext = new HiveContext(JavaSparkContext.toSparkContext(sc))
现在启动thrift服务器
HiveThriftServer2.startWithContext(hiveContext)
// Yay
接下来,我们需要将RDD作为SQL表提供。首先,我们必须将它们转换为Spark SQL数据帧:
val someDF = hiveContext.createDataFrame(someRDD)
然后,我们需要将它们转换为Spark SQL表。您可以通过将它们持久化到配置单元中,或者使RDD作为临时表可用来实现这一点
保留到配置单元:
// Deprecated since Spark 1.4, to be removed in Spark 2.0:
someDF.saveAsTable("someTable")
// Up-to-date at time of writing
someDF.write().saveAsTable("someTable")
或者,使用临时表:
// Use the Data Frame as a Temporary Table
// Introduced in Spark 1.3.0
someDF.registerTempTable("someTable")
注意-临时表与SQL会话隔离。
Spark的hive thrift服务器默认为多会话
在版本1.6中(每个连接一个会话)。所以,,
让客户端访问您注册的临时表,
您需要将选项spark.sql.hive.thriftServer.singleSession
设置为true
您可以通过查询beeline
中的表来测试这一点,beeline是一个用于与hive thrift服务器交互的命令行实用程序。它带有火花
最后,您需要一种从浏览器访问hive thrift服务器的方法。多亏了它的优秀开发者,它有一个HTTP模式,所以如果你想构建一个web应用程序,你可以在浏览器的AJAX请求上使用thrift协议。一个更简单的策略可能是创建一个IPython笔记本,并使用pyhive
连接到thrift服务器
数据帧参考:
singleSession选项拉取请求:
HTTP模式和直线方式:
蜂箱:
HiveThriftServer2 startWithContext定义: