spark 集群搭建 详细步骤

最近好不容易搞到了三台测试机,可以用来搭建spark集群搞模型。本宝宝开心得不行,赶紧行动,把spark集群搭起来,模型跑起来。

1.搭建hadoop集群

hadoop的hdfs文件系统是整个生态圈的基础,因为数据量大了以后,数据一般就都放hdfs上头了。因为四台测试机之前已经搭建好了hadoop集群环境,而且经过本宝宝测试,hadoop集群也是可用的,所以就省了搭hadoop集群的功夫。

2.配置集群host

四台机器的hostname如下:
namenodetest01.hadoop.xxx.com 192.168.9.247
datanodetest01.hadoop.xxx.com 192.168.9.248
datanodetest02.hadoop.xxx.com 192.168.9.249
datanodetest03.hadoop.xxx.com 192.168.9.228

请确认在四台机器的/etc/hosts里都添加上相应节点的信息。

3.配置集群免密登录

因为之前搭好了hadoop环境,最开始我以为这几个节点的免密登录时配置好的,所以事先没有配置。后来等把spark布好启动以后,才发现提示让我输密码,很明显就是事先没配置好免密登录。
配置的方式也很简单,因为我打算让namenodetest01机器做master,cd到home目录下的.ssh,然后执行:

ssh-keygen -t rsa

此时会在.ssh目录下生成id_rsa跟id_rsa.pub,分别对应的为私钥与公钥。

接下来,将namenodetest01的公钥scp到另外三台机器上:

scp id_rsa.pub root@datanodetest01:~/.ssh
scp id_rsa.pub root@datanodetest02:~/.ssh
scp id_rsa.pub root@datanodetest03:~/.ssh

再分别登到01,02,03两台机器,将刚传过来的公钥添加到authorized_keys中:

[root@datanodetest02 .ssh]# pwd
/root/.ssh
cat id_rsa.pub >> authorized_keys

至此,master免密登录另外两个节点配置完毕。

4.安装jdk,确保jdk版本1.7以上

因为之前搭建好了hadoop环境,所以jdk已经配置好。
需要注意的是:spark需要jdk1.7及以上。有一个节点的spark配置好以后,最开始spark-shell无法启动,但是其他两个节点的spark-shell正常启动没有问题。后来发现无法启动那个节点的jdk被人配置为1.6。。。后来修改jdk为1.7以后即可正常启动 spark-shell。

5.安装scala

因为spark是scala开发,所以scala是需要配置的。去scala官网下载相应的scala包,比如我下载的是scala-2.11.8.tar,tar -zxvf 解压以后,生成scala-2.11.8目录。查看一下里面的结构

[root@datanodetest02 soft]# tree -L 1 scala-2.11.8
scala-2.11.8
├── bin
├── doc
├── lib
└── man

4 directories, 0 files

然后在/etc/profile里配置scala的环境变量:

export SCALA_HOME=/data/wanglei/soft/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH

保存退出,source一下配置文件让其立刻生效。然后再运行scala:

[root@datanodetest02 soft]# scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions for evaluation. Or try :help.

scala>

可见在02这个机器上scala已经成功配置好。其余两台机器也按照此过程安装配置即可。

6.开始布spark

因为我们打算用namenodetest01机器做master,所以先在namenode机器上配置spark。
先下载spark的gz包,我下载的是spark-1.6.0-bin-hadoop2.4.tgz,然后tar -zxvf解压。
看看里头有些什么

[root@namenodetest01 soft]# tree -L 1 spark-1.6.0-bin-hadoop2.4
spark-1.6.0-bin-hadoop2.4
├── bin
├── CHANGES.txt
├── conf
├── data
├── ec2
├── examples
├── lib
├── LICENSE
├── licenses
├── logs
├── NOTICE
├── python
├── R
├── README.md
├── RELEASE
├── sbin
└── work

然后cd到bin目录里,执行spark-shell脚本。如果能正常启动,说明在本机上没问题。如果不能正常启动,那就需要再排查其他原因。比如我前面提到的jdk版本问题。

7.对master进行相应的配置

cd到spark目录里的conf文件夹下。首先将spark-env.sh.template文件mv为spark-env.sh。然后添加配置项:

export JAVA_HOME=/usr/java/default/
export SCALA_HOME=/data/wanglei/soft/scala-2.11.8
export HADOOP_HOME=/usr/lib/hadoop

export STANDALONE_SPARK_MASTER_HOST=namenodetest01
export SPARK_MASTER_IP=$STANDALONE_SPARK_MASTER_HOST

