转载自: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表的更多相关文章

  1. hive操作记录

    hive是依赖于hdfs和yarn的一个数据仓库 数据库和数据仓库的区别: 数据库在存储数据的同时,允许实时的增删改查等操作 数据仓库在存储数据的同时还执行着计算和分析数据的工作,但是并不能实时的进行 ...

  2. spark on yarn模式下配置spark-sql访问hive元数据

    spark on yarn模式下配置spark-sql访问hive元数据 目的:在spark on yarn模式下,执行spark-sql访问hive的元数据.并对比一下spark-sql 和hive ...

  3. Spark&Hive:如何使用scala开发spark访问hive作业,如何使用yarn resourcemanager。

    背景: 接到任务,需要在一个一天数据量在460亿条记录的hive表中,筛选出某些host为特定的值时才解析该条记录的http_content中的经纬度: 解析规则譬如: 需要解析host: api.m ...

  4. SparkSQL访问Hive源,MySQL源

    SparkSQL访问Hive源,MySQL源 一.SparkSQL访问Hive源 软件环境 SparkSQL命令行模式可以直接连接Hive的 Java程序SparkSQL连接Hive 二.SparkS ...

  5. Spark2.0集成Hive操作的相关配置与注意事项

    前言 已完成安装Apache Hive,具体安装步骤请参照,Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作 补充说明 Hive中metastore(元数据存储)的三种方式 ...

  6. jdbc调用sparksql on yarn

    spark sql访问hive表 1.将hive-site.xml拷贝到spark目录下conf文件夹 2.(非必需)将mysql的jar包引入到spark的classpath,方式有如下两种: 方式 ...

  7. 大数据技术之_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 对象的方法以及关 ...

  8. 【原】hive 操作笔记

    1.建表: hive> CREATE TABLE pokes (foo INT, bar STRING); hive> CREATE TABLE invites (foo INT, bar ...

  9. Hive 文件格式 & Hive操作(外部表、内部表、区、桶、视图、索引、join用法、内置操作符与函数、复合类型、用户自定义函数UDF、查询优化和权限控制)

    本博文的主要内容如下: Hive文件存储格式 Hive 操作之表操作:创建外.内部表 Hive操作之表操作:表查询 Hive操作之表操作:数据加载 Hive操作之表操作:插入单表.插入多表 Hive语 ...

随机推荐

  1. 在Eclipse中使用JUnit4进行单元测试

    在Eclipse中使用JUnit4进行单元测试(初级篇) 在Eclipse中使用JUnit4进行单元测试(中级篇) 在Eclipse中使用JUnit4进行单元测试(高级篇)

  2. win7 关于远程桌面登陆的方法,相应服务的启动

    转自:http://blog.csdn.net/ningfuxuan/article/details/7519476 远程登陆电脑,对远程电脑的设置 (1)首先要启动远程电脑中的Remote Desk ...

  3. 通用的业务编码规则设计实现[转:http://www.cnblogs.com/xqin/p/3708367.html]

    一.背景 每一个企业应用中不可避免的都会涉及到业务编码规则的问题,比如订单管理系统中的订单编号,比如商品管理系统中的商品编码,比如项目管理系统中的项目编码等等,这一系列的编码都需要管理起来,那么它们的 ...

  4. Debian 环境下安装Tomcat记录

    1.安装JAVA运行环境 Debian默认带了OpenJDK,有人说不好用,我没有验证就从ORACLE官网上下载了最新的JDK安装包,直接解压并设置环境变量就行了: # tar zxvf jdk-8u ...

  5. 【shell】变量

    shell变量可分为两类:局部变量和环境变量.局部变量只在创建它们的shell中可用.而环境变量则可以在创建它们的shell及其派生出来的任意子进程中使用.有些变量是用户创建的,其他的则是专用shel ...

  6. PHP header函数大全

    PHP header函数大全 header('Content-Type: text/html; charset=utf-8'); header('Location: http://www.php-no ...

  7. 通过[蜘蛛协议]Robots.txt禁止搜索引擎收录的方法

      什么是robots.txt文件? 搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息. 您可以在您的网站中创建一个纯文本文件robots.txt,在这个文件中 ...

  8. h264 流、帧结构

    H264元素的分层结构 H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素.句法元素被组织成有层次的结构,分别描述各个层次的信息. 在H.264 中,句法元素共被组织成  序列.图像.片 ...

  9. windows mobile 共享PC网络(win7)

    win7系统安装windows mobile,将设备插入底座后,设备并不能直接共享pc的网络直接上网.原来,当插入底座后,需要打开mobile设备中心,切换一下连接网络,或者打开此窗体后确定一下,即可 ...

  10. 【SQL Server】系统学习之三:逻辑查询处理阶段-六段式

    一.From阶段 针对连接说明: 1.笛卡尔积 2.on筛选器 插播:unknown=not unknuwn 缺失的值: 筛选器(on where having)把unknown当做FALSE处理,排 ...