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優先級比較高


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM