gpt4 book ai didi

apache-spark - 如何从 Spark 连接到远程配置单元服务器

转载 作者:行者123 更新时间:2023-12-03 21:43:56 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to connect Spark SQL to remote Hive metastore (via thrift protocol) with no hive-site.xml?

(9 个回答)


去年关闭。




我在本地运行 spark 并希望访问位于远程 Hadoop 集群中的 Hive 表。

我可以通过在 SPARK_HOME 下启动直线来访问 hive 表

[ml@master spark-2.0.0]$./bin/beeline 
Beeline version 1.2.1.spark2 by Apache Hive
beeline> !connect jdbc:hive2://remote_hive:10000
Connecting to jdbc:hive2://remote_hive:10000
Enter username for jdbc:hive2://remote_hive:10000: root
Enter password for jdbc:hive2://remote_hive:10000: ******
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/ml/spark/spark-2.0.0/jars/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
16/10/12 19:06:39 INFO jdbc.Utils: Supplied authorities: remote_hive:10000
16/10/12 19:06:39 INFO jdbc.Utils: Resolved authority: remote_hive:10000
16/10/12 19:06:39 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://remote_hive:10000
Connected to: Apache Hive (version 1.2.1000.2.4.2.0-258)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://remote_hive:10000>

如何从 spark 以编程方式访问远程配置单元表?

最佳答案

JDBC 不是必需的

Spark 直接连接到 Hive 元存储,而不是通过 HiveServer2。要配置这个,

  • hive-site.xml在您的 classpath ,并指定 hive.metastore.uri s 到您的 hive Metastore 托管的位置。另见 How to connect to a Hive metastore programmatically in SparkSQL?
  • 进口 org.apache.spark.sql.hive.HiveContext ,因为它可以对 Hive 表执行 SQL 查询。
  • 定义 val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)
  • 验证 sqlContext.sql("show tables")看看它是否有效

  • SparkSQL on Hive tables

    结论:如果你必须使用jdbc方式

    看看 connecting apache spark with apache hive remotely.

    请注意,beeline 也通过 jdbc 连接。从您的日志中可以看出它是显而易见的。

    [ml@master spark-2.0.0]$./bin/beeline Beeline version 1.2.1.spark2 by Apache Hive beeline> !connect jdbc:hive2://remote_hive:10000

    Connecting to jdbc:hive2://remote_hive:10000



    所以请看看这个 interesting article
  • 方法一:使用JDBC拉表到Spark
  • 方法二:搭配HiveServer2 JDBC驱动使用Spark JdbcRDD
  • 方法三:客户端获取数据集,然后手动创建RDD

  • 目前HiveServer2驱动不允许我们使用“Sparkling”方法一和方法二,只能依赖方法三

    下面是可以实现的示例代码片段

    通过 HiveServer2 JDBC 连接将数据从一个 Hadoop 集群(又名“远程”)加载到另一个集群(我的 Spark 所在的地方,又名“国内”)。
    import java.sql.Timestamp
    import scala.collection.mutable.MutableList

    case class StatsRec (
    first_name: String,
    last_name: String,
    action_dtm: Timestamp,
    size: Long,
    size_p: Long,
    size_d: Long
    )

    val conn: Connection = DriverManager.getConnection(url, user, password)
    val res: ResultSet = conn.createStatement
    .executeQuery("SELECT * FROM stats_201512301914")
    val fetchedRes = MutableList[StatsRec]()
    while(res.next()) {
    var rec = StatsRec(res.getString("first_name"),
    res.getString("last_name"),
    Timestamp.valueOf(res.getString("action_dtm")),
    res.getLong("size"),
    res.getLong("size_p"),
    res.getLong("size_d"))
    fetchedRes += rec
    }
    conn.close()
    val rddStatsDelta = sc.parallelize(fetchedRes)
    rddStatsDelta.cache()




    // Basically we are done. To check loaded data:

    println(rddStatsDelta.count)
    rddStatsDelta.collect.take(10).foreach(println)

    关于apache-spark - 如何从 Spark 连接到远程配置单元服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39997224/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com