准备

1、hadoop已部署(若没有可以参考:Centos7安装Hadoop2.7),集群情况如下(IP地址与之前文章有变动):

hostname IP地址 部署规划
node1 172.20.0.2 NameNode、DataNode
node2 172.20.0.3 DataNode
node3 172.20.0.4 DataNode

2、官网下载安装包:spark-2.4.4-bin-hadoop2.7.tgz(推荐去清华大学或中科大的开源镜像站)。

3、spark将部署在三台都已存在的路径/mydata,配置环境变量:

export SPARK_HOME=/mydata/spark-2.4.
export PATH=${SPARK_HOME}/bin:${SPARK_HOME}/sbin:$PATH

本地模式

在机器node1解压spark-2.4.4-bin-hadoop2.7.tgz到/mydata,并重命名文件夹为/mydata/spark-2.4.4。

跟hadoop文章保持一致,下面执行一个spark版的wordcount任务(Python版本):

shell> vim 1.txt  # 创建一个文件,写入一些内容
  hadoop hadoop
  hbase hbase hbase
  spark spark spark spark
shell> spark-submit $SPARK_HOME/examples/src/main/python/wordcount.py 1.txt  # 向spark提交wordcount任务,统计1.txt中的单词及其数量,结果如下
  spark: 4
  hbase: 3
  hadoop: 2

spark是一个计算引擎,查看文件wordcount.py可以看到实现同样的功能,其代码量远小于mapreduce,大大降低了大数据的开发难度。

Standalone模式

可以翻译成独立模式,由spark自带的集群来完成除了存储以外的工作;下面先在node1上进行配置:

spark的配置文件位于 $SPARK_HOME/conf:

从 spark-env.sh.template 拷贝一个 spark-env.sh

从 slaves.template 拷贝一个slaves

# 文件名 spark-env.sh
SPARK_MASTER_HOST=node1
SPARK_LOCAL_DIRS=/mydata/data/spark/scratch
SPARK_WORKER_DIR=/mydata/data/spark/work
SPARK_PID_DIR=/mydata/data/pid
SPARK_LOG_DIR=/mydata/logs/spark # 文件名 slaves
node1
node2
node3

由于 $SPARK_HOME/sbin 下的start-all.sh和stop-all.sh与hadoop冲突,建议进行重命名:

shell> mv start-all.sh spark-start-all.sh
shell> mv stop-all.sh spark-stop-all.sh

配置完成后将spark程序文件拷贝到其他两台:

shell> scp -qr /mydata/spark-2.4.4/ root@node2:/mydata/
shell> scp -qr /mydata/spark-2.4./ root@node3:/mydata/

然后在node1启动集群:

shell> spark-start-all.sh
node1上用jps命令验证进程 Master、Worker
node2上用jps命令验证进程 Worker
node3上用jps命令验证进程 Worker

可以通过浏览器访问 http://node1:8080/ :

下面把上一节的文件1.txt多复制一份为2.txt,然后都放到hdfs上,最后通过spark集群执行wordcount任务:

shell> cp 1.txt 2.txt
shell> hdfs dfs -mkdir /tmp/wc/
shell> hdfs dfs -put 1.txt 2.txt /tmp/wc/
shell> spark-submit --master spark://node1:7077 $SPARK_HOME/examples/src/main/python/wordcount.py hdfs://node1:9000/tmp/wc/*
shell> spark-submit --master spark://node1:7077 $SPARK_HOME/examples/src/main/python/pi.py 9  # 顺带测试一个计算圆周率的任务,最后的数字9表示分片(partitions)数量,输出结果类似这样:Pi is roughly 3.137564

在 http://node1:8080/ 上可以看到执行的任务:

Yarn模式

实际使用中,通常是让spark运行于已存在的集群,比如利用hadoop自带的yarn来进行资源调度。

spark on yarn不需要spark的集群,所以停掉它:

shell> spark-stop-all.sh

配置很简单,只需要有这个环境变量即可:

export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

不过,为了方便查看历史记录和日志,这里要配置 spark history server ,并且与hadoop的jobhistory联系起来:

进入目录 $SPARK_HOME/conf,从spark-defaults.conf.template拷贝一个spark-defaults.conf:

# 文件名 spark-defaults.conf
spark.eventLog.enabled       true
spark.eventLog.dir       hdfs://node1:9000/spark/history
spark.history.fs.logDirectory       hdfs://node1:9000/spark/history
spark.yarn.historyServer.allowTracking   true
spark.yarn.historyServer.address       node1:

进入目录 $HADOOP_HOME/etc/hadoop,在 yarn-site.xml 中添加一下内容:

