【Hadoop】VM虚拟机上搭建Hadoop集群

一、背景

      这件事做了N次,每次因为各种原因失败(比如,环境配置,hadoop参数设置),终于在春节前夕搞定。

     主要流程参照TMH_ITBOY的文章进行,再结合个人需求进行调整。

     在此记录和分享一下。

 

二、部署规划

集群部署规划

 

三、流程

【Step 1】 VMware新建虚拟机

补充:

(1)VMware 15.0.3下载

(2)虚拟机存储位置改为如下(提前规划)

主机hadoop1: .\Virtual Machines\hadoops\hadoop1
主机hadoop2: .\Virtual Machines\hadoops\hadoop2
主机hadoop3: .\Virtual Machines\hadoops\hadoop3
主机hadoop4: .\Virtual Machines\hadoops\hadoop4
主机hadoop5: .\Virtual Machines\hadoops\hadoop5

(3)虚拟机内存除hadoop1外,其他设为1G(因为我的笔记本内存小)


【Step 2】为虚拟机安装CentOS 6.7 64位系统

补充:

(1)我选择的是CentOS-6.7-x86_64-bin-DVD1.iso

 

【Step 3】CentOS 6.7 网络配置等,及JDK的安装

补充:

(1)每个主机MAC地址(物理地址)会不一致,子网掩码和网卡地址是一致的;

(2)编辑网卡时,记得同时修改IPADDR(例子如下);(保存退出后,重启网关无效的话,关机重启试一下)

网关:192.168.93.2
原IP:192.168.93.120
修改跟网关在一个网段(有规律,方便记忆即可):
    hadoop1:192.168.93.121
    hadoop2:192.168.93.122
    hadoop3:192.168.93.123
    hadoop4:192.168.93.124
    hadoop5:192.168.93.125

(3)在Xshell中永久保存ssh连接窗口:Xshell-文件-打开(Xshell连接虚拟机时,记得虚拟机先手动开机)

 

【Step 4】虚拟机克隆,及Hadoop环境配置与安装

补充:

(1)hadoop配置文件(为了方便比较,这部分我会全部列出来)

  • hadoop-env.sh
# set JAVA_HOME in this file, so that it is correctly defined on
# remote nodes.

# The java implementation to use.

#在这里添加JDK安装目录的环境变量
export JAVA_HOME=/home/java/jdk1.7.0_79

# The jsvc implementation to use. Jsvc is required to run secure datanodes
  • core-site.xml
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop1:9000</value><!--这里hadoop需要换成自己配置的第一台机器的hostname,比如我的是hadoop1,所以我这里写的就是hadoop1-->
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <!--配置hadoop集群数据存放路径,注意最后不要有空格-->
                <value>/home/hadoop/apps/hadoop-2.7.5/data</value>
        </property>
</configuration>
  • hdfs-site.xml
<configuration>
        <!--配置副本数量-->
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>

        <!--配置SecondaryNameNode-->
        <property>
                <name>dfs.secondary.http.address</name>
                <value>hadoop1:50090</value>
        </property>        
</configuration>
  • mapred-site.xml(将mapred-site.xml.template改成mapred-site.xml)
<configuration>
        <!--指定mapreduce在yarn上运行-->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>
  • yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->

        <!-- 配置resourcemanager为主机hadoop2 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop2</value>
        </property>

        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
  • slaves(先清空,再添加)
hadoop3
hadoop4
hadoop5

(2)因为我的namenode(hadoop1)和resourcemanager(hadoop2)是物理分离的,所以在配置主机间的ssh免密通信时,不仅要配置hadoop1-->hadoop2,hadoop3,hadoop4,hadoop5,还要配置hadoop2-->hadoop1,hadoop3,hadoop4,hadoop5的;

(3)初始化HDFS的操作,只在需要在第一次使用时格式化即可。如果使用后多次格式化,会导致子节点的cluster_id跟主节点的cluster_id不一致,这时候就需要手动一个个修改。

 

【Step 5】启动集群

1. 启动HDFS

在namenode(hadoop1)上启动:start-dfs.sh  

检查启动是否成功:hadoop dfsadmin -report # 都为0的话,肯定是异常

查看进程:jps # 无对应的进程的话,说明启动失败

我遇到的问题及解决办法:

(1)namenode和datanode都启动失败(无进程):

  • 关防火墙(每个节点都需要一个个去关闭!!!)
临时打开防火墙:service iptables start
临时关闭防火墙:service iptables stop
查看防火墙状态:sudo service iptables status

永久开启防火墙: chkconfig iptables on
永久关闭防火墙: chkconfig iptables off

(2)namenode启动成功,datanode启动失败(无进程)

  • 只关了namenode的防火墙,没关datanode们的;
  • 多次格式化hdfs,导致namenode和datanode们的cluster_id不一致:需要手动去修改datanode们的cluster_id
1.在namenode主机上(hadoop1),查看和记录namenode的clusterID:
cat /home/hadoop/apps/hadoop-2.7.5/data/dfs/name/current/VERSION

2.分别切换到hadoop3、hadoop4、hadoop5,修改datanode上的clusterID,使其与datanode的一致:
vim /home/hadoop/apps/hadoop-2.7.5/data/dfs/data/current/VERSION

2. 启动YARN

在resourcemanager机器(hadoop2)上启动: start-yarn.sh

检查进程:jps

 

【Step 6】使用wordcount进行测试

1.上传文件到HDFS
创建文件夹:hadoop fs -mkdir -p /wordcount/input 
从本地上传文件至hdfs:hadoop fs -put /home/HADOOP/Downloads/words.txt  /wordcount/input

2.运行一个mapreduce程序
切换jar包路径:cd $HADOOP_HOME/share/hadoop/mapreduce/
跑mr程序:hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input  /wordcount/output # /wordcount/output为输出路径,不需提前创建

3.查看结果
hadoop fs -cat /wordcount/output/words.txt

 

四、其他

1.Hadoop命令手册

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值