Hadoop 12节点集群搭建配置清单

Hadoop 12节点集群搭建

U盘挂载操做以下:

此步骤是 U盘给Linux上挂载显示,如无此需求请忽略此步。java

  • 1) 插入U盘
  • 2) 输入 fdisk -l 查看输出结果,好比个人是这样的:
    ...
    Device Boot Start End Blocks Id System
    /dev/sdb1 * 1 2668 128016 6 FAT16
  • 3) 看了上面的输出就知道U盘所在的设备了,好比个人就是/dev/sdb1,接着即是挂载了
    # 先建立一个挂载目录
    $ mkdir /mnt/usb
    # 若是是U盘文件格式为 fat32,就用命令:
    $ mount -t vfat /dev/sdb1 /mnt/usb
    # 若是是U盘文件格式为 ext2格式,就用命令:
    $ mount -t ext2 /dev/sda1 /mnt/usb
    # 若是是U盘文件格式为 ntfs,就用命令:
    # 先安装ntfs-3g:
    $ yum install ntfs-3g
    $ mount -t ntfs-3g /dev/sda1 /ntfs
  • 4) 能够查看挂载状况
    $ df –lh
  • 5) 打开/mnt/usb 就能够看到你的U盘里的东西了!
    $ cd /mnt/usb
  • 6) 卸载命令则为:
    $ umount  /mnt/usb

每一个节点部署服务配置清单:

节点名称 IP地址 安装服务
hadoop001 192.168.0.10 NameNode、DFSZKFailoverController(ZKFC)
hadoop002 192.168.0.11 DataNode、NodeManager、JournalNode、QuorumPeerMain、ZooKeeper
hadoop003 192.168.0.12 DataNode、NodeManager、JournalNode、QuorumPeerMain、ZooKeeper
hadoop004 192.168.0.13 ResourceManager
hadoop005 192.168.0.14 DataNode、NodeManager
hadoop006 192.168.0.15 DataNode、NodeManager
hadoop007 192.168.0.16 NameNode、DFSZKFailoverController(ZKFC)
hadoop008 192.168.0.17 DataNode、NodeManager、JournalNode 、QuorumPeerMain 、zookeeper --- JN用来同步两个NN之间的数据,standbay的NN至关于SNN
hadoop009 192.168.0.18 ResourceManager
hadoop010 192.168.0.19 DataNode、NodeManager
hadoop011 192.168.0.20 DataNode、NodeManager
hadoop012 192.168.0.21 DataNode、NodeManager

关于为何没有secondarynamenode,由于standby状态的NameNode能够完成checkpoint操做,所以不必配置Secondary NameNode、CheckpointNode、BackupNode。若是真的配置了,还会报错。node


配置步骤:

  • 1.1 首先配置zookeeper (hadoop002,hadoop003,hadoop008)
$ cd /hadoop/zookeeper-3.4.6/conf/
$ cp zoo_sample.cfg zoo.cfg
$ vim zoo.cfg

#修改如下内容长度
dataDir=/hadoop/zookeeper-3.4.6/tmp

