Spark-SQL与hive整合【版本spark1.6.0+hive0.14】--Standalone模式

在进行离线大数据处理工程中,使用hive进行运算出现了瓶颈,由于文件太大,集群的block块采用的是默认128M没有进行调整,而且集群规模比较小,只有4个节点,
机器配置:
2台32core,内存14.5G 
1台32core, 内存30.3G 
1台32core, 内存46.1
在进行分析过程中,有大量的left jion和group by  以及sum count HQL各种嵌套[主要是当初设计的不合理,下边的没有经验,按照普通的RDB来使用了],在使用hive分析过程中,文件特别大,会启动很多的mapper,因此需要申请大量的containers需要大量内存,由于内存不足常常导致nodeMannger自杀,(yarn调度配置采用的是默认配置){默认情况下,YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。由于Cgroups对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报OOM),而Java进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,可认为是正常现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制。}并且会报OOM,程序终止运行,查看了官网有一些建议,但是数据量大,集群小的先决条件,最终尝试Spark-Sql,由于它是基于RDD的,并且它的lineage容错机制,和基于内存+磁盘的高速计数特性,最终测试完全在意料之中,运行是相当的流畅。下边介绍下Spark-SQL与hive整合:
需要软件
* CentOS-6.6 (Final)
* JDK-1.7.0_25
* Maven-3.2.1
* Hadoop-2.2.0
* Spark-1.3.1
* Hive-0.12.0
* MySQL-Server-5.5.8
1、搭建hadoop集群见【http://blog.csdn.net/bbaiggey/article/category/6113763
2、下载spark1.6.0解压
1> 配置进环境变量
2> 修改conf/spark-env.sh增加 
export JAVA_HOME=/home/hadoop/sxp/jdk7
SPARK_MASTER_IP=pbshdp101
export HADOOP_HOME=/home/hadoop/sxp/hadoop-2.6.0
export SPARK_CLASSPATH="$SPARK_CLASSPATH:/home/hadoop/sxp/apache-hive-0.14.0-bin/lib/mysql-connector-java-5.0.5.jar"

3> cp hive-site.xml 、hdfs-site.xml、core-site.xml到conf目录
4> 修改slaves添加worker节点的主机名或ip地址
5> 配置master到worker的免密码登陆
6> 讲配置好的spark scp到其他worker节点上
7> 在主节点上启动start-all.sh
8> 在浏览器中访问 http://masterIP:8080
{spark-sql --master spark://masterIP101:7077 --driver-memory 2g --executor-memory 2g    ./start-all.sh --memory2g}
9> 要执行sql查询,在客户端启动  bin/spark-shell --master spark://masterIP:7077




你可能感兴趣的:(Spark-SQL与hive整合【版本spark1.6.0+hive0.14】--Standalone模式)