如何通过Spark SQL作为JDBC分布式查询引擎访问RDD表?

Mic*_*ael 6 apache-spark apache-spark-sql

stackoverflow上的几个帖子都有响应,其中包含有关如何通过Spark SQL作为JDBC分布式查询引擎访问RDD表的部分信息.因此,我想询问以下问题,以获取有关如何执行此操作的完整信息:

  1. 在Spark SQL应用程序中,我们是否需要使用HiveContext来注册表?或者我们可以只使用SQL上下文?

  2. 我们在哪里以及如何使用HiveThriftServer2.startWithContext?

  3. 当我们运行start-thriftserver.sh

/opt/mapr/spark/spark-1.3.1/sbin/start-thriftserver.sh --master spark:// spark-master:7077 --hiveconf hive.server2.thrift.bind.host spark-master --hiveconf hive.server2.trift.port 10001

除了指定Spark SQL应用程序的jar和主类之外,我们还需要指定其他任何参数吗?

  1. 还有其他我们需要做的事情吗?

谢谢.

Hai*_*ang 6

要通过公开DataFrame临时表HiveThriftServer2.startWithContext(),您可能需要编写和运行一个简单的应用程序,可能不需要运行start-thriftserver.sh.

对你的问题:

  1. HiveContext需要; 所述sqlContext转换为HiveContext隐式火花壳

  2. 写一个简单的应用程序,例如:

    import  org.apache.spark.sql.hive.thriftserver._  
    val  hiveContext  =  new  HiveContext(sparkContext)
    hiveContext.parquetFile(path).registerTempTable("my_table1")
      HiveThriftServer2.startWithContext(hiveContext)
  1. 无需运行start-thriftserver.sh,而是运行您自己的应用程序,例如:

spark-submit --class com.xxx.MyJdbcApp ./package_with_my_app.jar

  1. 服务器端的其他任何东西都应该在默认端口10000上启动; 您可以通过直线连接到服务器进行验证.