【问题标题】:Using Spark to Read from Hive使用 Spark 从 Hive 读取
【发布时间】:2017-09-03 06:48:35
【问题描述】:

问题

我正在尝试从 Hive 表中读取,但收到以下错误:

[error] (run-main-0) org.apache.spark.sql.AnalysisException: Table or view not found: tags; line 1 pos 14

我已将hive-site.xml 放在$SPARK_HOME/conf$HIVE_HOME/conf 中。同样,我使用 sqoop 从 mysql 获取数据并将其导入 hive 也没有问题。我的 Scala 代码有问题吗?或者这是配置错误?

Scala 代码:

package test1

import java.io.File
import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession

case class Movie(movieid: String, title: String, genres: String)
case class Tag(userid: String, title: String, tag: String)

object SparkHiveTest {
    def main(args: Array[String]) {
        val warehouseLocation = new File("spark-warehouse").getAbsolutePath
        val spark = SparkSession
            .builder()
            .master("local")
            .appName("SparkHiveExample")
            .config("spark.sql.warehouse.dir", warehouseLocation)
            .enableHiveSupport()
            .getOrCreate()

        spark.sql("SELECT * FROM tags").show()                      
        spark.stop()
    }
}

hive-site.xml:

<configuration>

   <property>

      <name>javax.jdo.option.ConnectionURL</name>

      <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>

      <description>metadata is stored in a MySQL server</description>

   </property>

   <property>

      <name>javax.jdo.option.ConnectionDriverName</name>

      <value>com.mysql.jdbc.Driver</value>

      <description>MySQL JDBC driver class</description>

   </property>

   <property>

      <name>javax.jdo.option.ConnectionUserName</name>

      <value>hiveuser</value>

      <description>user name for connecting to mysql server</description>

   </property>

   <property>

      <name>javax.jdo.option.ConnectionPassword</name>

      <value>hivepass</value>

      <description>password for connecting to mysql server</description>

   </property>

</configuration>

【问题讨论】:

    标签: mysql scala apache-spark hive


    【解决方案1】:

    确保您的 Hive 元存储配置正确:

    <configuration>
      <property>
        <name>hive.metastore.uris</name>
        <value>HIVE METASTORE URI(S) HERE</value>
        <description>URI for client to contact metastore server</description>
      </property>
    </configuration>
    

    【讨论】:

    • 将上述内容附加到我的hive-site.xml 文件中,但结果相同。我使用thrift://localhost:3306 作为我的URI(MySQL 是本地的,我只使用了默认端口)。
    • 然后假设 URI 是正确的,请确保在运行时类路径中拥有所有 Hive jar。我见过一些异常被吞并导致事情静默失败的案例。
    • 通过 .sbt 构建它。使用"org.apache.spark" %% "spark-hive" %% "2.1.0" 添加了配置单元库依赖项 - 以为我会在依赖项 jar 上设置。
    【解决方案2】:

    根据HiveContext的API文档:

    与存储在 Hive 中的数据集成的 Spark SQL 执行引擎实例。 从类路径上的 hive-site.xml 中读取 Hive 的配置。

    因此,请务必将 hive-site.xml 放入 IDE 中项目的资源文件夹中。

    它立即解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多