### Let's run everything with JVM runtime, instead of Scala
export SPARK_LAUNCH_WITH_SCALA=0
export SPARK_LIBRARY_PATH=${SPARK_HOME}/lib
export SCALA_LIBRARY_PATH=${SPARK_HOME}/lib
export SPARK_MASTER_WEBUI_PORT=18080
#export SPARK_MASTER_PORT=7077
#export SPARK_WORKER_PORT=7078
#export SPARK_WORKER_WEBUI_PORT=18081
#export SPARK_WORKER_DIR=/var/run/spark/work
#export SPARK_LOG_DIR=/var/log/spark
#export SPARK_PID_DIR='/var/run/spark/'

if [ -n "$HADOOP_HOME" ]; then
  export SPARK_LIBRARY_PATH=$SPARK_LIBRARY_PATH:${HADOOP_HOME}/lib/native
fi

export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/etc/hadoop/conf}

需要注意的是SPARK_MASTER_WEBUI_PORT默认的端口是8080,实际中8080端口是最为常用的端口,很可能被其他应用所占用。所以我们将其改为18080。经过测试发现,即使8080端口被其他应用程序占用,我们将其配为8080端口后,spark-shell能够正常启用,但是看到的页面是其他应用程序的界面。

然后将slaves.template文件cp一份为slaves,在slaves里添加如下配置:

datanodetest01
datanodetest02
datanodetest03

很明显,这个就是我们的三个worker节点。

8.分发到其他三个节点

master配置完成以后,将spark的整个包内容scp到另外三个节点上,不需要修改任何配置项。
注意:因为按集群模式启动时,会按master上的路径去找spark。所以其他节点spark的路径需要跟master保持一致。
分发完成以后,去分别取另外三个节点执行spark-shell,看看能不能正常启动,以便提早发现问题。

9.启动spark集群

在master上,cd到spark里的sbin目录,执行start-all.sh脚本:

start-all.sh

然后看到shell输出如下:

starting org.apache.spark.deploy.master.Master, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.master.Master-1-datanodetest01.hadoop.xxx.com.out
datanodetest01: starting org.apache.spark.deploy.worker.Worker, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-datanodetest01.hadoop.xxx.com.out
datanodetest02: starting org.apache.spark.deploy.worker.Worker, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-datanodetest02.hadoop.xxx.com.out
datanodetest03: starting org.apache.spark.deploy.worker.Worker, logging to /data/wanglei/soft/spark-1.6.0-bin-hadoop2.4/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-datanodetest03.hadoop.xxx.com.out

很明显可以看出,集群显示启动了master,然后在启动了三个worker。

10.查看集群状态

spark集群的默认web管理页面端口为8080,url为http://master:8080
查看一下页面:
这里写图片描述

可以看出,集群有三个worker,而且现在都是处于正常工作状态。

11.运行第一个spark代码

在 ./examples/src/main 目录下有一些 Spark 的示例程序,有 Scala、Java、Python、R 等语言的版本。我们可以先运行一个示例程序 SparkPi(即计算 π 的近似值),执行如下命令:

./run-example SparkPi

然后会输出很多运行内容

[root@datanodetest02 bin]# ./run-example SparkPi
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
16/07/20 14:16:34 INFO SparkContext: Running Spark version 1.6.0
16/07/20 14:16:34 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/07/20 14:16:35 INFO SecurityManager: Changing view acls to: root
16/07/20 14:16:35 INFO SecurityManager: Changing modify acls to: root
16/07/20 14:16:35 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(root); users with modify permissions: Set(root)
16/07/20 14:16:35 INFO Utils: Successfully started service 'sparkDriver' on port 44304.
...

里面有一行输出为:

Pi is roughly 3.14374

这就把Pi的值给算出来了。

通过运行这个简单的测试代码,我们很容易就发现spark的优势:与MR相比,spark的速度快很多。MR即使最简单一个任务,从任务提交到分配资源到任务正式运行最后输出结果,都接近分钟级。大家看看spark的执行:

...
16/07/20 14:16:38 INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 1031 bytes result sent to driver
16/07/20 14:16:38 INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 1031 bytes result sent to driver
16/07/20 14:16:38 INFO TaskSetManager: Finished task 1.0 in stage 0.0 (TID 1) in 701 ms on localhost (1/2)
16/07/20 14:16:38 INFO TaskSetManager: Finished task 0.0 in stage 0.0 (TID 0) in 730 ms on localhost (2/2)
16/07/20 14:16:38 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool
16/07/20 14:16:38 INFO DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:36) finished in 0.744 s
16/07/20 14:16:38 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:36, took 1.009645 s
Pi is roughly 3.14374
...

