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

Hadoop 12节点集群搭建

U盘挂载操作如下:

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

  • 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地址安装服务
hadoop001192.168.0.10NameNode、DFSZKFailoverController(ZKFC)
hadoop002192.168.0.11DataNode、NodeManager、JournalNode、QuorumPeerMain、ZooKeeper
hadoop003192.168.0.12DataNode、NodeManager、JournalNode、QuorumPeerMain、ZooKeeper
hadoop004192.168.0.13ResourceManager
hadoop005192.168.0.14DataNode、NodeManager
hadoop006192.168.0.15DataNode、NodeManager
hadoop007192.168.0.16NameNode、DFSZKFailoverController(ZKFC)
hadoop008192.168.0.17DataNode、NodeManager、JournalNode 、QuorumPeerMain 、zookeeper --- JN用来同步两个NN之间的数据,standbay的NN相当于SNN
hadoop009192.168.0.18ResourceManager
hadoop010192.168.0.19DataNode、NodeManager
hadoop011192.168.0.20DataNode、NodeManager
hadoop012192.168.0.21DataNode、NodeManager

关于为什么没有secondarynamenode,因为standby状态的NameNode可以完成checkpoint操作,因此没必要配置Secondary NameNode、CheckpointNode、BackupNode。如果真的配置了,还会报错。


配置步骤:

  • 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.xml

    $ 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

启动报错:

注:如果在启动的时候报

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

可以在hadoop/etc/hadoop/log4j.properties 文件中添加

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

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

启动过程:

  • 1) 启动zookeeper集群(在主机名hadoop002、hadoop003、hadoop008上启动)

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

    $ 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执行)

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

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

  • 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 过来了。谢谢大佬,谢谢大家!

转载于:https://blog.51cto.com/2226894115/2058998

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值