乐趣区

关于后端:锁屏面试题百日百刷Spark篇十五

锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题 app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还蕴含特色的解锁屏幕温习面试题、每日编程题目邮件推送等性能。让你在面试中后人一步! 接下来的是今日的面试题:

1.spark 怎么整合 hive?

1)将 hive 的配置文件 hive-site.xml 复制到 Spark conf 目录下

2)依据 hive 的配置参数 hive.metastore.uris 的状况,采纳不同的集成形式

a. jdbc 形式:hive.metastore.uris 没有给定配置值,为空 (默认状况),SparkSQL 通过 hive 配置的 javax.jdo.option.XXX 相干配置值间接连贯 metastore 数据库间接获取 hive 表元数据, 须要将连贯数据库的驱动增加到 Spark 利用的 classpath 中

b.metastore 服务形式:hive.metastore.uris 给定了具体的参数值,SparkSQL 通过连贯 hive 提供的 metastore 服务来获取 hive 表的元数据, 间接启动 hive 的 metastore 服务即可实现 SparkSQL 和 Hive 的集成:

3)应用 metastore 服务形式,对 hive-site.xml 进行配置

<property>

<name>hive.metastore.uris</name>

<value> trhift://mfg-hadoop:9083</value>

</property>

4)启动 hive service metastore 服务

bin/hive –service metastore &

5)启动 spark-sql 测试,执行 show databases 命令,查看是不是和 hive 的数据库一样的。

2.Spark 读取数据,是几个 Partition 呢?

从 2 方面介绍和答复,一是说下 partition 是什么,二是说下 partition 如何建的。

1)spark 中的 partion 是弹性分布式数据集 RDD 的最小单元,RDD 是由散布在各个节点上的 partion 组成的。partion 是指的 spark 在计算过程中,生成的数据在计算空间内最小单元,同一份数据(RDD)的 partion 大小不一,

数量不定,是依据 application 里的算子和最后读入的数据分块数量决定的,这也是为什么叫“弹性分布式”数据集的起因之一。Partition 不会依据文件的偏移量来截取的(比方有 3 个 Partition,1 个是头多少 M 的数据,1 个是两头多少 M 的数据,1 个是尾部多少 M 的数据),而是从一个原文件这个大的汇合里依据某种计算规定抽取合乎的数据来造成一个 Partition 的;

2)如何创立分区,有两种状况,创立 RDD 时和通过转换操作失去新 RDD 时。对于前者,在调用 textFile 和 parallelize 办法时候手动指定分区个数即可。例如 sc.parallelize(Array(1, 2, 3, 5, 6), 2) 指定创立失去的 RDD 分区个数为 2。如果没有指定,partition 数等于 block 数;对于后者,间接调用 repartition 办法即可。实际上分区的个数是依据转换操作对应多个 RDD 之间的依赖关系来确定,窄依赖子 RDD 由父 RDD 分区个数决定,例如 map 操作,父 RDD 和子 RDD 分区个数统一;Shuffle 依赖则由分区器(Partitioner)决定,例如 groupByKey(new HashPartitioner(2)) 或者间接 groupByKey(2) 失去的新 RDD 分区个数等于 2。

3.spark-submit 的时候如何引入内部 jar 包

办法一:spark-submit –jars

依据 spark 官网,在提交工作的时候指定–jars,用逗号离开。这样做的毛病是每次都要指定 jar 包,如果 jar 包少的话能够这么做,然而如果多的话会很麻烦。

命令:spark-submit –master yarn-client –jars .jar,.jar

办法二:extraClassPath

提交时在 spark-default 中设定参数,将所有须要的 jar 包考到一个文件里,而后在参数中指定该目录就能够了,较上一个不便很多:

spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/*

spark.driver.extraClassPath=/home/hadoop/wzq_workspace/lib/* 须要留神的是,你要在所有可能运行 spark 工作的机器上保障该目录存在,并且将 jar 包考到所有机器上。这样

做的益处是提交代码的时候不必再写一长串 jar 了,毛病是要把所有的 jar 包都拷一遍。

退出移动版