介绍
Spark是一个用于大规模数据处理的开源分布式计算框架。它提供了高效的数据处理能力,可以在大规模集群上并行处理数据。Spark支持多种运行模式,其中之一是Local模式。
Spark Local模式是在单个计算机上运行Spark应用程序的一种模式。在这种模式下,Spark应用程序将在单个计算机的本地线程中执行,而不需要连接到分布式集群。这对于开发和调试Spark应用程序非常有用,因为它不需要设置和管理分布式环境。
在Local模式下,Spark应用程序可以使用本地计算机上的所有CPU和内存资源,但受限于单个计算机的资源限制。这意味着它适用于处理小规模数据集或进行快速原型开发,但不适用于处理大规模数据集或需要分布式计算的任务。
JDK安装
1. 将jdk安装包文件上传到 Linux 并解压缩,放置在自己需要的位置。
2. 解压好后修改/etc/profile文件
vi /etc/profile
#在文件最后加上JAVA的环境变量
export JAVA_HOME=解压后java的位置
export PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
#生效环境变量
source /etc/profile
#测试环境变量是否配置成功
java -version
出现java版本号则说明安装成功
Hadoop安装
1.上传hadoop安装包,解压
2.解压好后修改/etc/profile文件
root@master:~# vi /etc/profile
#在文件最后加上hadoop环境变量
export HADOOP_HOME=解压后hadoop的位置
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH:$HOME/bin
#生效环境变量
root@master:~# source /etc/profile
#查看版本号
root@master:~# hadoop version
Hadoop 2.7.4
Subversion https://shv@git-wip-us.apache.org/repos/asf/hadoop.git -r cd915e1e8d9d0131462a0b7301586c175728a282
Compiled by kshvachk on 2017-08-01T00:29Z
Compiled with protoc 2.5.0
From source with checksum 50b0468318b4ce9bd24dc467b7ce1148
This command was run using /data/root/env/environment/hadoop/share/hadoop/common/hadoop-common-2.7.4.jar
Spark安装
1.上传spark安装包,解压
2.进入spark目录输入bin/spark-shell
报错:Service 'sparkDriver' could not bind on a random free port. You may check whether configuring an appropriate binding address
解决:
查看本地hosts文件,将地址和名称修改为本地主机的地址和主机名字
root@master:~# vi /etc/hosts
警告:Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
这个是Spark在启动时输出的一条警告信息,它告诉你Spark的默认日志级别被设置为"WARN"。如果你想调整日志级别,可以使用sc.setLogLevel(newLevel)
来设置。对于SparkR,可以使用setLogLevel(newLevel)
来设置日志级别。 这个警告信息并不会影响Spark的正常运行,只是提醒你可以根据需要调整日志级别。
报错:WARN Utils:66 - Service 'SparkUI' could not bind on port 4040. Attempting port 4041.
这个报错通常是由于端口冲突导致的。SparkUI是Spark的Web界面,它默认绑定在4040端口。然而,如果该端口已经被其他进程占用,Spark就无法绑定到该端口上,因此会尝试使用下一个可用的端口(4041)。
原因有多种,比如之前已经打开了shell窗口,但是退出时候用的是ctrl+z挂起,之后要关闭窗口时可以使用ctrl+c中断。
解决方法:
#使用(lsof -i:端口号)来查看该端口下的进程
root@master:~# lsof -i:4041
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 30764 root 309u IPv6 201153 0t0 TCP *:4041 (LISTEN)
#使用(kill -9 进程id)来杀死进程
root@master:~# kill -9 30764
报错:WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
这个警告信息是因为Spark在启动时尝试加载本地Hadoop库,但是没有找到适合你的平台的库,所以使用了Java内置的类来代替。这个警告信息并不会影响Spark的正常运行,但是如果你需要使用Hadoop相关的功能,可能会遇到问题。
解决办法:
#在spark目录下进入conf文件夹
root@master:/data/root/env/environment/spark23# cd conf
#如果spark-env.sh文件不存在,只有spark-env.sh.template文件
#将spark-env.sh.template cp 并改名为spark-env.sh文件
#如果有spark-env.sh文件则跳过这步
root@master:/data/root/env/environment/spark23/conf# cp spark-env.sh.template spark-env.sh
#修改spark-env.sh文件,在文件最后加上
LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
启动spark-shell
在spark目录下输入bin/spark-shell启动spark
测试
1.准备好一个word文本,上传到spark目录下的data文件中
2.运行字符统计代码
sc.textFile("data/word.txt").flatMap(_.split("")).map((_,1)).reduceByKey(_+_).collect
3.结果