SparkSQL On Yarn with Hive,操作和访问Hive表
转载自:http://lxw1234.com/archives/2015/08/466.htm
本文将介绍以yarn-cluster模式运行SparkSQL应用程序,访问和操作Hive中的表,这个和在Yarn上运行普通的Spark应用程序有所不同,重点是需要将Hive的依赖包以及配置文件传递到Driver和Executor上,因为在yarn-cluster模式下,Driver和Executor都是由Yarn和分配的。
下面的代码完成了以下功能:
1. 在Hive的数据库liuxiaowen中,创建目标表lxw1234;
2. 从已存在的源表lxw_cate_id插入数据到目标表lxw1234;
3. 统计目标表lxw1234的记录数;
4. 统计源表lxw_cate_id的记录数;
5. 打印目标表lxw1234的limit 5记录;
package com.lxw1234.sparksql;
import java.io.File
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql._
import org.apache.spark.sql.hive.HiveContext
/**
* lxw的大数据田地 -- lxw1234.com
*/
object SparkSQLHiveOnYarn {
def main(args: Array[String]) {
val sparkConf = new SparkConf().setAppName("SparkSQLHiveOnYarn")
val sc = new SparkContext(sparkConf)
val hiveContext = new HiveContext(sc)
import hiveContext.implicits._
import hiveContext.sql
//在数据库liuxiaowen中创建表 lxw1234
println("create table lxw1234 .. ")
sql("USE liuxiaowen")
sql("CREATE TABLE IF NOT EXISTS lxw1234 (cate STRING, cate_id INT) STORED AS TEXTFILE")
//从已存在的源表lxw_cate_id插入数据到目标表lxw1234
println("insert data into table lxw1234 .. ")
sql("INSERT OVERWRITE TABLE lxw1234 select cate,cate_id FROM lxw_cate_id")
//目标表lxw1234的记录数
println("Result of 'select count(1) from lxw1234': ")
val count = sql("SELECT COUNT(1) FROM lxw1234").collect().head.getLong(0)
println(s"lxw1234 COUNT(1): $count")
//源表lxw_cate_id的记录数
println("Result of 'select count(1) from lxw_cate_id': ")
val count2 = sql("SELECT COUNT(1) FROM lxw_cate_id").collect().head.getLong(0)
println(s"lxw_cate_id COUNT(1): $count2")
//目标表lxw1234的limit 5记录
println("Result of 'SELECT * from lxw1234 limit 10': ")
sql("SELECT * FROM lxw1234 limit 5").collect().foreach(println)
//sleep 10分钟,为了从WEB界面上看日志
Thread.sleep(600000)
sc.stop()
}
}
将上面的程序打包成sparksql.jar,并上传至Spark和Hadoop所在的客户端机器上。
运行下面的命令,使用spark-submit将该SparkSQL应用程序提交到Yarn上:
cd $SPARK_HOME/bin
./spark-submit \
--class com.lxw1234.sparksql.SparkSQLHiveOnYarn \
--master yarn-cluster \
--driver-memory 4G \
--driver-java-options "-XX:MaxPermSize=1G" \
--verbose \
--files $HIVE_HOME/conf/hive-site.xml \
--jars $HIVE_HOME/lib/mysql-connector-java-5.1.15-bin.jar,$SPARK_HOME/lib/datanucleus-api-jdo-3.2.6.jar,$SPARK_HOME/lib/datanucleus-core-3.2.10.jar,$SPARK_HOME/lib/datanucleus-rdbms-3.2.9.jar,$SPARK_HOME/lib/guava-12.0.1.jar \
/tmp/sparksql.jar
提交运行之后,在Yarn上可以看到该application:
点击logs,进入stdout,可以查看程序的标准输出:
从日志中看到,程序已经成功执行。
点击ApplicationMaster的WEB URL,进入SparkMaster的WEB界面:
可以看到,每句SQL是一个Job.
在Hive中查看表lxw1234的数据:
没问题,和日志中打印出来的一样。
说明一下上面使用spark-submit提交的命令:
–master yarn-cluster //指定以yarn-cluster模式运行,关于yarn-cluster和yarn-client的区别,在之前的文章中提到过
–driver-memory 4G //指定Driver使用的内存为4G,
//如果太小的话,会报错:Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread “Driver”
–driver-java-options “-XX:MaxPermSize=1G” //指定Driver程序JVM参数
–files $HIVE_HOME/conf/hive-site.xml //将Hive的配置文件添加到Driver和Executor的classpath中
–jars $HIVE_HOME/lib/mysql-connector-java-5.1.15-bin.jar,…. //将Hive依赖的jar包添加到Driver和Executor的classpath中
//需要依赖的jar包有:mysql-connector-java-5.1.15-bin.jar、datanucleus-api-jdo-3.2.6.jar、datanucleus-core-3.2.10.jar、datanucleus-rdbms-3.2.9.jar、guava-12.0.1.jar
另外还有一点要注意:由于Driver和Executor需要访问Hive的元数据库,而Driver和Executor被分配到哪台机器上是不固定的,所以需要授权,使集群上所有机器都有操作Hive元数据库的权限。
SparkSQL On Yarn with Hive,操作和访问Hive表的更多相关文章
- hive操作记录
hive是依赖于hdfs和yarn的一个数据仓库 数据库和数据仓库的区别: 数据库在存储数据的同时,允许实时的增删改查等操作 数据仓库在存储数据的同时还执行着计算和分析数据的工作,但是并不能实时的进行 ...
- spark on yarn模式下配置spark-sql访问hive元数据
spark on yarn模式下配置spark-sql访问hive元数据 目的:在spark on yarn模式下,执行spark-sql访问hive的元数据.并对比一下spark-sql 和hive ...
- Spark&Hive:如何使用scala开发spark访问hive作业,如何使用yarn resourcemanager。
背景: 接到任务,需要在一个一天数据量在460亿条记录的hive表中,筛选出某些host为特定的值时才解析该条记录的http_content中的经纬度: 解析规则譬如: 需要解析host: api.m ...
- SparkSQL访问Hive源,MySQL源
SparkSQL访问Hive源,MySQL源 一.SparkSQL访问Hive源 软件环境 SparkSQL命令行模式可以直接连接Hive的 Java程序SparkSQL连接Hive 二.SparkS ...
- Spark2.0集成Hive操作的相关配置与注意事项
前言 已完成安装Apache Hive,具体安装步骤请参照,Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作 补充说明 Hive中metastore(元数据存储)的三种方式 ...
- jdbc调用sparksql on yarn
spark sql访问hive表 1.将hive-site.xml拷贝到spark目录下conf文件夹 2.(非必需)将mysql的jar包引入到spark的classpath,方式有如下两种: 方式 ...
- 大数据技术之_11_HBase学习_02_HBase API 操作 + HBase 与 Hive 集成 + HBase 优化
第6章 HBase API 操作6.1 环境准备6.2 HBase API6.2.1 判断表是否存在6.2.2 抽取获取 Configuration.Connection.Admin 对象的方法以及关 ...
- 【原】hive 操作笔记
1.建表: hive> CREATE TABLE pokes (foo INT, bar STRING); hive> CREATE TABLE invites (foo INT, bar ...
- Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)
本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...
随机推荐
- struts2.0的工作原理
struts2并不是一个陌生的web框架,它是以Webwork的设计思想为核心,吸收struts1的优点,可以说 struts2是struts1和Webwork结合的产物. struts2 的工作原理 ...
- Mdrill:来自阿里的多维快速查询工具
mdrill是阿里妈妈-adhoc-海量数据多维自助即席查询平台下的一个子项目.旨在帮助用户在几秒到几十秒的时间内,分析百亿级别的任意维度组合的数据.mdrill是一个分布式的在线分析查询系统,基于h ...
- 08 Linux下MySQL的下载、安装及启动
测试环境 主机系统:Win7 64位 虚拟机:VMware® Workstation 11.1.0 虚拟机系统:CentOS 6.5 64位 Kernel 2.6.32-431.e16.x86_6 ...
- Windows 安装程序无法将 Windows 配置为在此计算机的硬件上运行
遇到这个问题是用辅助工具(WinNTSetup3.exe)进行的安装,重启后就就遇到“Windows 安装程序无法将 Windows 配置为在此计算机的硬件上运行” 解决:在WIN PE 下挂载安装光 ...
- 使用Maven Profile实现多环境构建
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次 ...
- DatagridView 最后编辑状态数据无法自动提交的问题
DataGridView1.CurrentCell = null 从一个帖子上看的,绝招! http://bbs.csdn.net/topics/120020614
- 关于mac mini组装普液晶显示器
申请了好久的mac mini,部门终于给买下来了.没想到,买回来之后的组装还是折腾了我们一把. 因为先前没用过mac mini,以为它和普通的台式机一样,买回来就能直接到显示器上用了.结果买回来ma ...
- jQuery插件:用于获取元素自身的HTML内容
jQuery.fn.outerHTML = function(s) { return (s) ? this.before(s).remove() : $("<Hill_man>& ...
- Maven错误在这里看【项目无法成功编译由于maven未成功下载依赖导致】
- 关于 ProcessEngines.getDefaultProcessEngine();NullPointException问题
查看ProcessEngines的源码发现默认加载的文件名为"activiti.cfg.xml" resources = classLoader.getResources(&quo ...