转载自: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. 宝洁的Pvp

    1.公司宗旨(Purpose) 我们生产和提供更佳品质及价值的产品,以改善全球消费者的生活.作为回报,我们将会获得领先的市场销售地位和利润增长,从而令我们的员工.我们的股东以及我们的生活.工作所处的社 ...

  2. PHP开发框架--CodeIgniter(CI)使用总结

    在开发的时候框架是十分重要的,目前有很多框架,WPF中比较出名的MVVM等,这些都是用来组织开发文件的,就是把一个应用分开来写.下面总结一下CI框架的用法. CI框架是基于MVC的,分别是 1.Mod ...

  3. OC-字典

    1.所有的key都是一个字符串,键 值是成对出现的.且都不能为空,非要为空要使用NSnull.字典是通过key来存取值的,key valu必须成对出场 2.字典是有键-值的数据组合,通过key查找对于 ...

  4. 【jmeter】HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults

    Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...

  5. php 连接测试sphinx

    shpinx.php <?php header("Content-type:text/html;charset=utf-8"); include 'SphinxClient. ...

  6. php访问mysql工具类

    本文转载自:http://www.cnblogs.com/lida/archive/2011/02/18/1958211.html <?php class mysql { private $db ...

  7. Hadoop:使用原生python编写MapReduce

    功能实现 功能:统计文本文件中所有单词出现的频率功能. 下面是要统计的文本文件 [/root/hadooptest/input.txt] foo foo quux labs foo bar quux ...

  8. Linux命令之WC

    $ wc story.txt39 237 1901 story.txt● Use -l for only line count● Use -w for only word count● Use -c ...

  9. TX Textcontrol 使用总结一

    以下内容纯属个人使用感想,如有问题,还望讲解!!! 简介与使用感想: TX Text Control是一套功能丰富的文字处理控件,它以可重复使用控件的形式为开发人员提供了Word中常用的文字处理功能, ...

  10. RabbitMQ和Kafka

    转自通九大神的博客 起因 最近公司RabbitMQ的集群出了点问题,然后有些亲就说RabbitMQ慢且不好用,是一个瓶颈,不如换成Kafka.而我本人,使用RabbitMQ有一点久了,认为这个事情应当 ...