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元数据服务

  • 相关阅读:
    前缀判断 蓝桥杯
    dedecms 网站内容静态化和动态化的切换
    dedecms 频道标签 channel.lib.php的分析
    JavaScript通过闭包解决只能取得包含函数中任何变量最后一个值的问题
    JavaScript闭包 取for循环i 【转】
    JavaScript装饰模式
    JavaScript闭包意义谈
    JavaScriptjs闭包测试
    JavaScript闭包的作用谈(转)
    Zend Engine 简介
  • 原文地址:https://www.cnblogs.com/rocky-AGE-24/p/7345417.html
Copyright © 2011-2022 走看看