Hadoop2.7.3+Spark2.1.0+Scala2.12.2+jdk1.8 完全分布式环境 搭建全过程
已有:Hadoop2.7.3、Zookper、Jdk1.8
所需搭建:Spark、Kafka、Scala
安装步骤如下:(所有集群节点)
#下载scala安装包:
#安装rpm包:
rpm -ivh scala-2.12.2.rpm
#增加SCALA_HOME
vim /etc/profile
#增加如下内容;
#Scala Home
export SCALA_HOME=/usr/share/scala
#刷新配置
source /etc/profile
下载包:hadoop-2.7.3.tar.gz
(1)/etc/profile:
#hadoop enviroment
export HADOOP_HOME=/opt/hadoop-2.7.3/
export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
#Hadoop JDK
(2)$HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_112/
(3)$HADOOP_HOME/etc/hadoop/slaves
Hadoop1(主机名)
Hadoop2(主机名)
Hadoop3(主机名)
Hadoop4 (主机名)
**slaves文件里面记录的是集群里所有DataNode的主机名
(4)$HADOOP_HOME/etc/hadoop/core-site.xml
参数说明:
参数名 |
值 |
作用描述 |
fs.default.name |
hdfs://hadoopmaster:9000 |
定义HadoopMaster的URI和端口 |
fs.checkpoint.dir |
/opt/data/hadoop1/hdfs/namesecondary1 |
定义hadoop的name备份的路径,官方文档说是读取这个,写入dfs.name.dir |
fs.checkpoint.period |
1800 |
定义name备份的备份间隔时间,秒为单位,只对snn生效,默认一小时 |
fs.checkpoint.size |
33554432 |
以日志大小间隔做备份间隔,只对snn生效,默认64M |
io.compression.codecs |
org.apache.hadoop.io.compress.DefaultCodec, |
Hadoop所使用的编解码器,gzip和bzip2为自带,lzo需安装hadoopgpl或者kevinweil,逗号分隔,snappy也需要单独安装 |
io.compression.codec.lzo.class |
com.hadoop.compression.lzo.LzoCodec |
LZO所使用的压缩编码器 |
topology.script.file.name |
/hadoop/bin/RackAware.py |
机架感知脚本位置 |
topology.script.number.args |
1000 |
机架感知脚本管理的主机数,IP地址 |
fs.trash.interval |
10800 |
HDFS垃圾箱设置,可以恢复误删除,分钟数,0为禁用,添加该项无需重启hadoop |
hadoop.http.filter.initializers |
org.apache.hadoop.security. |
需要jobtracker,tasktracker |
hadoop.http.authentication.type |
simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME# |
验证方式,默认为简单,也可自己定义class,需配置所有节点 |
hadoop.http.authentication.type |
simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME# |
验证方式,默认为简单,也可自己定义class,需配置所有节点 |
hadoop.http.authentication. |
36000 |
验证令牌的有效时间,需配置所有节点 |
hadoop.http.authentication. |
默认可不写参数 |
默认不写在hadoop启动时自动生成私密签名,需配置所有节点 |
hadoop.http.authentication.cookie.domain |
domian.tld |
http验证所使用的cookie的域名,IP地址访问则该项无效,必须给所有节点都配置域名才可以。 |
hadoop.http.authentication. |
true | false |
简单验证专用,默认允许匿名访问,true |
hadoop.http.authentication. |
HTTP/localhost@$LOCALHOST |
Kerberos验证专用,参加认证的实体机必须使用HTTP作为K的Name |
hadoop.http.authentication. |
/home/xianglei/hadoop.keytab |
Kerberos验证专用,密钥文件存放位置 |
hadoop.security.authorization |
true|false |
用作序列化文件处理时读写buffer的大小 |
io.file.buffer.size |
131072 |
用作序列化文件处理时读写buffer的大小 |
hadoop.security.authentication |
simple | kerberos |
hadoop本身的权限验证,非http访问,simple或者kerbero |
hadoop.logfile.size |
1000000000 |
设置日志文件大小,超过则滚动新日志 |
hadoop.logfile.count |
20 |
最大日志数 |
io.bytes.per.checksum |
1024 |
每校验码所校验的字节数,不要大于io.file.buffer.size |
io.skip.checksum.errors |
true | false |
处理序列化文件时跳过校验码错误,不抛异常。默认false |
o.serializations |
org.apache.hadoop.io. (排版需要。实际配置不要回车) |
序列化的编解码器 |
io.seqfile.compress.blocksize |
1024000 |
块压缩的序列化文件的最小块大小,字节 |
webinterface.private.actions |
true | false |
设为true,则JT和NN的tracker网页会出现杀任务删文件等操作连接,默认是false |
|
(5)$HADOOP_HOME/etc/hadoop/hdfs-site.xml
|
参数说明:
参数名 |
值 |
作用描述 |
dfs.default.chunk.view.size |
32768 |
namenode的http访问页面中针对每个文件的内容显示大小,通常无需设置。
|
dfs.datanode.du.reserved |
1073741824 |
每块磁盘所保留的空间大小,需要设置一些,主要是给非hdfs文件使用,默认是不保留,0字节 |
dfs.name.dir |
/opt/data1/hdfs/name, |
NN所使用的元数据保存,一般建议在nfs上保留一份,作为1.0的HA方案使用,也可以在一台服务器的多块硬盘上使用 |
dfs.web.ugi |
nobody,nobody |
NN,JT等所使用的web tracker页面服务器所使用的用户和组 |
dfs.permissions |
true | fals |
dfs权限是否打开,我一般设置false,通过开发工具培训别人界面操作避免误操作,设置为true有时候会遇到数据因为权限访问不了。 |
dfs.permissions.supergroup |
supergroup |
设置hdfs超级权限的组,默认是supergroup,启动hadoop所使用的用户通常是superuser。 |
dfs.data.dir |
/opt/data1/hdfs/data, |
真正的datanode数据保存路径,可以写多块硬盘,逗号分隔 |
dfs.datanode.data.dir.perm |
755 |
datanode所使用的本地文件夹的路径权限,默认755 |
dfs.replication |
|
hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6 |
dfs.replication.max |
|
有时dn临时故障恢复后会导致数据超过默认备份数。复制份数的最多数,通常没什么用,不用写配置文件里。 |
dfs.replication.min |
1 |
最小份数,作用同上。 |
dfs.block.size |
134217728 |
每个文件块的大小,我们用128M,默认是64M。这个计算需要128*1024^2,我碰上过有人直接写128000000,十分浪漫。 |
dfs.df.interval |
|
磁盘用量统计自动刷新时间,单位是毫秒。 |
dfs.client.block.write.retries |
|
数据块写入的最多重试次数,在此次数之前不会捕获失败。 |
dfs.heartbeat.interva |
3 |
DN的心跳检测时间间隔。秒 |
dfs.namenode.handler.count |
10 |
NN启动后展开的线程数。 |
dfs.balance.bandwidthPerSec |
1048576 |
做balance时所使用的每秒最大带宽,使用字节作为单位,而不是bit |
dfs.hosts |
/opt/hadoop/conf/hosts.allow |
一个主机名列表文件,这里的主机是允许连接NN的,必须写绝对路径,文件内容为空则认为全都可以。 |
dfs.hosts.exclude |
/opt/hadoop/conf/hosts.deny |
基本原理同上,只不过这里放的是禁止访问NN的主机名称列表。这在从集群中摘除DN会比较有用。 |
dfs.max.objects |
0 |
dfs最大并发对象数,HDFS中的文件,目录块都会被认为是一个对象。0表示不限制 |
dfs.replication.interval |
3 |
N计算复制块的内部间隔时间,通常不需写入配置文件。默认就好 |
dfs.support.append |
true | false |
新的hadoop支持了文件的APPEND操作,这个就是控制是否允许文件APPEND的,但是默认是false,理由是追加还有bug。 |
dfs.datanode.failed.volumes.tolerated |
0 |
能够导致DN挂掉的坏硬盘最大数,默认0就是只要有1个硬盘坏了,DN就会shutdown。 |
dfs.secondary.http.address |
0.0.0.0:50090 |
SNN的tracker页面监听地址和端口 |
dfs.datanode.address |
0.0.0.0:50010 |
DN的服务监听端口,端口为0的话会随机监听端口,通过心跳通知NN |
dfs.datanode.http.address |
0.0.0.0:50075 |
DN的tracker页面监听地址和端口 |
dfs.datanode.ipc.address |
0.0.0.0:50020 |
DN的IPC监听端口,写0的话监听在随机端口通过心跳传输给NN |
dfs.datanode.handler.count |
3 |
DN启动的服务线程数 |
dfs.http.address |
0.0.0.0:50070 |
NN的tracker页面监听地址和端口 |
dfs.https.enable |
true | false |
NN的tracker是否监听在HTTPS协议,默认false |
dfs.datanode.https.address |
0.0.0.0:50475 |
DN的HTTPS的tracker页面监听地址和端口 |
dfs.https.address |
0.0.0.0:50470 |
NN的HTTPS的tracker页面监听地址和端口 |
dfs.datanode.max.xcievers |
2048 |
相当于linux下的打开文件最大数量,文档中无此参数,当出现DataXceiver报错的时候,需要调大。默认256 |
(6)$HADOOP_HOME/etc/hadoop/mapred-site.xml
|
可以在mapred-site.xml中设置下面的参数来影响公平调度器的行为:
参数 |
说明 |
mapred.fairscheduler.allocation.file |
指定一个XML文件的绝对路径,该文件包含了每个资源池的最小共享资源、每资源池和每用户的并发运行作业数和抢占超时时间。如果没有设置这个属性,这些特性将不会被使用。配额文件格式在稍后描述 |
mapred.fairscheduler.preemption |
是否启用抢占的布尔值属性。默认是false。 |
mapred.fairscheduler.poolnameproperty |
指定用哪个作业配置属性来决定作业的归属资源池。字符串格式,默认:user.name(即是每个用户一个资源池)。另一个有用的值是group.name,即每个Unix群组一个资源池。一个常用的设定是使用非标准的属性如pool.name作为资源池的名字属性,然后通过添加下面的设定来使user.name成为默认:
这样你就可以对某些作业显式的通过作业配置属性来指定资源池的名字(比如,在有默认用户资源池的情况下,传递 -Dpool.name= |
mapred.fairscheduler.sizebasedweight |
在计算作业的公平共享权重时考虑作业大小。默认情况下,权重只基于作业的优先权。设置这个标志为true会使权重也考虑作业大小(所需任务数),但不是线性的(权重与所需任务数的对数成比例)。这个设定让较大作业在获取更大的公平共享资源的同时也能提供足够的共享资源给小作业,让它们能迅速的完成。布尔值,默认是false |
mapred.fairscheduler.preemption.only.log |
这个标志会使调度器在碰到抢占计算时仅简单的记录下它什么时候想抢占一个任务,而不会真正的抢占任务。布尔值,默认是false。这个属性用在启用抢占之前做一个抢占的“dry run”是很有用的,以确保你没把超时时间设置的过于具有侵略性。你会在Jobtracker的输出日志(HADOOP_LOG_DIR/hadoop-jobtracker-*.log)看到抢占日志信息。信息跟下面的相似: Should preempt 2 tasks for job_20090101337_0001: tasksDueToMinShare = 2, tasksDueToFairShare = 0 |
mapred.fairscheduler.update.interval |
公平共享资源计算更新间隔时间。默认的500毫秒适用于小于500个节点的集群,但较大的值可以减少更大集群的Jobtracker的负载。整数值,单位是毫秒,默认是500。 |
mapred.fairscheduler.preemption.interval |
检查任务抢占的间隔时间。默认的15秒适用于超时时间在分钟数量级上的。不推荐超时时间过小于这个数值,但是如果你已经设置了这样的超时时间,你可以使用这个值来做更多的抢占计算。然而小于5秒的值就太小了,因为它小于心跳的间隔时间了。整数值,单位是毫秒,默认是15000 |
mapred.fairscheduler.weightadjuster |
一个扩展点,让你指定一个类去调整运行中作业的权重。这个类应当实现WeightAdjuster接口。目前已有一个例子实现——NewJobWeightBooster,它会在作业生命周期中的前5分钟增加作业的权重,以使小作业能更快速的完成。要使用这个例子实现,设置weightadjuster属性为类的全名,org.apache.hadoop.mapred.NewJobWeightBooster。NewJobWeightBooster本身提供了两个参数用于设定持续时间和增长因子。
|
mapred.fairscheduler.loadmanager |
一个扩展点,让你指定一个类去决定一个给定TaskTracker上可以运行多少个map和reduce。这个类应当实现LoadManager接口。默认使用Hadoop配置文件中的任务负载,但可以使用这个选项使负载基于如可用内存和CPU利用率。 |
mapred.fairscheduler.taskselector |
一个扩展点,让你指定一个类去决定作业内的哪一个任务运行在给定的tracker上。这个特性可以用来改变本地化策略(比如,让一些作业在特定机架内)或推测(speculative)执行算法(选择什么时候去执行推测任务)。默认的实现使用Hadoop的JobInProgress中的默认算法。 |
(7)$HADOOP_HOME/etc/hadoop/yarn-site.xml
|
ResourceManager相关配置参数
参数 |
参数解释 |
默认值 |
yarn.resourcemanager.address |
ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等。 |
${yarn.resourcemanager.hostname}:8032 |
yarn.resourcemanager.scheduler.address
|
ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。 |
${yarn.resourcemanager.hostname}:8030 |
yarn.resourcemanager.resource-tracker.address
|
ResourceManager 对NodeManager暴露的地址.。NodeManager通过该地址向RM汇报心跳,领取任务等。 |
${yarn.resourcemanager.hostname}:8031 |
yarn.resourcemanager.admin.address
|
ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。 |
${yarn.resourcemanager.hostname}:8033 |
yarn.resourcemanager.webapp.address
|
ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。 |
${yarn.resourcemanager.hostname}:8088 |
yarn.resourcemanager.scheduler.class |
启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。 |
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler |
yarn.resourcemanager.resource-tracker.client.thread-count
|
处理来自NodeManager的RPC请求的Handler数目。 |
50 |
yarn.resourcemanager.scheduler.client.thread-count
|
:处理来自ApplicationMaster的RPC请求的Handler数目。 |
50 |
yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb
|
单个可申请的最小/最大内存资源量。比如设置为1024和3072,则运行MapRedce作业时,每个Task最少可申请1024MB内存,最多可申请3072MB内存。 |
1024/8192 |
yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores
|
参数解释:单个可申请的最小/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。什么是虚拟CPU。 |
1/32 |
yarn.resourcemanager.nodes.include-path/yarn.resourcemanager.nodes.exclude-path |
NodeManager黑白名单。如果发现若干个NodeManager存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个refresh命令即可) |
“” |
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms |
odeManager心跳间隔 |
1000(毫秒) |
2. NodeManager相关配置参数
参数 |
参数解释 |
默认值 |
yarn.nodemanager.resource.memory-mb
|
NodeManager总的可用物理内存。注意,该参数是不可修改的,一旦设置,整个运行过程中不可动态修改。 |
8192 [MB] |
yarn.nodemanager.vmem-pmem-ratio |
每使用1MB物理内存,最多可用的虚拟内存数。 |
2.1 |
yarn.nodemanager.resource.cpu-vcores |
NodeManager总的可用虚拟CPU个数。 |
8 |
yarn.nodemanager.local-dirs |
中间结果存放位置,类似于1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载。
|
${hadoop.tmp.dir}/nm-local-dir
|
yarn.nodemanager.log-dirs
|
日志存放地址(可配置多个目录)。 |
${yarn.log.dir}/userlogs |
yarn.nodemanager.log.retain-seconds
|
NodeManager上日志最多存放时间(不启用日志聚集功能时有效)。 |
10800 三小时 |
yarn.nodemanager.aux-services
|
NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序
|
|
(8)hadoop namenode -format
(1):spark-2.1.0-bin-hadoop2.7.tgz
(2): tar -xvf spark-2.1.0-bin-hadoop2.7.tgz
mv spark-2.1.0-bin-hadoop2.7 /opt
(3):修改相应的配置文件
|
(4):$SPARK_HOME/conf/spark-env.sh
cp spark-env.sh.template spark-env.sh
|
(5):$SPARK_HOME/conf/slaves
cp slaves.template slaves
|
spark启动脚本:
|
关闭集群脚本stop-cluser.sh如下:
|