HDP:使用Hive Thrift通过JDBC访问Spark RDD表

HDP:使用Hive Thrift通过JDBC访问Spark RDD表,jdbc,apache-spark,hive,thrift,spark-streaming,Jdbc,Apache Spark,Hive,Thrift,Spark Streaming,我使用Spark Streaming在滑动窗口中分析推文。因为我不想保存所有数据,只保存窗口的当前数据,所以我想直接从内存中查询数据 我的问题和这个差不多: 这是我的代码的重要部分: sentimentedWords.foreachRDD { rdd => val hiveContext = new HiveContext(SparkContext.getOrCreate()) import hiveContext.implicits._ val dataFrame = rd

我使用Spark Streaming在滑动窗口中分析推文。因为我不想保存所有数据,只保存窗口的当前数据,所以我想直接从内存中查询数据

我的问题和这个差不多:

这是我的代码的重要部分:

sentimentedWords.foreachRDD { rdd =>
  val hiveContext = new HiveContext(SparkContext.getOrCreate())
  import hiveContext.implicits._
  val dataFrame = rdd.toDF("sentiment", "tweet")

  dataFrame.registerTempTable("tweets")
  HiveThriftServer2.startWithContext(hiveContext)
}
正如我发现的那样,
HiveThriftServer2.startWithContext(hiveContext)
行启动了一个新的ThriftServer,该ThriftServer应该通过JDBC提供对诱惑的访问。但是,我在控制台中遇到以下异常:

org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.0.0.0:10000.
    at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:93)
    at org.apache.thrift.transport.TServerSocket.<init>(TServerSocket.java:79)
    at org.apache.hive.service.auth.HiveAuthFactory.getServerSocket(HiveAuthFactory.java:236)
    at org.apache.hive.service.cli.thrift.ThriftBinaryCLIService.run(ThriftBinaryCLIService.java:69)
    at java.lang.Thread.run(Thread.java:745)
org.apache.thrift.transport.ttTransportException:无法在地址0.0.0.0/0.0.0:10000上创建ServerSocket。
位于org.apache.thrift.transport.TServerSocket.(TServerSocket.java:93)
位于org.apache.thrift.transport.TServerSocket.(TServerSocket.java:79)
位于org.apache.hive.service.auth.HiveAuthFactory.getServerSocket(HiveAuthFactory.java:236)
位于org.apache.hive.service.cli.thrift.ThriftBinaryCLIService.run(ThriftBinaryCLIService.java:69)
运行(Thread.java:745)
当我使用Hortonworks数据平台(HDP)时,默认的Hive Thrift服务器已经在使用端口10000!我登录到Ambari并更改了端口,如下所示:

<property>
  <name>hive.server2.thrift.http.port</name>
  <value>12345</value>
</property>

<property>
  <name>hive.server2.thrift.port</name>
  <value>12345</value>
</property>

hive.server2.thrift.http.port
12345
hive.server2.thrift.port
12345
但这让情况变得更糟。现在,Ambari显示由于某些ConnectionRejected错误,它无法启动服务。像10001这样的其他端口也不工作。重新启动配置单元后,端口10000仍在使用中

我假设,如果我可以将端口10000用于Spark应用程序/ThriftServer,并将默认的Hive ThriftServer移动到其他端口,那么一切都应该正常。或者,我也可以告诉我的应用程序在另一个端口上启动ThriftServer,但我不知道这是否可行

有什么想法吗

补充意见:
终止在端口10000上侦听的服务没有效果。

我最终修复了问题,如下所示:

<property>
  <name>hive.server2.thrift.http.port</name>
  <value>12345</value>
</property>

<property>
  <name>hive.server2.thrift.port</name>
  <value>12345</value>
</property>
当我使用Spark Streaming时,我的工作正在无限循环中运行。在循环中,我有一行代码启动Thrift服务器:

HiveThriftServer2.startWithContext(hiveContext)
这导致我的控制台被垃圾邮件发送“无法创建ServerSocket”消息。我忽略了我的代码工作正常,我只是意外地尝试启动多个服务器。。。尴尬

还有一点很重要: 如果您使用的是Hortonworks HDP:请勿使用
beeline
命令启动beeline。启动可在
$SPARK\u HOME/bin/beeline
中找到的“正确”直线。我花了好几个小时才发现!我不知道常规的
直线有什么问题,老实说,现在我不在乎了

除此之外:在重新启动我的HDP沙箱之后,与Ambari的ConnectionRejected问题也消失了