大数据实战第十二课-SparkCore01

一、Spark概述
二、参数在spark源码中的体现

三、使用IDEA完成一个WordCount

一、Spark概述:

Spark基础篇-spark概述:
https://blog.csdn.net/zhikanjiani/article/details/97527838

学习Spark权威网站:
http://spark.apache.org
http://github.cpm/apache/spark
源码

Spark四大特点:

  • Speed(速度)
  • Ease of Use(易用性)
  • Generality(通用性)
  • RunsEverywhere(Hadoop, Apache Mesos, Kubernetes, standalone)

Spark下载的几种方式:

  1. 进入到如下网址:https://archive.apache.org/dist/spark/
  2. wget命令下载安装包:wget https://archive.apache.org/dist/spark/spark-2.4.2/spark-2.4.2.tgz
  3. 进入到github下spark的分支下下载:https://github.com/apache/spark --> release
  4. 使用git下载:git clone https://github.com/apache/spark.git
    通过查看分支命令,切换到自己需要的分支中去

自定义编译Spark:
这一句话是设置Maven的内存:
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
==> CCS及CodeCache详解结合jstat命令实践

自定义编译Spark源码命令详解:

./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phive -Phive-thriftserver -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0

解释:–name 指的是编译出来的包名
–tgz指的是编译出来后会打包
-Phadoop-2.6、-Dhadoop.version=2.6.0-cdh5.7.0 打的包支持集成Hadoop的相关服务
-Pyarn 打的包支持yarn
-Phive 打的包支持hive
-Phive-thriftserver 打的包支持hive相关服务

可以参考我的博客:
自定义编译spark-2.4.2-bin-2.6.0-cdh5.7.0

https://blog.csdn.net/zhikanjiani/article/details/90055200

2、参数在Spark源码中的体现

去到GitHub下查看spark源码:https://github.com/apache/spark

1)如下是根据此时spark版本编译提出的前置要求:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>				//Java版本               
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
    <maven.version>3.6.1</maven.version>				//maven版本
    <sbt.project.name>spark</sbt.project.name>
    <slf4j.version>1.7.16</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
    <hadoop.version>2.7.4</hadoop.version>			//Hadoop版本,如果生产商版本不是2.7.4;指定自己的版本。
    <protobuf.version>2.5.0</protobuf.version>
    <yarn.version>${hadoop.version}</yarn.version>					//HDFS版本和yarn的版本不一样?
    <zookeeper.version>3.4.6</zookeeper.version>
    <curator.version>2.7.1</curator.version>
    <hive.group>org.spark-project.hive</hive.group>

2、Specifying the Hadoop Version and Enable YARN(指定Hadoop版本并且启用YARN)

You can specify the exact version of hadoop to complete against through the hadoop.version property. 				
if unset,Spark will build against Hadoop 2.6.X by default.
You can enable the yarn profile and optionally set the yarn.version property 
if it is different from hadoop.version.

Examples:
#Apache Hadoop 2.6.X
./build/mvn -Pyarn -DskipTests clean package

#Apache Hadoop 2.7.X and later
./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -DskipTests clean package

你需要精确指定Hadoop的版本,指的是spark源码下pom.xml中下的hadoop.version
PK哥分享案例:Yarn版本不一定和hadoop版本一致

如下图:hadoop.version默认用的是2.7.4,yarn的版本默认使用的是hadoop版本;如果需要修改这些参数,在编译的时候使用-D参数进行传入。

注意:${hadoop.version} 在我们自己项目中pom.xml中设置版本号也是这么设置的.
在这里插入图片描述
在这里插入图片描述

3、Building With Hive and JDBC Support(编译来支持Hive及JDBC支持)

To enable Hive intergration for Spark SQL along with its JDBC server and CLI, add the -Phive and phive-thriftserver profiles to your existing build options.By default Spark will build with Hive 1.2.1 binfings.(默认情况无法使用Spark SQL来访问hive,需要开启hive的集成)。

