zoukankan      html  css  js  c++  java
  • SparkSQL读取Hive中的数据

    由于我Spark采用的是Hortonworks公司的HDP,安装的时候是使用Ambair做离线部署的。下面主要是介绍一下如何通过SparkSQL读取HIVE中的数据。

    下面我主要介绍一下我使用的情况:

    1、为了让Spark能够连接到Hive的原有数据仓库,我们需要将Hive中的hive-site.xml文件拷贝到Spark的conf目录下,这样就可以通过这个配置文件找到Hive的元数据以及数据存放。

    此时,如上所述,将对应的hive-site.xml拷贝到spark/conf目录下即可

      如果Hive的元数据存放在Mysql中,我们还需要准备好Mysql相关驱动,比如:mysql-connector-java-5.1.22-bin.jar。

    2、编写测试代码

    val conf=new SparkConf().setAppName("Spark-Hive").setMaster("local")
    val sc=new SparkContext(conf)
     
    //create hivecontext
    val sqlContext = new HiveContext(sc)
     
    sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '	' ")   //这里需要注意数据的间隔符
     
    sqlContext.sql("LOAD DATA INPATH '/user/spark/kv1.txt' INTO TABLE src  ");
     
    sqlContext.sql(" SELECT * FROM jn1").collect().foreach(println)
     
    sc.stop()

     3、下面列举一下出现的问题:

    (1)如果没有将hive-site.xml拷贝到spark/conf目录下,会出现:

    分析:从错误提示上面就知道,spark无法知道hive的元数据的位置,所以就无法实例化对应的client。

    解决的办法就是必须将hive-site.xml拷贝到spark/conf目录下

    (2)测试代码中没有加sc.stop会出现如下错误:

    ERROR scheduler.LiveListenerBus: Listener EventLoggingListener threw an exception
    java.lang.reflect.InvocationTargetException

    在代码最后一行添加sc.stop()解决了该问题。

    (3)由于自己的集群用的是hdp的版本,当在本地做测试的时候是把hive-site.xml文件直接拷贝到了项目当做,但是做本地运行的时候会报集群连接超时的错误,这是因为在配置文件中的配置项过去造成的,最后保留一些核心的配置项即可

    <property>     
      <name>hive.metastore.warehouse.dir</name>     
      <value>/apps/hive/warehouse</value>
    </property>       
    <property>     
      <name>hive.metastore.local</name>     
      <value>false</value>   
    </property>   
    <property>     
      <name>hive.metastore.uris</name>     
      <value>thrift://hdfs03.edcs.org:9083</value>
    </property>  
    </configuration>
  • 相关阅读:
    base64 c/c++实现
    分段,分页图 http://www.joenchen.com
    CPUID讲解
    密码HASH特点
    C++ 编译器的函数名修饰规则
    exploit已完成,但没有创建会话exploit completed, but no session was created
    获取批处理文件所在路径
    dos/bat批处理教程——第四部分:完整案例
    第三部分:批处理与变量
    第二部分:特殊的符号与批处理
  • 原文地址:https://www.cnblogs.com/itboys/p/7727575.html
Copyright © 2011-2022 走看看