专栏首页云上大数据EMR入门学习之通过SparkSQL操作示例(七)
原创

EMR入门学习之通过SparkSQL操作示例(七)

导语:Spark 为结构化数据处理引入了一个称为 Spark SQL 的编程模块。它提供了一个称为 DataFrame 的编程抽象,并且可以充当分布式 SQL 查询引擎。

一、使用SparkSQL交互式控制台操作hive

在使用 SparkSQL 之前请登录 EMR 集群的 Master 节点。登录 EMR 的方式请参考 登录 Linux 实例。这里我们可以选择使用 WebShell 登录。单击对应云服务器右侧的登录,进入登录界面,用户名默认为 root,密码为创建 EMR 时用户自己输入的密码。输入正确后,即可进入 EMR 命令行界面。

由于hive的超级用户是hadoop,所以 EMR 命令行先使用以下指令切换到 Hadoop 用户:

[root@172 ~]# su Hadoop

通过如下命令您可以进入 SparkSQL 的交互式控制台:

[hadoop@10~]$ spark-sql --master yarn --num-executors 64 --executor-memory 2g

其中 --master 表示您的 master URL,--num-executors 表示 executor 数量,--executor-memory 表示 executor 的储存容量。

下面介绍一些 SparkSQL 的基本操作。

新建一个数据库并查看:

 spark-sql> create database sparksql;
 Time taken: 0.907 seconds
 spark-sql> show databases;
 default
 sparksqltest
 Time taken: 0.131 seconds, Fetched 5 row(s)

在新建的数据库中新建一个表,并进行查看:

 spark-sql> use sparksql;
 Time taken: 0.076 seconds
 spark-sql> create table sparksql_test(a int,b string);
 Time taken: 0.374 second
 sspark-sql> show tables;
 sparksql_test   
 falseTime taken: 0.12 seconds, Fetched 1 row(s)

向表中插入两行数据并查看:

 spark-sql> insert into sparksql_test values (42,'hello'),(48,'world');
 Time taken: 2.641 seconds
 spark-sql> select * from sparksql_test;
 42    hello
 48    world
 Time taken: 0.503 seconds, Fetched 2 row(s)

二、创建Maven工程操作Hive

1、新建一个maven工程

2、添加如下pom依赖

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.2.0</version>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.2.0</version>
</dependency>

继续在pom添加打包和编译插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

3、新建一个demo进行测试

public static void main(String[] args){
    SparkSession spark = SparkSession
            .builder()
            .appName("Java Spark Hive Example")
            .enableHiveSupport()
            .getOrCreate();
    Dataset<Row> df = spark.read().json(args[0]);
    RDD<Row> test = df.rdd();
    test.saveAsTextFile(args[1]);
}

4、将工程进行编译打包

5、将jar包移动到集群的master节点

6、通过spark-submit提交任务

 [hadoop@10 /]$ spark-submit --class Demo --master yarn-client  tyyz-emr-1.0-SNAPSHOT.jar  /user/hadoop/people.json  /user/hadoop/result

7、结果如下:

 [hadoop@172 spark]$ hadoop fs -cat /user/hadoop/$output/part-00000
 [null,Michael]
 [30,Andy]
 [19,Justin]

附spark-submit参数提交详解:

命令行参数

Spark 属性

环境变量

描述

默认值

action

默认动作,提交任务

SUBMIT

--master

spark.master

spark 地址

--archives

归档文件列表,会被解压到每个executor的工作目录

--depoly-mode

spark.submit.deployMode

DELOY_MODE

在client (提交机侧)或者 cluster (在集群中) 上运行driver程序

client

--class

Java/Scala 程序的主类,main class

--files

spark.files

使用逗号分隔的每个executor运行时需要的文件列表, 逗号分隔

--jars

spark.jars

作业执行过程中使用到的其他jar,可以使用逗号分隔添加多个jar

--keytab

spark.yarn.keytab

包含keytab文件的全路径。

--kill

kill 指定的driver

--name

spark.app.name

程序名称

--packages

spark.jars.packages

从maven添加作业执行过程中使用到的包,查找顺序先本地仓库再远程仓库。可以添加多个,每个的格式为:groupId:artifactId:version

--exclude-packages

需要排除的包,可以为多个,使用逗号分隔。 避免与--packages 中的冲突

--respositories

远程仓库。可以添加多个,逗号分隔。

--properties-file

spark.yarn.principal

配置文件

conf/default.spark

--conf

其他额外的spark配置属性。

--py-files

使用逗号分隔的放置在python应用程序PYTHONPATH 上的.zip, .egg, .py的文件列表。

--status

--supervise

--total-executor-cores

spark.cores.max

--verbose

打印debug 信息

--version

打印当前Spark版本

--usage-error

--driver-class-path

spark.driver.extraClassPath

作用于driver的额外类路径,使用–jar时会自动添加路径。

--driver-library-path

spark.driver.extraLibraryPath

作用于driver的外部lib包

--driver-java-options

spark.driver.extraJavaOptions

作用于driver的额外java配置

--driver-memory

spark.driver.memory

SPAKR_DRIVER_MEMORY

driver程序所需内存量

--driver-cores

spark.driver.cores

SPARK_DRIVER_CORES

driver程序所需CORES数量

默认值1

--executor-cores

spark.executor.cores

exeutor 程序所需CORES数量

默认值1

--executor-memory

spark.executor.memory

executor 程序所需内存数量

--queue

设置提交到yarn的队列名称

默认值 default

--num-executors

spark.executor.instances

所需executors的数量

默认值2

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • EMR入门学习之使用Java连接Hive(十)

    Hive 中集成了 Thrift 服务。Thrift 是 Facebook 开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发。Hive 的 Hive...

    和大数据一起走过的路程
  • EMR入门学习之集群的监控与告警(四)

    登录【控制台】,选择【弹性MapReduce】进入左侧的【集群监控】,可以看到监控分为服务监控与主机监控

    和大数据一起走过的路程
  • EMR入门学习之HDFS上的一些常见Shell命令(五)

    文件系统(FS)shell包括各种类似shell的命令,这些命令直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统交互,例如本地FS...

    和大数据一起走过的路程
  • 手把手教你 Spark 性能调优

    0、背景 上周四接到反馈,集群部分 spark 任务执行很慢,且经常出错,参数改来改去怎么都无法优化其性能和解决频繁随机报错的问题。 看了下任务的历史运行情况,...

    用户1177713
  • Spark入门之WordCount

    我是攻城师
  • spark关键版本简要梳理

    好久没有看spark了,发现spark都开始发力AI了。简单梳理下spark的发展脉络如下:

    大数据和云计算技术
  • 部署spark2.2集群(standalone模式)

    修改/etc/hostname文件,将几台电脑的主机名分别修改为前面设定的master、slave0等;

    程序员欣宸
  • Spark教程(二)Spark连接MongoDB

    数据可能有各种格式,虽然常见的是HDFS,但是因为在Python爬虫中数据库用的比较多的是MongoDB,所以这里会重点说说如何用spark导入MongoDB中...

    小歪
  • Spark on yarn

    spark on yarn是spark集群模式之一,通过resourcemanager进行调度,较之standalone模式,不需要单独启动spark服务。

    阿dai学长
  • Spark学习入门(让人看了想吐的话题)

    Spark学习技巧

扫码关注云+社区

领取腾讯云代金券