# 文件名 yarn-site.xml
<property>
<name>yarn.log.server.url</name>
<value>http://node1:19888/jobhistory/logs/</value>
</property>

在hdfs创建必要的路径:

shell> hdfs dfs -mkdir -p /spark/history

将hadoop和spark的配置同步更新到其他所有节点(勿忘)。

下面在node1重启yarn,并且启动spark history server:

shell> stop-yarn.sh
shell> start-yarn.sh
shell> start-history-server.sh  # 启动后通过jps可以看到多出一个HistoryServer

执行下面的命令,通过yarn及cluster模式执行wordcount任务:

shell> spark-submit --master yarn --deploy-mode cluster $SPARK_HOME/examples/src/main/python/wordcount.py hdfs://node1:9000/tmp/wc/*

浏览器访问 http://node1:18080/ 可以看到spark的history:

点击 App ID 进入,然后定位到 Executors ,找到 Executor ID 为driver的,查看它的stdout或stderr:

即可看到日志和计算结果:

同样,可以通过yarn命令访问日志:

shell> yarn logs -applicationId [application id]

over

Centos7安装Spark2.4的更多相关文章

  1. CentOS7安装CDH 第十章:CDH中安装Spark2

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  2. CDH5.11安装spark2.x详细步骤

    简介: 在我的CDH5.11集群中,默认安装的spark是1.6版本,这里需要将其升级为spark2.x版本.经查阅官方文档,发现spark1.6和2.x是可以并行安装的,也就是说可以不用删除默认的1 ...

  3. CentOS7安装CDH 第十四章:CDH的优化

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  4. CentOS7安装CDH 第十三章:CDH资源池配置

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  5. CentOS7安装CDH 第十二章:YARN的资源调优

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  6. CentOS7安装CDH 第十一章:离线升级CDH版本

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  7. CentOS7安装CDH 第九章:CDH中安装Kafka

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  8. CentOS7安装CDH 第八章:CDH中对服务和机器的添加与删除操作

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  9. CentOS7安装CDH 第七章:CDH集群Hadoop的HA配置

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

随机推荐

  1. Eureka 基础知识

    Eureka 忽略元数据末尾 回到原数据开始处 Eureka是netflix公司研发并且开源的一个服务发现组件. Eureka架构图: Eureka组件包含注册中心(Eureka Server)和eu ...

  2. ubuntu查看软件安装位置

    ubuntu中的软件可通过图形界面的软件中心安装,也可以通过命令行apt-get install安装.但是安装后的软件在哪个位置呢?这点跟windows环境下安装软件的路径选择不一样.ubuntu中可 ...

  3. 使用adb命令对移动设备截图

    步骤: 1)   首先要进入CMD窗口,命令行模式,连接设备. 2)使用screencap 命令,对安卓设备的当前屏幕进行截屏,示例: adb shell screencap -p /sdcard/0 ...

  4. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现评论功能

    评论功能分析 上图可以看出评论功能主要实现了:评论的发布.评论列表的展示. 在不考虑子评论以及图片评论的场景下,评论功能主要有以下两个接口: 发布评论 获取评论列表(考虑分页) 评论 Model 的建 ...

  5. 科普帖:Linux操作系统

    使用计算机必然会接触操作系统,现代操作系统已经发展的十分成熟,一般用户都可以很轻松的使用计算机.然而,对于要利用计算机进行专业开发和应用的用户来说,需要更加深入地理解操作系统的原理和运行机制,这样才能 ...

  6. 五 查询数据SELECT   一、单表查询

    一 单表查询的语法 二 关键字的执行优先级 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 ...

  7. 华为 mate30 安装谷歌助手

    最近入手了 华为 mate30 pro, 作为一个8年的老果粉,在使用2天 mate30p 之后,给了耳目一新的感觉,不得不说这款手机真的很强大,各种优点我也不多说了,可以看网上各种专业的测评 但是手 ...

  8. 解决for循环中异步处理(异步变同步)

    前沿:参考ES6语法的async/await的处理机制 先上一段代码 function getMoney(){ var money=[100,200,300] for( let i=0; i<m ...

  9. PcAnywhere用法

    安装软件 配置被控端 点击"主机",点击"添加" 可以使用"现有的Windows账户",也可以创建新的"用户名和密码" ...

  10. JavaScript获得URL地址栏参数防乱码

    JavaScript获得URL地址栏参数防乱码 JavaScript中经常需要解析地址栏中拼接的参数.下面的代码基本是固定的代码,这里摘录下备用. //获得地址栏参数值 function getUrl ...