#在最后添加:
server.1=hadoop104:2888:3888
server.2=hadoop105:2888:3888
server.3=hadoop106:2888:3888
#保存退出
注:2888是leader和follower通讯的端口,3888是投票用的端口
  • 1.2 而后建立一个tmp文件夹
    $ mkdir /hadoop/zookeeper-3.4.6/tmp
  • 1.3 再建立一个空文件
    $ touch /hadoop/zookeeper-3.4.6/tmp/myid
  • 1.4 最后向该文件写入ID,填入myid文件里
    #hadoop104机器:
    $ echo 1 > /hadoop/zookeeper-3.4.6/tmp/myid
    #hadoop105机器:
    $ echo 2 > /hadoop/zookeeper-3.4.6/tmp/myid
    #hadoop106机器:
    $ echo 3 > /hadoop/zookeeper-3.4.6/tmp/myid

  • 2.1 配置$HADOOP_HOME/etc/hadoop目录下的配置文件 core-site.xmlapache

    $ vim core-site.xml
    #全部设置的文件夹都要提早建好(很重要)
    #【这里的值指的是默认的HDFS路径。当有多个HDFS集群同时工做时,集群名称在这里指定!该值来自于hdfs-site.xml中的配置】
    <configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://myha</value>
    </property>
    #【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也能够本身单独指定这三类节点的目录。】
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:///home/hadoop/tmp</value>
    </property>
    #【io数据块大小】
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    #【FSImage文件和EditsLog文件能够经过ID来互相关联。在参数dfs.namenode.name.dir设置的路径下,会保存FSImage文件和EditsLog文件,若是是QJM方式HA的话,EditsLog文件保存在参数dfs.journalnode.edits.dir设置的路径下。】
    <property>
        <name>dfs.journalnode.edits.dir</name><value>/home/hadoop/journaldata</value>  #注意,不要加file
    </property>
    #【这里是ZooKeeper集群的地址和端口。注意,数量必定是奇数,且很多于三个节点】
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop002:2181,hadoop003:2181,hadoop008:2181</value>
    </property>
    </configuration>
  • 2.2 修改配置文件 core-site.xml
$ vim hdfs-site.xml
#【指定DataNode存储block的副本数量。默认值是3个,咱们如今有4个DataNode,该值不大于4便可。】
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
#【使用federation时,HDFS集群别名。名字能够随便起,多个集群时相互不重复便可】
    <property>
        <name>dfs.nameservices</name>
        <value>myha</value>
    </property>
#【指定该集群的namenode的机器】
    <property>
        <name>dfs.ha.namenodes.myha</name>
        <value>hadoop001,hadoop007</value>
    </property>
#【指定hadoop100的RPC地址】
    <property>
        <name>dfs.namenode.rpc-address.myha.hadoop001</name>
        <value>hadoop001:9000</value>
    </property>
#【指定hadoop100的http地址】
    <property>
        <name>dfs.namenode.http-address.cluster1.hadoop001</name>
        <value>hadoop001:50070</value>
    </property>
#【指定hadoop101的RPC地址】
    <property>
        <name>dfs.namenode.rpc-address.myha.hadoop101</name>
        <value>hadoop101:9000</value>
    </property>
#【指定hadoop101的http地址】
    <property>
        <name>dfs.namenode.http-address.myha.hadoop101</name> 
        <value>hadoop101:50070</value>
    </property>

#【指定该集群的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop002:8485;hadoop003:8485;hadoop008:8485/myha</value>
    </property>
#【指定该集群是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另外一台NameNode】
    <property>
        <name>dfs.ha.automatic-failover.enabled.myha</name>
        <value>true</value>
    </property>
#【指定该集群出故障时,哪一个实现类负责执行故障切换】
    <property>
        <name>dfs.client.failover.proxy.provider.myha</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
#【一旦须要NameNode切换,使用ssh方式进行操做】
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
#【若是使用ssh进行故障切换,使用ssh通讯时用的密钥存储的位置】
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>file:///root/.ssh/id_rsa</value>
    </property>
#【connect-timeout链接超时】
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///home/hadoop/tmp/dfs/name</value>
    </property>
#【设置】
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///home/hadoop/tmp/dfs/data</value>
    </property>
</configuration>
  • 2.3 修改配置文件 mapred-site.xml
$ vim mapred-site.xml

<configuration>
#【指定运行mapreduce的环境是yarn,与hadoop1大相径庭的地方】
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>
  • 2.4 修改配置文件 yarn-site.xml
$ vim yarn-site.xml

<configuration>
#【启动HA高可用性】
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
#【指定resourcemanager的名字,不能与zookeeper的命名相同】
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>yrc</value>
    </property>
#【使用了2个resourcemanager,分别指定Resourcemanager的地址】
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
#【自定ResourceManager1的地址】
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop102</value>
    </property>
#【自定ResourceManager2的地址】
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop103</value>
    </property>
#【制定Zookeeper机器】
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop104:2181,hadoop105:2181,hadoop106:2181</value>
    </property>
#【默认】
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
    • 2.5 在hadoop-env.sh 和 yarn-env.sh 中配置JAVA_HOME

