Hadoop分布式集群搭建

今天花了一天的时间终于把Hadoop完全分布式集群的环境搭建成功,其实网上关于Hadoop集群环境搭建的教程很多,自己也是现学现卖,写这篇博客的目的主要还是想加深一下自己的印象,同时也记录下自己遇到的问题,以免以后再次踩坑。

其实在搭建完全分布式的的Hadoop之前,自己也先试了下单机模式和伪分布式模式的Hadoop,要说的是,这几种模式的区别其实主要就在于配置文件的不同(当然,完全分布式模式至少部署在两台机器上)。下面介绍下自己的搭建过程:

1.创建虚拟机

Hadoop需要运行在Linux环境下,因此首先在VM下安装了一个Ubuntu做master,建议分配内存大于2G(设置成1G时,master通过浏览器查看Hadoop相关信息时会非常卡,我的系统直接卡死了)


我准备用三台机器来搭建完全分布式的Hadoop,一个master(namenode),两个slave(datanode)。这里可以先不创建slave,等master上的安装工作完成后直接克隆即可,可以省去slave的安装操作。

2.安装Java

在usr/lib目录下创建一个jvm目录,将下载的jdk解压到该目录即可,同时设置一下环境变量

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export  PATH=${JAVA_HOME}/bin:$PATH

通过java -version检查一下

root@master:~# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

3.安装ssh

直接以下命令安装即可

sudo apt-get install openssh-server

这里需要说明的是ssh默认是禁止root用户登录的,由于我是自己学习,为了方便,因此所有操作都是在root用户下完成,将PermitRootLogin修改为yes即可

# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

4.Hadoop的安装

首先在/usr/lib下创建一个hadoop目录,下载完Hadoop后解压到/usr/lib/hadoop下

然后在usr/local下创建以下子目录,这下面会存储相关元数据和数据

mkdir hadoop
mkdir hadoop/tmp
mkdir hadoop/tmp/dfs
mkdir hadoop/tmp/dfs/name
mkdir hadoop/tmp/dfs/data
同时在/etc/profile中增加Hadoop的环境变量
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_161
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export  PATH=${JAVA_HOME}/bin:$PATH

export HADOOP_HOME="/usr/lib/hadoop/hadoop-2.6.5"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

接着就是修改Hadoop的配置文件了,这些配置文件都位于/usr/lib/hadoop/hadoop-2.6.5/etc/hadoop/

slaves

指明datanode,默认是loacalhost(单机模式),自己当时改漏了这个,结果导致后面datanode无法启动

node1
node2

core-site.xml

<configuration>
     <property>
         <name>fs.defaultFS</name>
         <value>hdfs://master:9000</value>
      </property>
      <property>
          <name>hadoop.tmp.dir</name>
          <value>file:/usr/local/hadoop/tmp</value>
      </property>
 </configuration>

hdfs-site.xml

dfs.replication指明了数据在hdfs的备份个数,不能超过最大的datanode个数,这里为2

secondary namenode设置在master上,这里似乎不太合理,secondary 应该是起冗余的作用,如果也设置在master上就失去意思了

自己的理解name目录用来存储相关元数据,而data目录就是存储真正的hdfs数据的

<configuration>
    <property>
       <name>dfs.replication</name>
       <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
    <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:/usr/local/hadoop/tmp/dfs/name</value>
    </property>
    <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/usr/local/hadoop/tmp/dfs/data</value>
    </property>
</configuration>

mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master:19888</value>
    </property>
</configuration>

yarn-site.xml

<configuration>
<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
   </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8031</value>--
    </property>--
    <property>--
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
</configuration>

5.克隆虚拟机

所有的准备工作已完毕,接下来克隆两份master,分别命名为node1,node2,如下:


本来担心克隆的系统的mac地址和ip地址会一样,但是通过ifconfig命令查看,发现克隆的node的mac和ip已自动变化,无需修改。

接下来只用修改/etc/hostname的内容为node1,node2

同时在每个系统的/etc/hosts里增加三台机器ip和hostname的对应关系

三台机器要能相互ping通

root@node1:~# ping master
PING master (192.168.127.128) 56(84) bytes of data.
64 bytes from master (192.168.127.128): icmp_seq=1 ttl=64 time=0.498 ms
64 bytes from master (192.168.127.128): icmp_seq=2 ttl=64 time=0.734 ms
64 bytes from master (192.168.127.128): icmp_seq=3 ttl=64 time=0.740 ms
64 bytes from master (192.168.127.128): icmp_seq=4 ttl=64 time=0.401 ms
^C
--- master ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3033ms
rtt min/avg/max/mdev = 0.401/0.593/0.740/0.148 ms

6.ssh免密码登录

为了方便master登录slave,可以将master的秘钥导入到其他机器

ssh-keygen -t rsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
#进入master的.ssh目录,执行复制操作
scp authorized_keys root@node1:~/.ssh/
scp authorized_keys root@node2:~/.ssh/

7.格式化hdfs

以上,所有的准备工作就完成了,接下来需要格式化hdfs

root@master:~# hdfs namenode -format
18/04/06 06:52:36 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = master/192.168.127.128
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.6.5

当看到successfully时说明成功

18/04/06 06:53:52 INFO namenode.FSImage: Allocated new BlockPoolId: BP-1417991494-192.168.127.128-1523022831949
18/04/06 06:53:52 INFO common.Storage: Storage directory /usr/local/hadoop/tmp/dfs/name has been successfully formatted.
18/04/06 06:53:52 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
18/04/06 06:53:52 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/tmp/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 320 bytes saved in 0 seconds.
18/04/06 06:53:52 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
18/04/06 06:53:52 INFO util.ExitUtil: Exiting with status 0
18/04/06 06:53:52 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.127.128
************************************************************/

8.启动Hadoop

通过执行下面的shell脚本完成最后一步

start-all.sh

启动过程中会多次让你输入master,node1,node2的密码,依次输入即可

完成后分别在三台机器上输入jps查看Hadoop进程

root@master:~# jps
2834 ResourceManager
4562 NodeManager
9156 Jps
2287 NameNode
2687 SecondaryNameNode
root@node1:~# jps
4328 Jps
2313 NodeManager
2174 DataNode
root@node2:~# jps
2292 NodeManager
2155 DataNode
4495 Jps

在master浏览器上打开master:50070,可以看到datanode:node1和node2


到这里Hadoop的完全分布式集群就搭建完毕了,接下来就可以开始自己的大数据之旅了~




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值