代码如下:./build/mvn -Pyarn -Phive-thriftserver -DskipTests clean package

1、修改版本:dev/make-distribution.sh 文件

在编译过程中dev/make-distribution.sh文件下128~146行下编译时间非常慢,建议注释掉,再添加如下;不注释的话它会自己去找这几个目录,执行的很慢。

128~146行下的代码如下:
VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null\
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | tail -n 1)
SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | tail -n 1)
SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | tail -n 1)
SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
    | grep -v "INFO"\
    | grep -v "WARNING"\
    | fgrep --count "<id>hive</id>";\
    # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
    # because we use "set -o pipefail"
    echo -n)
    
注销后面如下图显示的128~146行后添加如下配置:
VERSION=2.4.2
SCALA_VERSION=2.11
SPARK_HADOOP_VERSION=2.6.0-cdh5.7.0
SPARK_HIVE=1

在154~158行中:spark-2.4.2-bin-2.6.0-cdh5.7.0;生成hadoop的名字就是下面这段代码中的"spark- V E R S I O N − b i n − VERSION-bin- VERSIONbinNAME.tgz"体现出来的。

if [ "$MAKE_TGZ" == "true" ]; then
  echo "Making spark-$VERSION-bin-$NAME.tgz"
else
  echo "Making distribution for Spark $VERSION in '$DISTDIR'..."
fi

在这里插入图片描述

2.2 Spark-shell启动后的目录解读
  • bin目录:存放脚本:spark-shell
  • sbin:启动服务
  • jars:存放jar包
  • conf:配置目录

整套Spark课程需要使用的命令:

  • spark-shell
  • spark-submit
  • beeline
  • spark-sql

Spark-shell --help ⇒ 查看命令帮助
./spark-shell直接进行启动;

1、修改日志级别:
拷贝一份:cp ~/conf/log4j.properties.template log4j.properties
修改:vi log4j.properties ==> 修改log4j.rootCategory = INFO,console 改为自己想要的日志级别

2、SparkContext(sc)
概念:是Spark应用程序的入口

3、WebUI在4040端口上面
spark-shell Application UI <== 名字

4、master = local[*]
master是用来设置spark应用程序以什么方式运行;local表示本地
扩展:spark://host:port Standalone
mesos://host:port Yarn
yarn Hadoop YARN
k8s://https://host:port k8s

5、local[*]的意思
*表示所有线程,一般local[2]就够了。

6、application id
对应在4040端口上的environment页面

7、spark session
暂时可以理解为一个大框

小结:spark-shell底层调用的是spark-submit

三、使用IDEA完成一个WordCount统计
  1. 在spark-shell中测试:

  2. 读入文件
    val file = sc.textFile(“file:///home/hadoop/data/ruozeinput.txt”)

  3. 每一个单词压扁:

file.flatMap(_.split("\t")).collect

  1. 为每一个单词赋上一个1
    file.flatMap(.split("\t")).map((,1)).collect

  2. 进行reduce操作,按照相同的key进行分发
    (a,1)(a,1) (a,1) (b,1) ==> (a,<1,1,1>)、(b,1)
    file.flatMap(.split("\t")),map(,1).reduceByKey(+).collect

需求:

对这个WordCount进行降序排列
sortby是按照key来排序的,但是目前次数位于value

第一步:

  • val result = file.flatMap(.split("\t")),map(,1).reduceByKey(+)

结果:

scala> result.collect
res15: Array[(String, Int)] = Array((hello,2), (world,2), (jepson,1), (ruoze,1))

第二步:

  • result.map( x =>(x._2,x._1)).sortByKey(false).map(x =>(x._2,x._1)).collect

结果:

scala> result.map(x =>(x._2,x._1)).sortByKey(false).map(x =>(x._2,x._1)).collect
res16: Array[(String, Int)] = Array((hello,2), (world,2), (jepson,1), (ruoze,1))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值