全分布式部署Hadoop集群

1、集群规划

由于HDFS默认最小复制原则是3份复制,所以规划3个数据节点(datanode),另外规划多一个独立的master运行namenode及相关的集群管理工作

网络规划:

192.168.186.213    mymaster
192.168.186.214    worker1
192.168.186.215    worker2
192.168.186.216    worker3

其中mymaster运行:

NameNode
SecondaryNameNode
ResourceManager

JobHistoryServer

其他的work节点运行
DataNode
NodeManager

2、修改机器网络环境

1、修改/etc/hostname为:

master节点:mymaster

其他worker节点:worker1~worker3

2、修改/etc/hosts

192.168.186.213    mymaster
192.168.186.214    worker1
192.168.186.215    worker2
192.168.186.216    worker3

其实,在Hadoop里面,推荐使用域名而不是直接用IP构建集群,如果非得用也行,只不过需要在namenode的hdfs-site.xml里面添加

<property>
  <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
  <value>false</value>
</property>

否则在集群启动时会报

Datanode denied communication with namenode because hostname cannot be resolved

3、设置SSH免密登陆

这一步需达到:master节点可以免密登陆其他节点。

谈到登陆就不得不谈登陆用户。在hadoop集群中需要用统一一致的用户名管理集群。假设在master上用yong这个用户启动集群,那就必须确保yong这个用户可以在master上用yong为登陆名远程登陆上worker节点,并可以启动相关的hadoop进程,即:

在master上,用yong用户可以免密执行

ssh yong@mymaster

ssh yong@worker1

ssh yong@worker2

ssh yong@worker3

下面是具体操作步骤

在四台机器上执行
$ sudo apt-get install openssh-server
在master上执行
$ ssh-keygen -t rsa -N ""
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@mymaster
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@worker1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@worker2
$ ssh-copy-id -i ~/.ssh/id_rsa.pub yong@worker3

4、安装Java环境

四台机器全部需要,具体做法是

$ gedit ~/.bashrc
export JAVA_HOME=/mnt/hgfs/java-env/jdk1.8.0_211
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
$ source ~/.bashrc
$ java -version
$ javac -version

5、安装hadoop环境

四台机器全部需要,具体做法是

$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
$ tar xzf hadoop-3.1.2.tar.gz
$ gedit ~/.bashrc
export HADOOP_HOME=/mnt/hgfs/hadoop-cluster-env/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
$ source ~/.bashrc
$ hadoop version

6、配置master节点

$ cd $HADOOP_HOME
$ mkdir my_config_master
$ gedit ~/.bashrc
export HADOOP_CONF_DIR=$HADOOP_HOME/my_config_master
export HADOOP_LOG_DIR=$HADOOP_HOME/my_log_master
$ source ~/.bashrc
$ cd $HADOOP_CONF_DIR
$ cp -r $HADOOP_HOME/etc/hadoop/* .
$ gedit core-site.xml

  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mymaster/</value>
  </property>

$ gedit hdfs-site.xml

  <property>
    <name>dfs.replication</name>
    <value>3</value>
  </property>

$ gedit mapred-site.xml

  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>

$ gedit yarn-site.xml

  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>mymaster</value>
  </property>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

7、配置worker节点

以worker1为例,假设master配置为$HADOOP_HOME/my_config_master

$ cd $HADOOP_HOME
$ mkdir my_config_worker1
$ gedit ~/.bashrc
export HADOOP_CONF_DIR=$HADOOP_HOME/my_config_worker1
export HADOOP_LOG_DIR=$HADOOP_HOME/my_log_worker1
$ source ~/.bashrc
$ cd $HADOOP_CONF_DIR
$ cp -r $HADOOP_HOME/my_config_master/* .

8、启动集群

在master节点上

$ gedit $HADOOP_CONF_DIR/workers

worker1
worker2
worker3

$ hdfs namenode -format

$ start-all.sh

$ mr-jobhistory-daemon.sh start historyserver

9、验证

访问 http://localhost:9870

访问 http://localhost:19888

试着创建一个文件

$ hdfs dfs -mkdir /yong
$ hdfs dfs -put ./test.txt /yong/

如果报错:put: File /test.txt._COPYING_ could only be written to 0 of the 1 minReplication nodes. There are 3 datanode(s) running and 3 node(s) are excluded in this operation.

解决:关闭worker节点的防火墙(以centos为例)

$ sudo systemctl stop firewalld.service

$ sudo systemctl disable firewalld.service
$ hdfs dfs -cat /yong/test.txt

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值