spark完全分布式集群搭建
最近学习Spark,因此想把相关内容记录下来,方便他人参考,也方便自己回忆吧
spark开发环境的介绍资料很多,大同小异,很多不能一次配置成功,我以自己的实际操作过程为准,详细记录下来。
1、基本运行环境
spark的运行需要java和scala的支持,因此首先需要配置java、scala运行环境,网上资料很多,也很简单
详细内容参见上一篇博客(http://blog.csdn.net/hit0803107/article/details/52794875)
我使用的是jdk1.8.0_91,scala-2.10.4,下载地址分别为
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
http://www.scala-lang.org/download/2.10.4.html
2、配置hadoop和spark
我是用的是hadoop2.6.0和spark-1.6.1-bin-hadoop2.6.tgz
下载地址分别是:
https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz
http://d3kbcqa49mib13.cloudfront.net/spark-2.0.1-bin-hadoop2.7.tgz
spark配置环境见上一篇博客(http://blog.csdn.net/hit0803107/article/details/52794875),hadoop配置方式相同
3、集群机器无密钥访问设置
因为集群机器需要能够互相访问,因此需要设置无密钥直连权限,可以通过配置公钥实现
我使用了三台机器,为了方便可以修改主机名,也可以直接使用ip,我这里修改了ip到主机名的映射
修改文件/etc/hosts(或者/etc/sysconfig/network),添加以下内容:
10.*.*.41 host_name_1 namenode
10.*.*.42 host_name_2 datanode
10.*.*.43 host_name_3 datanode
注意:主机名必须和hosts文件中的名称保持一致,主机名host_name_i可以自己定义!
首先确保机器安装了ssh,如果没有可以通过以下命令安装:
yum install -y openssh-server
然后生成密钥,如果已经生成过,可以跳过该步骤继续:
ssh-keygen -t rsa -P
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
ssh-copy-id host_name_2, ssh-copy-id host_name_3
将该台机器的公钥拷贝到要免密码登录的机器上,ssh host_name_2,可以测试是否成功
4、hadoop集群环境
我使用三台机器因此其中一台为namenode,两台datanode,每台机器添加host
网络资料大多是要创建hadoop账户配置,这里我并没有创建新的hadoop账户,而是在当前普通用户下配置的。
首先创建hadoop需要用到的目录:
mkdir /usr/local/hadoop/tmp
mkdir /usr/local/hadoop/dfs/name
mkdir /usr/lib/hadoop/dfs/data
我的hadoop放在/usr/local/目录下因此 接下来修改该目录下hadoop的配置文件,路径/usr/local/hadoop
一共需要配置四个文件分别是:
/usr/local/hadoop/etc/hadoop/core-site.xml
/usr/local/hadoop/etc/hadoop/hdfs-site.xml
/usr/local/hadoop/etc/hadoop/mapred-site.xml
/usr/local/hadoop/etc/hadoop/yarn-site.xml
core-site.xml内容如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://host_name_1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value> <!-- 这里目录可以自己指定-->
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
hdfs-site.xm内容如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/dfs/name</value><!-- 这里目录可以自己指定-->
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/lib/hadoop/dfs/data</value><!-- 这里目录可以自己指定-->
</property>
<property>
<name>dfs.nameservices</name>
<value>h1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>h1m1:50090</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml内容如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>host_name_1:50030</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>host_name_1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>host_name_1:19888</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>http://host_name_1:9001</value>
</property>
</configuration>
yarn-site.xml配置如下
<configuration>
<!-- Site specific YARN configurationproperties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>host_name_1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>host_name_1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>host_name_1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>host_name_1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>host_name_1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>host_name_1:8088</value>
</property>
</configuration>
将本机配置拷贝至其他机器
scp -r /usr/local/hadoop host_name_2
scp -r /usr/local/hadoop host_name_3
开始格式化hdfs:
hdfs namenode -format
启动hadoop
sbin/start-dfs.sh
启动yarn
sbin/start-yarn.sh
验证成功:输入 jps,显示如下表示启动成功!
23568 NodeManager
23315 ResourceManager
23828 Jps
22300 DataNode
22141 NameNode
host_name_2,host_name_3显示如下:
38832 DataNode
30499 Jps
39007 NodeManager
至此Hadoop集群搭建完毕
5、spark集群环境
之前spark基本运行环境已经配置好,这里需要配置集群运行环境
首先新建好spark用到的目录:
mkdir -p /opt/data/spark/local (递归创建)
mkdir -p /opt/data/spark/log
mkdir -p /opt/data/spark/work
添加目录读写权限
chmod -R 777 /opt/data/
然后配置spark-env.sh, spark-defaults.conf, conf/slaves(/usr/local/spark/conf/目录)三个文件
cp conf/spark-env.sh.template conf/spark-env.sh
spark-env.sh内容如下:
SPARK_LOCAL_IP=10.*.*.41 #本机ip或hostname
SPARK_LOCAL_DIRS=/opt/data/spark/local #配置spark的local目录
SPARK_MASTER_IP=10.*.*.41 #master节点ip或hostname
SPARK_MASTER_WEBUI_PORT=8080 #web页面端口
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4" #spark-shell启动使用核数
SPARK_WORKER_CORES=2 #Worker的cpu核数
SPARK_WORKER_MEMORY=8g #worker内存大小
SPARK_WORKER_DIR=/opt/data/spark/work #worker目录
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true
-Dspark.worker.cleanup.appDataTtl=604800" #worker自动清理及清理时间间隔
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080
-Dspark.history.retainedApplications=3 -
Dspark.history.fs.logDirectory=hdfs://10.*.*.41:9000/tmp/spark/applicationHistory"
#history server页面端口、备份数、log日志在HDFS的位置
SPARK_LOG_DIR=/opt/data/spark/log #配置Spark的log日志目录
export JAVA_HOME=/usr/local/jdk1.8.0_91/ #配置java路径
export SCALA_HOME=/usr/local/scala-2.10.4/ #配置scala路径
export SPARK_MASTER_IP=10.*.*.41
export SPARK_WORKER_MEMORY=10240m
export HADOOP_HOME=/home/lscm/hadoop/hadoop/lib/native #配置hadoop的lib路径
export HADOOP_CONF_DIR=/home/lscm/hadoop/hadoop/etc/hadoop/ #配置hadoop的配置路径
spark-defaults.conf内容如下
spark.eventLog.enabled true #eventLog是否生效(建议开启,可以对已完成的任务记录其详细日志)
spark.eventLog.compress true #eventLog是否启用压缩(cpu性能好的情况下建议开启,以减少内存等的占用)
spark.eventLog.dir hdfs://10.30.96.41:9000/tmp/spark/applicationHistory #eventLog的文件存放位置,与spark-env.sh中的history server配置位置一致,这两个位置必须手动创建 hadoop
fs -mkdir -p /tmp/spark/applicationHistory,否则spark启动失败
spark.broadcast.blockSize 8m #广播块大小
spark.executor.cores 1 #Executor的cpu核数
spark.executor.memory 512m #Executor的内存大小
spark.executor.heartbeatInterval 20s #Executor心跳交换时间间隔
spark.files.fetchTimeout 120s #文件抓取的timeout
spark.task.maxFailures 6 #作业最大失败次数(达到此次数后,该作业不再继续执行,运行失败)
spark.serializer org.apache.spark.serializer.KryoSerializer #设置序列化机制(默认使用java的序列化,但是速度很慢,建议使用Kryo)
spark.kryoserializer.buffer.max 256m #序列化缓冲大小
spark.akka.frameSize 128 #Akka调度帧大小
spark.default.parallelism 20 #默认并行数
spark.network.timeout 300s #最大网络延时
spark.speculation true #Spark推测机制(建议开启)
slaves配置
host_name_1
host_name_2
host_name_3
将整个spark目录分别拷贝至其他机器,在相应的主机创建对应的spark软链接,并将spark-env.sh中SPARK_LOCAL_IP改为对应的ip即可。
启动集群
start-all.sh //启动master和slaves
stop-all.sh //停止master和slaves
jps检查是否运行成功,如果master节点出现Master,worker节点出现Worker说明运行成功!
6、spark-submit提交作业
代码需要提交到spark运行,使用命令 spark-submit --master spark://master:7077 test.py
spark-submit 在默认情况下它会从Spark文件夹的conf/spark-defaults.conf读取参数
如果配置了spark.master, 你就可以不用在调用spark-submit脚本时设置--master参数
如果你不清楚配置项来自哪里,你可以使用--verbose打印详细的调试信息6、spark-submit提交作业
参考内容
1、http://baike.xsoftlab.net/view/295.html#1
2、http://blog.csdn.net/jianghuxiaojin/article/details/51036126
3、http://www.cnblogs.com/onetwo/p/5424377.html
4、http://www.linuxidc.com/Linux/2015-08/120947.htm
5、http://blog.csdn.net/kuanghongjiang/article/details/24476777
转自:http://blog.csdn.net/hit0803107/article/details/52795241
spark完全分布式集群搭建的更多相关文章
- Hadoop上路-01_Hadoop2.3.0的分布式集群搭建
一.配置虚拟机软件 下载地址:https://www.virtualbox.org/wiki/downloads 1.虚拟机软件设定 1)进入全集设定 2)常规设定 2.Linux安装配置 1)名称类 ...
- hadoop伪分布式集群搭建与安装(ubuntu系统)
1:Vmware虚拟软件里面安装好Ubuntu操作系统之后使用ifconfig命令查看一下ip; 2:使用Xsheel软件远程链接自己的虚拟机,方便操作.输入自己ubuntu操作系统的账号密码之后就链 ...
- Hadoop分布式集群搭建
layout: "post" title: "Hadoop分布式集群搭建" date: "2017-08-17 10:23" catalog ...
- hbase分布式集群搭建
hbase和hadoop一样也分为单机版.伪分布式版和完全分布式集群版本,这篇文件介绍如何搭建完全分布式集群环境搭建. hbase依赖于hadoop环境,搭建habase之前首先需要搭建好hadoop ...
- Spark高可用集群搭建
Spark高可用集群搭建 node1 node2 node3 1.node1修改spark-env.sh,注释掉hadoop(就不用开启Hadoop集群了),添加如下语句 export ...
- 分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建
一.hbase简介 HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java.它是Apache软件基金会的Hadoop项目的一部分,运行 ...
- kafka系列二:多节点分布式集群搭建
上一篇分享了单节点伪分布式集群搭建方法,本篇来分享一下多节点分布式集群搭建方法.多节点分布式集群结构如下图所示: 为了方便查阅,本篇将和上一篇一样从零开始一步一步进行集群搭建. 一.安装Jdk 具体安 ...
- MinIO 分布式集群搭建
MinIO 分布式集群搭建 分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务.由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障. Minio 分布式模式可 ...
- 阿里云ECS服务器部署HADOOP集群(二):HBase完全分布式集群搭建(使用外置ZooKeeper)
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建,多添加了一个 datanode 节点 . 1 节点环境介绍: 1.1 环境介绍: 服务器:三台阿里 ...
随机推荐
- iOS 动画整理
序列帧动画 曾经项目里的一段源码: 1234567891011121314 UIImageView * activityImageView = [[UIImageView alloc] init];N ...
- JS:body元素对象的clientWidth、offsetWidth、scrollWidth、clientLeft、offsetLeft、scrollLeft
document.body.clientWidth 获取body元素对象的内容可视区域的宽度,即clientWidth=width+padding,不包括滚动条. document.body.clie ...
- 中小型mysql数据库的备份与恢复
#转载请联系 备份到桌面 cd /home/chichung/Desktop # 切换到桌面 mysqldump -u root -p db_jingdong>jd.sql # 重定向写入 jd ...
- poj 1556(迪杰斯特拉+计算几何)
The Doors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7641 Accepted: 2987 Descrip ...
- C - 你经历过绝望吗?两次! 【地图型BFS+优先队列(障碍物)】
4月16日,日本熊本地区强震后,受灾严重的阿苏市一养猪场倒塌,幸运的是,猪圈里很多头猪依然坚强存活.当地15名消防员耗时一天解救围困的“猪坚强”.不过与在废墟中靠吃木炭饮雨水存活36天的中国汶川“猪坚 ...
- Linux命令之find(一)
find [-H] [-L] [-P] [-Olevel] [-D help| tree| search| stat| rates| opt| exec] [路径] [表达式] find是查找文件的命 ...
- 【离线】【递推】【multiset】 Codeforces Round #401 (Div. 2) C. Alyona and Spreadsheet
对询问按右端点排序,对每一列递推出包含当前行的单调不下降串最多向前延伸多少. 用multiset维护,取个最小值,看是否小于等于该询问的左端点. #include<cstdio> #inc ...
- 【数论】【筛法求素数】CODEVS 1462 素数和
好吧……我不会欧拉筛也就罢了…… 傻逼筛法竟然这么长时间以来 一直RE ……源头竟然是 int 爆了. #include<cstdio> #include<algorithm> ...
- WebService综述
一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...
- 【R笔记】R语言中的字符串处理函数
内容概览 尽管R是一门以数值向量和矩阵为核心的统计语言,但字符串同样极为重要.从医疗研究数据里的出生日期到文本挖掘的应用,字符串数据在R程序中使用的频率非常高.R语言提供了很多字符串操作函数,本文仅简 ...