启动报错:

注:若是在启动的时候报bootstrap

#WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

能够在hadoop/etc/hadoop/log4j.properties 文件中添加vim

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERRO

注意:
在 hadoop/etc/hadoop 下记得创建 slave 文件bash

启动过程:

  • 1) 启动zookeeper集群(在主机名hadoop00二、hadoop00三、hadoop008上启动)app

    $ cd cd /home/hadoop/apps/zookeeper/
    $ bin/zkServer.sh start (逐个启动)
    #查看状态:一个leader,两个follower
    bin//zkServer.sh status
  • 2) 启动journalnode(分别在在主机名hadoop00二、主机名hadoop00三、主机名hadoop008上执行)
    $ cd $HADOOP_HOME
    $ sbin/hadoop-daemon.sh start journalnode
  • 3) 验证ssh

    $ jps
    #显示JouralNode + QuorumpeerMain
  • 4) 格式化namenode(hadoop001)
$ hdfs namenode -format
  • 5) 格式化ZKFC(在hadoop001上执行)
$ hdfs zkfc -formatZK
  • 6) NameNode从hadoop001同步到hadoop007
    1.在hadoop007执行 hdfs namenode bootstrapstandby
    2.验证 tmp下生成dfs
    3.若是1失败(在hadoop001执行) ide

    ssh-keygen -f "~/.ssh/known_hosts" -R hadoop007

    4.验证 tmp下生成dfs
    5.或者直接拷贝 tmp 目录到 hadoop007oop

  • 7) 启动NameNode和DataNode
    注意:每次启动前都要先启动zookeeper
    $ start-dfs.sh
    #验证 jps
  • 8) 启动yarn(在hadoop004执行)

    $ start-yarn.sh
    #验证: jps
    #显示ResourceManager + NodeManager
  • 9) 启动ZookeeperFailoverController(hadoop001和007执行)
    $ hadoop-daemon.sh start zkfc
    #验证
    jps
    #显示DFSZKFailoverController

两台nomenode在 start-all.sh的时候,50070都是现实standby,在启动zkfc的时候 nn1 显示为active

怎么设置默认的日志级别为WARN呢?

Hadoop使用的是log4j记录日志,咱们理所固然会想到去修改${HADOOP_HOME}/etc/hadoop/log4j.properties,可是改完重启,你会发现然并卵!!!

尼玛,这是为啥,认真看了下log4j.properties的配置说明,发现一个关键点:

# Define some default values that can be overridden by system properties
hadoop.root.logger=WARN,console

意思就是说,这里的配置会被系统属性覆盖!

因而乎,查了下可能会设置系统属性的脚本,发现须要修改如下2个文件,才能把默认的日志级别改掉(我这里只改的HDFS的,Yarn的自行参考便可):

第一处是${HADOOP_HOME}/etc/hadoop/hadoop-env.sh,把INFO改成WARN便可:

# Command specific options appended to HADOOP_OPTS when specifiedexport HADOOP_NAMENODE_OPTS="-Xmx30720m -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-WARN,RFAS} -Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-WARN,NullAppender} $HADOOP_NAMENODE_OPTS"

还有一处藏的比较深,是启动脚本${HADOOP_HOME}/sbin/hadoop-daemon.sh,也须要这样改一下:

export HADOOP_ROOT_LOGGER=${HADOOP_ROOT_LOGGER:-"WARN,RFA"}

最后在重启下NameNode就能够了。

线上配合Zookeeper作了HA,因此能够平滑重启,直接使用如下命令先重启standby的NameNode,在将standby切换为active,在重启另外一台NameNode就能够了。

先重启standbycd ${HADOOP_HOME}/sbin

./hadoop-daemon.sh stop namenode
./hadoop-daemon.sh start namenode

切换active节点,这里的nn2将被切换为active节点

hdfs haadmin -failover <nn1> <nn2>

最后重启nn2就完事了,重启方式同上

本文来自 QQ群的大佬 @托马斯维德 分享的。我就给整理 copy 过来了。谢谢大佬,谢谢你们!

相关文章
相关标签/搜索