12.关闭spark集群

如果要关闭spark集群,很简单。cd到spark目录下的sbin目录,然后执行stop-all.sh脚本即可。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

使用Fuel安装Openstack - 2016-07-22 18:07:11

Openstack自动化部署工具,主要用于生产环境. 一. 环境准备 这里用的是Openstack 9.0版本. Fuel Documentation 下载 Fuel for OpenStack镜像文件 , 用于安装Feul Master. 安装 Xshell , 用于远程连接. 二. 安装fuel_master节点 1. VirtualBox网络配置 管理-全局设定-网络-仅主机(Host-Only)网络 新建三张新的网卡: Host-Only Ethernet Adapter #1 IPv4: 10.
flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力 。 一、什么是Flume? flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume O

KafkaStreams介绍(二) - 2016-07-22 18:07:55

说明: 本文是Confluent Platform 3.0版本中对于Kafka Streams的翻译。 原文地址: https://docs.confluent.io/3.0.0/streams/index.html 看了很多其他人翻译的文档,还是第一次翻译,有什么翻译的不好的地方还请指出。   这是Kafka Streams介绍的第二篇,以前的介绍如下: http://blog.csdn.net/ransom0512/article/details/51971112   1.  快速入门 1.1.  目
2016年7月19日下午,笔者做客国泰君安通信研究团队”软银收购ARM“深度解读电话会议,与在线的150多位机构投资者分享了对于”软银收购ARM“的个人观点。 以下为电话会议实录,略经编辑以及后期补充部分观点。 主持人:各位同事朋友大家下午好,我是国泰君安通信行业分析师宋嘉吉,欢迎大家今天参加本次电话会议,此次会议的主题是软银收购ARM,7月18号软银宣布以243亿英镑收购半导体IP供应商ARM,是对未来物联网战略的提前卡位,我们认为这也是物联网行业布局芯片的又一重磅催化。今天大唐电信封了涨停,按照我们对
一、HBase伪分布式集群安装 1、安装包解压 $ cd app/ $ tar -xvfhbase-1.2.0-cdh5.7.1.tar.gz $ rmhbase-1.2.0-cdh5.7.1.tar.gz   2、添加环境变量 $ cd ~ $ vim .bashrc exportHBASE_HOME=/home/developer/app/hbase-1.2.0-cdh5.7.1 exportPATH=$PATH:$HBASE_HOME/bin $ source .bashrc   3、编辑hbase
本文将介绍Oracle集成云Agent的基础架构,所包含的组件,和如何连接云与OP应用。 目前/典型的集成方式 目前常用的将云应用/基于互联网的应用与企业内部部署(OP)应用连接的方式为:穿透一层或者更多的防火墙,使用反向代理、Oracle API Gateway或者OHS。要实现这些操作需要多种专业知识,比如防火墙需要开放入站端口,暴露一个私有的SOAP/REST服务并且配置网络路由。SOAP/REST服务可以用SOA套件之类的产品实现,比如与CRM系统进行通讯,实现客户信息的接收。如下图所示: 如果使
本次主要是详细记录Docker1.12在Ubuntu16.04上的安装过程,创建Docker组(避免每次敲命令都需要sudo),Docker常用的基本命令的总结,在容器中运行Hello world,以及创建一个基于Python Flask的web应用容器的全过程。 1.Docker1.12在Ubuntu16.04上安装 1.1.先决条件1,添加Docker源 wxl @wxl - pc: ~ $ sudo apt-get update 增加CA证书 wxl@wxl -pc :~$ sudo apt -ge
参考自: http://blog.csdn.net/jdplus/article/details/45920733 进行了大范围修改和完善 文件下载 CDH (Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。  Cloudera Manager则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的
Spark可以通过三种方式配置系统: 通过SparkConf对象, 或者Java系统属性配置Spark的应用参数 通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量 通过log4j.properties配置日志属性 Spark属性 Spark属性可以为每个应用分别进行配置,这些属性可以直接通过SparkConf设定,也可以通过set方法设定相关属性。 下面展示了在本地机使用两个线程并发执行的配置代码: val conf = new SparkConf() .setMaster(
云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上《云端基于Docker的微服务与持续交付实践》总结而出的。 本次主要讲了什么? Docker Swarm Docker Swarm mode 微服务支持(Docker集群架构体系) Docker的发展趋势和前沿成果 在Docker技术方面还是很佩服大牛的,所以赶紧写下笔记,追随大神的脚步。 阿里云资深专家易立,技术就不说了,他比其他直播间硬生生多讲了半个多点,于情于理还是万分感谢本次分享的(可惜devOps没时间讲了