[关闭]
@zhangyy 2020-07-01T10:34:16.000000Z 字数 3983 阅读 127

hive on spark 性能调优

hive的部分


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

  1. thriftServer Beeline 连接 Hive
  2. 1.hive-site.xml复制到{SAPRK_HOME/conf}目录下;
  3.   <!--配置hiveserver2主机(这里最好是配置ip地址,以便于从Windows连接)-->
  4.     <property>
  5.       <name>hive.server2.thrift.bind.host</name>
  6.       <value>master</value>
  7.     </property>
  8.   <!--配置beeline远程客户端连接时的用户名和密码。这个用户名要在对应的hadoop的配置文件core-site.xml中也配置-->
  9.     <property>
  10.       <name>hive.server2.thrift.client.user</name>
  11.       <value>Alex_lei</value>
  12.     </property>
  13.     <property>
  14.       <name>hive.server2.thrift.client.password</name>
  15.       <value>123456</value>
  16.     </property>
  17. 2.开启hiveThriftServer服务
  18.   $>hiveserver2
  19. 3.在{SPARK_HOME/bin}目录下,执行beeline
  20.   $>beeline
  21.   Beeline version 1.2.1.spark2 by Apache Hive
  22.   beeline>
  23. 4.在{beeline>}光标处,添加!connect,如下:
  24.   beeline>!connect jdbc:hive2://master:10000/default
  25. 5.添加用户名:
  26.   beeline> !connect jdbc:hive2://master:10000/default
  27.   Connecting to jdbc:hive2://master:10000/default
  28.   Enter username for jdbc:hive2://master:10000/default:Alex_lei
  29. 6.添加密码:
  30.   beeline> !connect jdbc:hive2://master:10000/default
  31.   Connecting to jdbc:hive2://master:10000/default
  32.   Enter username for jdbc:hive2://master:10000/default: Alex_lei
  33.   Enter password for jdbc:hive2://master:10000/default: ******
  34. 7.成功连接!
  35.   beeline> !connect jdbc:hive2://master:10000/default
  36.   Connecting to jdbc:hive2://master:10000/default
  37.   Enter username for jdbc:hive2://master:10000/default: Alex_lei
  38.   Enter password for jdbc:hive2://master:10000/default: ******
  39.   18/09/07 12:51:11 INFO jdbc.Utils: Supplied authorities: master:10000
  40.   18/09/07 12:51:11 INFO jdbc.Utils: Resolved authority: master:10000
  41.   18/09/07 12:51:11 INFO jdbc.HiveConnection: Will try to open client transport with JDBC Uri: jdbc:hive2://master:10000/default
  42.   Connected to: Apache Hive (version 1.2.1)
  43.   Driver: Hive JDBC (version 1.2.1.spark2)
  44.   Transaction isolation: TRANSACTION_REPEATABLE_READ
  45.   0: jdbc:hive2://master:10000/default>
  46.   0: jdbc:hive2://master:10000/default>
  47.   0: jdbc:hive2://master:10000/default>
  48.   0: jdbc:hive2://master:10000/default> show databases;
  49. 8.退出
  50.   0: jdbc:hive2://master:10000/default> !quit
  51.   Closing: 0: jdbc:hive2://master:10000/default

  1. 问题:cannot access /home/hyxy/soft/spark/lib/spark-assembly-*.jar: No such file or directory
  2. 原因:我们开启Hive客户端找不到这个jar包,是由于saprk2.0之后没有lib这个目录了,这个jar包也不存在,spark2.0之前还是存在的。
  3. 解决方案:
  4.   1)修改spark版本(不建议)
  5.   2)修改{HIVE_HOME/bin}目录下的hive可执行脚本
  6.       修改【sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`】:
  7.         --> sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`
  8. ------
  1. CDH 上面 直接启用就可以就可以了

图片.png-86.2kB


  1. 常用设置参数:
  2. reset;
  3. set hive.execution.engine=spark;
  4. set hive.map.aggr = false;
  5. set hive.auto.convert.join = false;
  6. set hive.merge.mapfiles=true;
  7. set hive.merge.mapredfiles=true;
  8. set hive.merge.size.per.task=100000000;
  9. -- 动态分区参数
  10. SET hive.exec.dynamic.partition=TRUE;
  11. SET hive.exec.dynamic.partition.mode=nonstrict;
  12. SET hive.exec.max.dynamic.partitions=100000;
  13. SET hive.exec.max.dynamic.partitions.pernode=100000;
  14. -- 资源参数,根据任务调整
  15. -- spark引擎参数
  16. set spark.executor.cores=2;
  17. set spark.executor.memory=4G;
  18. set spark.executor.instances=10;

  1. ----------------------------------------------------
  2. 任务占用资源计算
  3. cores 核心数
  4. executor.memory :单个excutor分配内存
  5. executor.instances=10executor个数
  6. 任务占用总核心数:2 * 10 + 1 = 21 1driver占用的核数
  7. 占用总内存:2 * 4 * 10 = 40

  1. 内存调优
  2. 版本:2.1.2,其他的版本我暂时没有确认,2.0之前的与2.0之后的不一样。
  3.   1.先介绍几个名词:
  4.       --> Reserved Memory(预留内存)
  5.       --> User Memory(用户内存)
  6.       --> Spark Memory(包括Storage Memory Execution Memory
  7.       -->Spark内存默认为1G
  8.   2.
  9.   预留内存=300M,不可更改。
  10.   用户内存是1G=(1024M-300M)*0.25
  11.   spark Memory = 1024M-300M)*0.75
  12.   存储内存=Spark Memory*0.5
  13.   计算内存=Spark Memory*0.5
  14.   3.
  15.   作用:
  16.     预留内存:用于存储Spark相关定义的参数,如scsparksession等。
  17.     用户内存:用于存储用户级别相关定义的数据,如:参数或变量。
  18.     Spark内存:用于计算(Execution Memory)和cache缓存(Storage Memory)。
  19.   4.在分配executor内存,需考虑最小内存数为:450M
  20.     val minSystemMemory = (reservedMemory * 1.5).ceil.toLong
  21.   5.内存抢占问题
  22.      a.缓存数据大于执行数据(RDD):storage Memory强占Execution Memory
  23.      b.Execution Memory占优,storage Memory必须释放!!
  24.      Execution Memory优先级比较高
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注