HDP:使用Hive Thrift通过JDBC访问Spark RDD表
我使用Spark Streaming在滑动窗口中分析推文。因为我不想保存所有数据,只保存窗口的当前数据,所以我想直接从内存中查询数据 我的问题和这个差不多: 这是我的代码的重要部分: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
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问题也消失了