zoukankan      html  css  js  c++  java
  • Hive on Spark和Spark sql on Hive,你能分的清楚么

    摘要:结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序。

    本文分享自华为云社区《Hive on Spark和Spark sql on Hive有啥区别?》,作者:dayu_dls 。

    结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序。Hive和SparkSQL都不负责计算。Hive的默认执行引擎是mr,还可以运行在Spark和Tez。Spark可以连接多种数据源,然后使用SparkSQL来执行分布式计算。

    Hive On Spark 配置

    (1)首先安装包要选择对,否则就没有开始了。

    Hive版本:apache-hive-2.1.1-bin.tar

    spark版本:spark-1.6.3-bin-hadoop2.4-without-hive(不需要把Hive编译进去)

    (2)假设你已经安装好Hive(元数据为Derby)和spark,那么默认Hive走mr,需要修改以下配置让Hive走spark

    <property>
        <name>hive.execution.engine</name>
        <value>spark</value>
    </property>

    (3)配置环境变量及运行时参数

    在hive-site.xml中配置SPARK_HOME;

    在hive-site.xml或者或者spark-default.conf或者spark-env.conf配置spark运行时参数,也可以在Hive运行环境中设置临时参数:

    set spark.master=<Spark Master URL>
    set spark.eventLog.enabled=true;
    set spark.eventLog.dir=<Spark event log folder (must exist)>
    set spark.executor.memory=512m;            
    set spark.serializer=org.apache.spark.serializer.KryoSerializer;

    将编译好的Spark安装包中lib目录下的spark-assembly-*.jar包添加至HIVE_HOME/lib中

    (4)启动Hive

    /opt/hive/bin/hive --service metastore

    (5)启动Hive命令行窗口

    beeline -u jdbc:hive2://localhost:10000  或者  /opt/hive/bin/hive

    (6)开启你的Hive on spark之旅

    0: jdbc:hive2://localhost:10000> create table test (f1 string,f2 string) stored as orc;
    
    No rows affected (2.018 seconds)
    
    0: jdbc:hive2://localhost:10000> insert into test values(1,2);

    Spark sql on Hive

    (1)获取包

    Hive版本:apache-hive-2.1.1-bin.tar

    spark版本:spark-1.6.3-bin-hadoop2.4(需要把Hive编译进去)

    (2)在$SPARK_HOME/conf目录创建hive-site.xml文件,内容如下:

    <configuration>  
    <property>  
        <name>hive.metastore.uris</name>  
        <value>thrift://master1:9083</value>  
        <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>  
      </property>  
    </configuration>

    (3)如果你使用的元数据库是mysql,那么请把mysql驱动放到$SPARK_HOME/lib下,否则跳过。

    (4)启动Hive元数据服务,待spark运行时访问。

    (5)执行命令

    ./bin/spark-shell --master spark://master:7077
    scala> val hc = new org.apache.spark.sql.hive.HiveContext(sc);
    scala> hc.sql("show tables").collect.foreach(println)
    [sougou,false]
    [t1,false]

    Sparkthriftserver启用

    spark提供了spark-sql命令可以直接操作hive或impala,可以启用sparkthriftserver服务,然后利用beeline远程连接spark,利用spark sql。sparksql的诞生其实就是为了代替hsql。Sparksql的元数据也是使用hive的metastore进行管理,所以需要配置hive.metastore.uris参数。

    这里说下sparkthriftserver和hivethriftserver的区别,二者的端口一定要区分:

    hivethriftserver:hive服务端的服务,远程通过jdbc或者beeline连接,使用hsql操作hive。

    sparkthriftserver:spark的服务,远程通过jdbc或者beeline连接spark,使用spark sql操作hive。

    (1)在$SPARK_HOME/conf目录创建hive-site.xml文件,内容如下:

    <configuration>  
    <property>  
        <name>hive.metastore.uris</name>  
        <value>thrift://master1:9083</value>  
        <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>  
      </property>  
    <!--Thrift JDBC/ODBC server-->
       <property>
           <name>hive.server2.thrift.min.worker.threads</name>
           <value>5</value>
       </property>
       <property>
           <name>hive.server2.thrift.max.worker.threads</name>
           <value>500</value>
       </property>
       <property>
           <name>hive.server2.thrift.port</name>
           <value>10001</value>
       </property>
       <property>
           <name>hive.server2.thrift.bind.host</name>
           <value>master</value>
       </property>
    </configuration>  

    (2)启动sparkthriftserver

    ./start-thriftserver.sh --hiveconf hive.server2.thrift.port=10000 --master yarn --driver-class-path /data/spark-2.2.0-bin-hadoop2.7/jars/mysql-connector-java-5.1.43-bin.jar --executor-memory 5g --total-executor-cores 5
    启动sparkthriftserver后,后台默认会执行spark-sql命令,实际上是用spark-submit向yarn提交一个任务。这样就会在yarn的8088页面任务栏中起一个常驻任务,用来执行spark sql。

    (3)连接spark

    ./beeline -u jdbc:hive2://172.168.108.6:10001 -n root
    (4)这里的sql可以在8088页面看到执行过程。

     

    点击关注,第一时间了解华为云新鲜技术~

  • 相关阅读:
    synchronized的原理
    ThreadLocal是什么?使用场景有哪些?
    什么是死锁?死锁产生的原因?
    15-错误
    14-异常处理
    13-接口
    12-方法
    11-结构体
    10-指针
    09-字符串
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/15762804.html
Copyright © 2011-2022 走看看