1、安装Spark 2、使用Spark Shell 读取本地文件 读取HDFS文件 编写wordcount程序 3、用Scala编写Spark应用程序 4、用Java编写Spark应用程序
Spark运行在Java 8 +,Python 2.7 + / 3.4 +和R 3.1+上。对于Scala API,Spark 2.4.2使用Scala 2.12。您需要使用兼容的Scala版本(2.12.x)。 请注意,自Spark 2.2.0起,对2.6.5之前的Java 7,Python 2.6和旧Hadoop版本的支持已被删除。自2.3.0起,对Scala 2.10的支持被删除。自Spark 2.4.1起,对Scala 2.11的支持已被弃用,将在Spark 3.0中删除。 https://spark.apache.org/docs/latest/index.html
https://www.scala-lang.org/download/
为保持统一,我们将安装的程序都放在/usr目录下,在/usr目录下创建Scala文件夹
tar -zxvf scala-2.12.8.tgz -C /opt/module mv scala-2.12.8 scala
使修改的内容立刻生效:
spark的安装和hadoop有些相近,添加环境变量,修改配置文件。
https://www.apache.org/dyn/closer.lua/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz
我的程序放置路径为: 解压、重命名
tar zxvf spark-2.4.2-bin-hadoop2.7.tgz
在/etc/profile中添加spark环境变量,如下: 修改立刻生效
配置文件在spark-2.4.2-bin-hadoop2.6/conf 文件夹下,因此进入文件配置
conf文件下只有spark-env.sh.template,因此我们copy一份 该文件中是一个模板文件里面有没有配置,我们再其中添加java,Scala,hadoop,spark的环境变量,以使其能够正常到运行,具体添加内容为:
export JAVA_HOME=/usr/java/jdk1.8.0_91 export SCALA_HOME=/usr/scala/scala-2.12.8 export SPARK_MASTER=192.168.56.112 export SPARK_WORKER_MEMORY=1g export HADOOP_HOME=/home/hadoop/package/hadoop-2.7.2/etc/hadoop
操作步骤同上, 添加以下内容:
至此所有安装都已完成,剩下的就是用同样的方法去配置另外的机器,由于其他机器是clone出来的,所以路径都一样,直接将 配置好的spark文件夹和/usr/scala 文件夹和环境变量文件/etc/profile,copy到其他机器即可。
进入到SPARK_HOME/sbin下运行start-all.sh /opt/module/spark/sbin/start-all.sh [注] 如果使用start-all.sh时候会重复启动hadoop配置,需要./在当前工作目录下执行命令 jps 观察进程 多出 worker 和 mater 两个进程。 查看spark的web控制页面:http://bigdata128:8080/ 显示spark的端口是7070
此模式用于interactive programming,先进入bin文件夹后运行:spark-shell SecureCRT 下 spark-shell 下scala> 命令行无法删除,解决办法: https://blog.csdn.net/nicolewjt/article/details/87368749
如果不出问题的话,此时你的spark集群已经成功启动,查看集群情况,
http://192.168.56.112:8080/ // ip换成你自己的master地址
会出现一下界面,
读取本地文件 显示第一行内容 读取HDFS文件 对上述hdfs根目录下f1.txt文件进行词频统计 查看结果
五、用Scala语言编写Spark独立应用程序 Spark2.1.0入门:第一个Spark应用程序:WordCount
Java实现Spark应用程序(Application) 我们实现的统计分析程序,有如下几个功能点: 从HDFS读取日志数据文件 将每行的第一个字段(IP地址)抽取出来 统计每个IP地址出现的次数 根据每个IP地址出现的次数进行一个降序排序 根据IP地址,调用GeoIP库获取IP所属国家 打印输出结果,每行的格式:[国家代码] IP地址 频率
下面,看我们使用Java实现的统计分析应用程序代码,如下所示: