大数据-hadoop集群搭建

hadoop集群搭建

  • 集群规划
    • 3台服务器
    • 5台服务器
  • 版本选择
    • 原生安装
  • 服务器准备
  • hadoop安装
  • 配置
    • 资源相关参数
    • 容错相关参数
    • 本地运行mapreduce 作业
    • 效率和稳定性相关参数
  • 其他问题

集群规划

3台服务器

服务器名称 搭建服务
node01 DataNode、NodeManager、NameNode、SecondaryNameNode、ResourceManager
node02 DataNode、NodeManager
node03 DataNode、NodeManager

5台服务器

服务器名称 搭建服务
node01 NameNode、SecondaryNameNode
node02 ResourceManager
node03 DataNode、NodeManager
node04 DataNode、NodeManager
node05 DataNode、NodeManager

版本选择

原生安装

服务名称 版本
centos centos6.7
java jdk-7u80-linux-x64.tar.gz
hadoop centos6.7-hadoop-2.6.4.tar.gz(已源码编译)

服务器准备

  • 添加用户
  • 为用户分配sudo权限
  • 设置主机名(克隆主机需要配置)
1、编辑配置文件
vi /etc/sysconfig/network 
HOSTNAME=主机名

2、主机名立即生效
hostname 主机名

3、查看主机名
hostname
  • 配置网络
1、编辑配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0

BOOTPROTO=static
IPADDR=xxx.xxx.xxx.xxx
NETMASK=255.255.255.0
GATEWAY=xxx.xxx.xxx.xxx
DNS1=网关地址
DNS2=8.8.8.8

ps.(
克隆主机第一次配置时需要删除HWADDR
之后执行rm -rf /etc/udev/rules.d/70-persistent-net.rules
最后reboot
)

2、重启服务
service network restart
  • 配置防火墙
在非生产环境可以直接关闭防火墙
1、关闭防火墙
service iptables stop

2、关闭防火墙开机自启
chkconfig iptables off

3、查看启动级别
chkconfig iptables --list
  • 主机名和IP映射
1、编辑配置文件
vi /etc/hosts
IP	主机名

2、ping各主机
ping 主机名

3、将配置文件发送给各主机
scp -r /etc/hosts root@ip地址:/etc/

4、尝试互相ping
ping 主机名
  • ssh免密登录
1、在主节点生成公钥私钥
ssh-keygen -t rsa
一路回车

2、发送给其他主机(含主节点)
ssh-copy-id root@主机名

3、测试是否成功
ssh 主机名
  • 同步时间
手动同步
date -s "2019-01-01 00:00:00"
  • 安装JDK
1、卸载openjdk
(1)查看已安装java
rpm -qa | grep java
(2)删除openjdk
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.i686

2、解压
tar -zxvf jdk.tar.gz

3、添加环境变量
vi /etc/profile
export JAVA_HOME=/home/apps/jdk...
export PATH=$PATH:$JAVA_HOME/bin

4、环境变量生效
source /etc/profile
  • 上传文件工具
1、lrzsz
(1)yum install lrzsz -y
(2)rz

2、SCRT下alt+p

3、
(1)直接拖到SCRT
(2)选择send Zmodem...

hadoop安装

  • 解压
tar -zxvf centos6.7-hadoop-2.6.4.tar.gz
  • 添加环境变量
vi /etc/profile
export HADOOP_HOME=/home/apps/hadoop...
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 修改配置文件
vi hadoop/etc/hadoop/hadoop-env.sh

export JAVA_HOME=/home/apps/jdk...
vi hadoop/etc/hadoop/core-site.xml
在中间添加



    fs.defaultFS
    hdfs://node01:8020




    hadoop.tmp.dir
    /home/data/tmp

vi hadoop/etc/hadoop/hdfs-site.xml
在中间添加



    dfs.replication
    3




    dfs.secondary.http.address
    node01:50090




    dfs.namenode.name.dir
    /home/data/namenode,path2,path3,nfs://...


    dfs.datanode.data.dir
    /home/data/datanode,path2,path3...

cp hadoop/etc/hadoop/mapred-site.xml.template hadoop/etc/hadoop/mapred-site.xml
vi hadoop/etc/hadoop/mapred-site.xml
在中间添加



    mapreduce.framework.name
    yarn

vi hadoop/etc/hadoop/yarn-site.xml
在中间添加



    yarn.resourcemanager.hostname
    node01




    yarn.nodemanager.aux-services
    mapreduce_shuffle

  • 将hadoop安装包copy给其他机器
scp -r /home/apps/hadoop... root@node02:/home/apps
  • 将环境变量copy给其他机器
scp -r /etc/profile root@node02:/etc/profile
  • 各节点环境变量生效
source /etc/profile
  • 初始化hadoop
在主节点格式化
hadoop namenode -format
  • 启动集群
独立操作(在各节点)
hadoop-daemon.sh start/stop namenode
hadoop-daemon.sh start/stop datanode
hadoop-daemon.sh start/stop secondarynamenode

自动操作(在主节点)
(1)添加节点目录
vi /home/apps/hadoop/etc/hadoop/slaves

node01
node02
node03
 
 (2)cp到其他节点
scp -r /home/apps/hadoop/etc/hadoop/slaves root@node02:/home/apps/hadoop/etc/hadoop/

(3)
start/stop.dfs.sh
start/stop.yarn.sh
  • 检查启动
1.jps

2.访问hdfs
ip:50070

3.访问yarn
ip:8088

4.测试mapreduce(mapreduce)
hadoop jar /home/apps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar pi 4 8

配置

资源相关参数

//以下参数是在用户自己的mr应用程序中配置就可以生效
(1) mapreduce.map.memory.mb: 一个Map Task可使用的资源上限(单位:MB),默认为1024。如果Map Task实际使用的资源量超过该值,则会被强制杀死。
(2) mapreduce.reduce.memory.mb: 一个Reduce Task可使用的资源上限(单位:MB),默认为1024。如果Reduce Task实际使用的资源量超过该值,则会被强制杀死。
(3) mapreduce.map.cpu.vcores: 每个Map task可使用的最多cpu core数目, 默认值: 1
(4) mapreduce.reduce.cpu.vcores: 每个Reduce task可使用的最多cpu core数目, 默认值: 1

//应该在yarn启动之前就配置在服务器的配置文件中才能生效
(5) yarn.scheduler.minimum-allocation-mb 1024 给应用程序container分配的最小内存
(6) yarn.scheduler.maximum-allocation-mb 8192 给应用程序container分配的最大内存
(7) yarn.scheduler.minimum-allocation-vcores 1
(8)yarn.scheduler.maximum-allocation-vcores 32

//shuffle性能优化的关键参数,应在yarn启动之前就配置好
(10) mapreduce.task.io.sort.mb 100 //shuffle的环形缓冲区大小,默认100m
(11) mapreduce.map.sort.spill.percent 0.8 //环形缓冲区溢出的阈值,默认80%

容错相关参数

(1) mapreduce.map.maxattempts: 每个Map Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
(2) mapreduce.reduce.maxattempts: 每个Reduce Task最大重试次数,一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。
(3) mapreduce.map.failures.maxpercent: 当失败的Map Task失败比例超过该值为,整个作业则失败,默认值为0. 如果你的应用程序允许丢弃部分输入数据,则该该值设为一个大于0的值,比如5,表示如果有低于5%的Map Task失败(如果一个Map Task重试次数超过mapreduce.map.maxattempts,则认为这个Map Task失败,其对应的输入数据将不会产生任何结果),整个作业扔认为成功。
(4) mapreduce.reduce.failures.maxpercent: 当失败的Reduce Task失败比例超过该值为,整个作业则失败,默认值为0.
(5) mapreduce.task.timeout: Task超时时间,经常需要设置的一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block状态,可能是卡住了,也许永远会卡主,为了防止因为用户程序永远block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是300000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是“AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.”。

本地运行mapreduce 作业

设置以下几个参数:
mapreduce.framework.name=local
mapreduce.jobtracker.address=local
fs.defaultFS=local

效率和稳定性相关参数

(1) mapreduce.map.speculative: 是否为Map Task打开推测执行机制,默认为false
(2) mapreduce.reduce.speculative: 是否为Reduce Task打开推测执行机制,默认为false
(3) mapreduce.job.user.classpath.first & mapreduce.task.classpath.user.precedence:当同一个class同时出现在用户jar包和hadoop jar中时,优先使用哪个jar包中的class,默认为false,表示优先使用hadoop jar中的class。
(4) mapreduce.input.fileinputformat.split.minsize: FileInputFormat做切片时的最小切片大小,(5)mapreduce.input.fileinputformat.split.maxsize: FileInputFormat做切片时的最大切片大小
(切片的默认大小就等于blocksize,即 134217728)

其他问题

  • NameNode可以有多个吗?
    联邦机制
  • NameNode内存配置多大?
    存储一个block块大致需要150字节,64G可以满足日常需求。
  • blockSIze如何调整?
    一个block结合一个mapTask,要结合数据量和业务逻辑,尽量保证每个task运行不超过一分钟。
  • SafeMode怎么处理?
    a 是nameNode的一种状态(active/standby/safemode),是一种非正常状态,一旦集群中block丢失到一定比例,则会进入安全模式,此时机器正在修复备份数据,客户只能查看元数据。
    b 或者集群在正常冷启动过程中,namenode也会在安全模式下维持很长一段时间,此时机器在检测元数据,检测完后自动退出。
    c 当机器检测完元数据或找到问题所在,并修复数据,会自动退出。也可以手动退出hdfs namenode --safemode leave

你可能感兴趣的:(大数据)