第二章 Hadoop2.7.3+Spark2.1.0+Scala2.12.2+jdk1.8 完全分布式环境 环境搭建

一、版本选择

         Hadoop2.7.3+Spark2.1.0+Scala2.12.2+jdk1.8 完全分布式环境 搭建全过程

二、所有环境和已有环境

         已有:Hadoop2.7.3、Zookper、Jdk1.8

         所需搭建:Spark、Kafka、Scala

三、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环境搭建

下载包: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

定义HadoopMasterURI和端口

fs.checkpoint.dir

/opt/data/hadoop1/hdfs/namesecondary1

定义hadoopname备份的路径,官方文档说是读取这个,写入dfs.name.dir

 fs.checkpoint.period

1800

定义name备份的备份间隔时间,秒为单位,只对snn生效,默认一小时

 fs.checkpoint.size

33554432

以日志大小间隔做备份间隔,只对snn生效,默认64M

io.compression.codecs

org.apache.hadoop.io.compress.DefaultCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec,
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.BZip2Codec
(
排版调整,实际配置不要回车)

Hadoop所使用的编解码器,gzipbzip2为自带,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.
AuthenticationFilterInitializer
(
排版调整,实际配置不要回车)

需要jobtracker,tasktracker
namenode,datanode
http访问端口用户验证使用,需配置所有节点

hadoop.http.authentication.type

simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME#

验证方式,默认为简单,也可自己定义class,需配置所有节点

 hadoop.http.authentication.type

simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME#

验证方式,默认为简单,也可自己定义class,需配置所有节点

 hadoop.http.authentication.
token.validity

36000

验证令牌的有效时间,需配置所有节点

hadoop.http.authentication.
signature.secret

默认可不写参数

默认不写在hadoop启动时自动生成私密签名,需配置所有节点

 hadoop.http.authentication.cookie.domain

domian.tld

http验证所使用的cookie的域名,IP地址访问则该项无效,必须给所有节点都配置域名才可以。

 hadoop.http.authentication.
 simple.anonymous.allowed

true | false

简单验证专用,默认允许匿名访问,true

 hadoop.http.authentication.
kerberos.principal

HTTP/localhost@$LOCALHOST

Kerberos验证专用,参加认证的实体机必须使用HTTP作为KName

hadoop.http.authentication.
kerberos.keytab

/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.
serializer.WritableSerialization

(排版需要。实际配置不要回车)

序列化的编解码器

 io.seqfile.compress.blocksize

1024000

块压缩的序列化文件的最小块大小,字节

webinterface.private.actions

true | false

设为true,则JTNNtracker网页会出现杀任务删文件等操作连接,默认是false

 

 

 

 
 

       

                fs.defaultFS

                hdfs://master:9000

       

       

         io.file.buffer.size

         131072

      

       

                hadoop.tmp.dir

                /opt/hadoop-2.7.3/tmp

       

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(5)$HADOOP_HOME/etc/hadoop/hdfs-site.xml

 

 

 
 

   

      dfs.namenode.secondary.http-address

      master:50090

   

   

      dfs.replication

      2

   

   

      dfs.namenode.name.dir

      file:/opt/hadoop-2.7.3/hdfs/name

   

   

      dfs.datanode.data.dir

      file:/opt/hadoop-2.7.3/hdfs/data

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参数说明:

参数名

作用描述

dfs.default.chunk.view.size

32768

namenodehttp访问页面中针对每个文件的内容显示大小,通常无需设置。

 

dfs.datanode.du.reserved

1073741824

每块磁盘所保留的空间大小,需要设置一些,主要是给非hdfs文件使用,默认是不保留,0字节

dfs.name.dir

/opt/data1/hdfs/name,
/opt/data2/hdfs/name,
/nfs/data/hdfs/name

NN所使用的元数据保存,一般建议在nfs上保留一份,作为1.0HA方案使用,也可以在一台服务器的多块硬盘上使用

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,
/opt/data2/hdfs/data,
/opt/data3/hdfs/data,
...

真正的datanode数据保存路径,可以写多块硬盘,逗号分隔

dfs.datanode.data.dir.perm

755

datanode所使用的本地文件夹的路径权限,默认755

dfs.replication


3

 

hdfs数据块的复制份数,默认3,理论上份数越多跑数速度越快,但是需要的存储空间也更多。有钱人可以调5或者6

dfs.replication.max


512

 

有时dn临时故障恢复后会导致数据超过默认备份数。复制份数的最多数,通常没什么用,不用写配置文件里。

dfs.replication.min

1

最小份数,作用同上。

dfs.block.size

134217728

每个文件块的大小,我们用128M,默认是64M。这个计算需要128*1024^2,我碰上过有人直接写128000000,十分浪漫。

dfs.df.interval


60000

 

磁盘用量统计自动刷新时间,单位是毫秒。

dfs.client.block.write.retries


3

 

数据块写入的最多重试次数,在此次数之前不会捕获失败。

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

SNNtracker页面监听地址和端口

dfs.datanode.address

0.0.0.0:50010

DN的服务监听端口,端口为0的话会随机监听端口,通过心跳通知NN

dfs.datanode.http.address

0.0.0.0:50075

DNtracker页面监听地址和端口

dfs.datanode.ipc.address

0.0.0.0:50020

DNIPC监听端口,写0的话监听在随机端口通过心跳传输给NN

dfs.datanode.handler.count

3

DN启动的服务线程数

dfs.http.address

0.0.0.0:50070

NNtracker页面监听地址和端口

dfs.https.enable

true | false

