zoukankan      html  css  js  c++  java
  • sparksql 操作hive

    写在前面:hive的版本是1.2.1spark的版本是1.6.x

    http://spark.apache.org/docs/1.6.1/sql-programming-guide.html#hive-tables 查看hive和spark版本对应情况

    SparkSQL操作Hive中的表数据
    spark可以通过读取hive的元数据来兼容hive,读取hive的表数据,然后在spark引擎中进行sql统计分析,从而,通过sparksql与hive结合实现数据分析将成为一种最佳实践。详细实现步骤如下:

    1、启动hive的元数据服务
    hive可以通过服务的形式对外提供元数据读写操作,通过简单的配置即可
        编辑 $HIVE_HOME/conf/hive-site.xml,增加如下内容:
    <property>
    <name>hive.metastore.uris</name>
    <value>thrift:// hdp-node-01:9083</value>
    </property>

        启动hive metastore
    [hadoop@hdp-node-01 ~]${HIVE_HOME}/bin/hive --service metastore  1>/dev/null  2>&1  &

        查看 metastore:
    [hadoop@hdp-node-01 ~] jobs
    [1]+ Running hive --service metastore &


    2、spark配置
        将hive的配置文件拷贝给spark
    将 $HIVE_HOME/conf/hive-site.xml copy $SPARK_HOME/conf/

        将mysql的jdbc驱动包拷贝给spark
    将 $HIVE_HOME/lib/mysql-connector-java-5.1.12.jar copy或者软链到$SPARK_HOME/lib/

    3、启动spark-sql的shell交互界面
    spark-sql已经集成在spark-shell中,因此,只要启动spark-shell,就可以使用spakr-sql的shell交互接口:
    [hadoop@hdp-node-01 spark] bin/spark-shell --master spark://hdp-node-01:7077

     
    或者,可以启动spark-sql界面,使用起来更方便
    [hadoop@hdp-node-01 spark] bin/spark-sql --master spark://hdp-node-01:7077

    就可以使用hivesql了
    由于在console中会打印很多info级别日志,所以可以改变spark的日志级别

    4、在交互界面输入sql进行查询
    注:以下所用到的库和表,都是已经在hive中存在的库和表

        如果在spark-shell中执行sql查询,使用sqlContext对象调用sql()方法
    scala> sqlContext.sql("select remote_addr from dw_weblog.t_ods_detail group by remote_addr").collect.foreach(println)

        如果是在spark-sql中执行sql查询,则可以直接输入sql语句
    scala> show databases
    scala> use dw_weblog
    scala> select remote_addr from dw_weblog.t_ods_detail group by remote_addr



    5、在IDEA中编写代码使用hive-sql
    如下所示:
    val hiveContext = new HiveContext(sc)
        import hiveContext.implicits._
        import hiveContext.sql
        //指定库
    sql("use dw_weblog")
    //执行标准sql语句
    sql("create table sparksql as select remote_addr,count(*) from t_ods_detail group by remote_addr")
    ……
    综上所述,sparksql类似于hive,可以支持sql语法来对海量数据进行分析查询,跟hive不同的是,hive执行sql任务的底层运算引擎采用mapreduce运算框架,而sparksql执行sql任务的运算引擎是spark core,从而充分利用spark内存计算及DAG模型的优势,大幅提升海量数据的分析查询速度
    源码

     最后:

    sparksql 如果连接报错可能的原因是hive元数据库的编码不是utf8的,

    alter database hive character set latin1;
    ALTER TABLE hive.* DEFAULT CHARACTER SET latin1;

    sparksql 执行创建表的时候报错

    org.apache.spark.sql.execution.QueryExecutionException: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:file:/user/hive/warehouse/student2 is not a directory or unable to create one)

    可能是没有启动hive元数据服务

  • 相关阅读:
    Java Web 网络留言板2 JDBC数据源 (连接池技术)
    Java Web 网络留言板3 CommonsDbUtils
    Java Web ConnectionPool (连接池技术)
    Java Web 网络留言板
    Java Web JDBC数据源
    Java Web CommonsUtils (数据库连接方法)
    Servlet 起源
    Hibernate EntityManager
    Hibernate Annotation (Hibernate 注解)
    wpf控件设计时支持(1)
  • 原文地址:https://www.cnblogs.com/rocky-AGE-24/p/7345417.html
Copyright © 2011-2022 走看看