锁屏面试题百日百刷,每个工作日保持更新面试题。锁屏面试题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包都拷一遍。