NNtracker是否监听在HTTPS协议,默认false

dfs.datanode.https.address

0.0.0.0:50475

DNHTTPStracker页面监听地址和端口

dfs.https.address

0.0.0.0:50470

NNHTTPStracker页面监听地址和端口

dfs.datanode.max.xcievers

2048

相当于linux下的打开文件最大数量,文档中无此参数,当出现DataXceiver报错的时候,需要调大。默认256

(6)$HADOOP_HOME/etc/hadoop/mapred-site.xml

 

 
 

 

    mapreduce.framework.name

    yarn

 

 

          mapreduce.jobhistory.address

          master:10020

 

 

          mapreduce.jobhistory.address

          master:19888

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

可以在mapred-site.xml中设置下面的参数来影响公平调度器的行为:

参数

说明

mapred.fairscheduler.allocation.file

指定一个XML文件的绝对路径,该文件包含了每个资源池的最小共享资源、每资源池和每用户的并发运行作业数和抢占超时时间。如果没有设置这个属性,这些特性将不会被使用。配额文件格式在稍后描述

mapred.fairscheduler.preemption

是否启用抢占的布尔值属性。默认是false

mapred.fairscheduler.poolnameproperty

指定用哪个作业配置属性来决定作业的归属资源池。字符串格式,默认:user.name(即是每个用户一个资源池)。另一个有用的值是group.name,即每个Unix群组一个资源池。一个常用的设定是使用非标准的属性如pool.name作为资源池的名字属性,然后通过添加下面的设定来使user.name成为默认:

  pool.name

  ${user.name}

这样你就可以对某些作业显式的通过作业配置属性来指定资源池的名字(比如,在有默认用户资源池的情况下,传递 -Dpool.name=  bin/hadoop jar

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.NewJobWeightBoosterNewJobWeightBooster本身提供了两个参数用于设定持续时间和增长因子。

  • mapred.newjobweightbooster.factor,新作业权重的增长因子,默认是3
  • mapred.newjobweightbooster.duration,增长持续时间,单位是毫秒。默认是3000005分钟。

mapred.fairscheduler.loadmanager

一个扩展点,让你指定一个类去决定一个给定TaskTracker上可以运行多少个mapreduce。这个类应当实现LoadManager接口。默认使用Hadoop配置文件中的任务负载,但可以使用这个选项使负载基于如可用内存和CPU利用率。

mapred.fairscheduler.taskselector

一个扩展点,让你指定一个类去决定作业内的哪一个任务运行在给定的tracker上。这个特性可以用来改变本地化策略(比如,让一些作业在特定机架内)或推测(speculative)执行算法(选择什么时候去执行推测任务)。默认的实现使用HadoopJobInProgress中的默认算法。

(7)$HADOOP_HOME/etc/hadoop/yarn-site.xml

 

 
 

        

          yarn.nodemanager.aux-services

          mapreduce_shuffle

    

    

           yarn.resourcemanager.address

           master:8032

    

    

          yarn.resourcemanager.scheduler.address

          master:8030

     

    

         yarn.resourcemanager.resource-tracker.address

         master:8031

    

    

         yarn.resourcemanager.admin.address

         master:8033

    

    

         yarn.resourcemanager.webapp.address

         master:8088

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 五、Spark环境搭建

         (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:修改相应的配置文件

 

#Spark enviroment
export SPARK_HOME=/opt/spark-2.1.0-bin-hadoop2.7/
export PATH="$SPARK_HOME/bin:$PATH"

 

                           

 

 

 

        

         (4):$SPARK_HOME/conf/spark-env.sh

              cp spark-env.sh.template spark-env.sh

 

 
 

#配置内容如下:
export SCALA_HOME=/usr/share/scala

export JAVA_HOME=/usr/java/jdk1.8.0_112/

export SPARK_MASTER_IP=master

export SPARK_WORKER_MEMORY=1g

export HADOOP_CONF_DIR=/opt/hadoop-2.7.3/etc/hadoop

 

 

 

 

 

 

 

 

         (5):$SPARK_HOME/conf/slaves

        cp slaves.template slaves
 

#配置内容如下:
master

worker1

worker2

 

                   

 

 

 

 

spark启动脚本:

 

 
 

#!/bin/bash

echo -e "\033[31m ========Start The Cluster======== \033[0m"

echo -e "\033[31m Starting Hadoop Now !!! \033[0m"

/opt/hadoop-2.7.3/sbin/start-all.sh

echo -e "\033[31m Starting Spark Now !!! \033[0m"

/opt/spark-2.1.0-bin-hadoop2.7/sbin/start-all.sh

echo -e "\033[31m The Result Of The Command \"jps\" :  \033[0m"

jps

echo -e "\033[31m ========END======== \033[0m"

 

 

 

 

 

 

关闭集群脚本stop-cluser.sh如下:

 

 
 

#!/bin/bash

echo -e "\033[31m ===== Stoping The Cluster ====== \033[0m"

echo -e "\033[31m Stoping Spark Now !!! \033[0m"

/opt/spark-2.1.0-bin-hadoop2.7/sbin/stop-all.sh

echo -e "\033[31m Stopting Hadoop Now !!! \033[0m"

/opt/hadoop-2.7.3/sbin/stop-all.sh

echo -e "\033[31m The Result Of The Command \"jps\" :  \033[0m"

jps

echo -e "\033[31m ======END======== \033[0m"

 

 

 

        

 

 

 

六、Hadoop测试

七、Spark测试

你可能感兴趣的:(Linux,数据库,计算机,Hadoop学习)