zoukankan      html  css  js  c++  java
  • SparkSQL On Hive和spark的内存分配问题

    Spark On Hive

    1.SparkSQL集成Hive,需将hive-site.xml复制到{SAPRK_HOME/conf}目录下,即可!!
      a.将hive-site.xml复制到{SAPRK_HOME/conf}目录下;
      b.将hive-site.xml复制到所有Spark节点;
      c.将MySQL驱动包[mysql-connector-java-5.1.36-bin.jar]复制到{SPARK_HOME/jars};
      d.开启Hadoop;
        $>zKServer.sh start
        $>start-dfs.sh
        $>strat-yarn.sh
      e.开启sparkSQL
        $>spark-sql //默认开启“Local模式”
          等价于:spark-sql --master local
      f.如果在Standalone模式下:
        $>spark-sql --master spark://master:7077
       如果在Spark on yarn模式下:
        $>spark-sql --master yarn
      g.在spark-sql命令行中,编写HQL
        spark-sql>show databases;
        spark-sql>use hive;
        spark-sql>select * from student;

    thriftServer Beeline 连接 Hive

    1.将hive-site.xml复制到{SAPRK_HOME/conf}目录下;
      <!--配置hiveserver2主机(这里最好是配置ip地址,以便于从Windows连接)-->
        <property>
          <name>hive.server2.thrift.bind.host</name>
          <value>master</value>
        </property>
      <!--配置beeline远程客户端连接时的用户名和密码。这个用户名要在对应的hadoop的配置文件core-site.xml中也配置-->
        <property>
          <name>hive.server2.thrift.client.user</name>
          <value>Alex_lei</value>
        </property>
        <property>
          <name>hive.server2.thrift.client.password</name>
          <value>123456</value>
        </property>
    2.开启hive的ThriftServer服务
      $>hiveserver2
    3.在{SPARK_HOME/bin}目录下,执行beeline
      $>beeline
      Beeline version 1.2.1.spark2 by Apache Hive
      beeline>
    4.在{beeline>}光标处,添加!connect,如下:
      beeline>!connect jdbc:hive2://master:10000/default
    5.添加用户名:
      beeline> !connect jdbc:hive2://master:10000/default
      Connecting to jdbc:hive2://master:10000/default
      Enter username for jdbc:hive2://master:10000/default:Alex_lei
    6.添加密码:
      beeline> !connect jdbc:hive2://master:10000/default
      Connecting to jdbc:hive2://master:10000/default
      Enter username for jdbc:hive2://master:10000/default: Alex_lei
      Enter password for jdbc:hive2://master:10000/default: ******
    7.成功连接!
      beeline> !connect jdbc:hive2://master:10000/default
      Connecting to jdbc:hive2://master:10000/default
      Enter username for jdbc:hive2://master:10000/default: Alex_lei
      Enter password for jdbc:hive2://master:10000/default: ******
      18/09/07 12:51:11 INFO jdbc.Utils: Supplied authorities: master:10000
      18/09/07 12:51:11 INFO jdbc.Utils: Resolved authority: master:10000
      18/09/07 12:51:11 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://master:10000/default
      Connected to: Apache Hive (version 1.2.1)
      Driver: Hive JDBC (version 1.2.1.spark2)
      Transaction isolation: TRANSACTION_REPEATABLE_READ
      0: jdbc:hive2://master:10000/default>
      0: jdbc:hive2://master:10000/default>
      0: jdbc:hive2://master:10000/default>
      0: jdbc:hive2://master:10000/default> show databases;
    8.退出
      0: jdbc:hive2://master:10000/default> !quit
      Closing: 0: jdbc:hive2://master:10000/default

    问题:cannot access /home/hyxy/soft/spark/lib/spark-assembly-*.jar: No such file or directory

    原因:我们开启Hive客户端找不到这个jar包,是由于saprk2.0之后没有lib这个目录了,这个jar包也不存在,spark2.0之前还是存在的。

    解决方案

      (1)修改spark版本(不建议)

      (2)修改{HIVE_HOME/bin}目录下的hive可执行脚本

          修改【sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`】:

            --> 【sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`】

    Spark的内存分配问题

      版本:2.1.2,其他的版本我暂时没有确认,2.0之前的与2.0之后的不一样。

      1.先介绍几个名词:

          --> Reserved Memory(预留内存)

          --> User Memory(用户内存)

          --> Spark Memory(包括Storage Memory 和 Execution Memory)

          -->Spark内存默认为1G

      2.

      预留内存=300M,不可更改。

      用户内存是1G=(1024M-300M)*0.25

      spark Memory = (1024M-300M)*0.75

      存储内存=Spark Memory*0.5

      计算内存=Spark Memory*0.5

      3.

      作用:

        预留内存:用于存储Spark相关定义的参数,如sc,sparksession等。

        用户内存:用于存储用户级别相关定义的数据,如:参数或变量。

        Spark内存:用于计算(Execution Memory)和cache缓存(Storage Memory)。

      4.在分配executor内存,需考虑最小内存数为:450M

        val minSystemMemory = (reservedMemory * 1.5).ceil.toLong

      5.内存抢占问题

         a.缓存数据大于执行数据(RDD):storage Memory强占Execution Memory

         b.Execution Memory占优,storage Memory必须释放!!
         Execution Memory优先级比较高

  • 相关阅读:
    iOS Button选中与取消
    IOS-UIButton的文本与图片的布局
    iOS滑动tableView来改变导航栏的颜色
    Mac下Vim编辑快捷键小结
    iOS 比较版本号大小的方法
    Symbol
    call和apply的区别及用法
    关于高并发
    java.io.IOException: Stream closed 的问题
    通俗易懂的 Java 位操作运算讲解
  • 原文地址:https://www.cnblogs.com/lyr999736/p/10229653.html
Copyright © 2011-2022 走看看