栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

(linux) Docker环境下手动搭建hadoop集群

(linux) Docker环境下手动搭建hadoop集群

作者在服务器中成功手动搭建了 hadoop 集群,服务器系统是 centos 7.9,内核是 3.10.0-1127.el7.x86_64 。在搭建期间查了很多博客,但是很多博客中存在着问题,前前后后花了我大概一天多的时间,查资料,debug可以成功的运行了。在这里,我将我的安装总结一下,供需要的人进行参考。

参考文章:Docker中Hadoop集群搭建

一、安装docker
# 安装需要的软件包
yum install -y yum-utils
# 设置阿里云镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum安装包索引
yum makecache fast
# 安装Docker引擎
yum -y install docker-ce docker-ce-cli containerd.io
# 启动Docker
systemctl start docker
# 运行docker(查看是否安装成功)
docker version
docker run hello-world
二、拉取 centos 镜像

我安装的是 centos7。centos8 已经不提供后续支持。

docker pull daocloud.io/library/centos:7
三、配置固定 ip 的容器

创建的网络结构如下:

hostnameip
cluster-master172.18.0.2
cluster-slave1172.18.0.3
cluster-slave2172.18.0.4
cluster-slave3172.18.0.5
1、创建固定 ip 的子网
docker network create --subnet=172.18.0.0/16 netgroup
2、创建固定 ip 的容器

-p 指定了端口号

# cluster-master
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-master -h cluster-master -p 18088:18088 -p 9870:9870 --net netgroup --ip 172.18.0.2 daocloud.io/library/centos:7 /usr/sbin/init
#cluster-slaves
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave1 -h cluster-slave1 --net netgroup --ip 172.18.0.3 daocloud.io/library/centos:7 /usr/sbin/init
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave2 -h cluster-slave2 --net netgroup --ip 172.18.0.4 daocloud.io/library/centos:7 /usr/sbin/init
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave3 -h cluster-slave3 --net netgroup --ip 172.18.0.5 daocloud.io/library/centos:7 /usr/sbin/init
四、配置容器主机的 openSSH

进入到不同主机的方法,退出时使用快捷键 ctrl+p+q,不要用 exit,否则会关闭容器。

docker exec -it 主机名 /bin/bash
1、yum 换源

在安装 ssh 过程中,如果没速度,可以先对要安装的主机 yum 进行换源。

yum -y install wget
mv /etc/yum.repos.d/CentOS-base.repo  /etc/yum.repos.d/CentOS-base.repo.backup
wget -O /etc/yum.repos.d/CentOS-base.repo http://mirrors.163.com/.help/CentOS7-base-163.repo
yum makecache
2、配置 cluster-master 的 ssh,设置免密登录

首先,配置 cluster-master,并进行免密登录配置。

# 安装 OpenSSH
docker exec -it cluster-master /bin/bash
yum -y install openssh openssh-server openssh-clients
systemctl start sshd
# master 设置 ssh 登录自动添加 kown_hosts,配制免密登录
vi /etc/ssh/ssh_config # 注意:将原来的 StrictHostKeyChecking 的 ask 改为 no!
systemctl restart sshd
3、配置 cluster-slaves 的ssh

然后,配置 slave 的 ssh

docker exec -it cluster-slave1 /bin/bash
yum -y install openssh openssh-server openssh-clients
systemctl start sshd

这里需要注意的是,后续会使用 scp命令,需要输入从节点的密码。这里,我用了比较简单的方法,在配置从结点的时候,顺便为其添加统一的简单密码:

passwd root
五、cluster-master 公钥分发

进入主节点中,分发公钥

docker exec -it cluster-master /bin/bash
# 生成公钥
ssh-keygen -t rsa
# 将生成的公钥id_rsa.pub,重定向到文件authorized_keys
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
# 修改权限
chmod 600 ~/.ssh/authorized_keys
# 用scp将公钥文件分发到所有的slaves主机上(重复下面操作)
ssh root@cluster-slave1 'mkdir ~/.ssh'
scp ~/.ssh/authorized_keys root@cluster-slave1:~/.ssh
六、Ansible 的安装和使用 1、安装 Ansible

进入到主节点中,安装 Ansible

docker exec -it cluster-master /bin/bash
yum -y install epel-release
yum -y install ansible

编辑 ansible 的 hosts 文件

vi /etc/ansible/hosts

编辑内容如下:

[cluster]
cluster-master
cluster-slave1
cluster-slave2
cluster-slave3

[master]
cluster-master

[slaves]
cluster-slave1
cluster-slave2
cluster-slave3
2、配置Docker容器host

/etc/hosts 文件中的内容在容器启动时被重写,所以需要在容器重启后自动获取集群的hosts,修改本地服务器的.bashrc文件

vi ~/.bashrc

添加信息

:>/etc/hosts
cat >>/etc/hosts< 

重启.bashrc

source ~/.bashrc
3、用 Ansible 分发 .bashrc 至集群slave下
ansible cluster -m copy -a "src=~/.bashrc dest=~/"
七、配置 hadooop 运行环境 1、集群中搭建 jdk
ansible cluster -m yum -a "name=java-1.8.0-openjdk,java-1.8.0-openjdk-devel state=latest"
2、安装 hadooop

这里安装的是清华镜像里的hadoop-3.3.0,可以根据自己的需要去择清华镜像选择安装。这里我也选择将其安装到 /opt 目录下

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
tar -xzvf hadoop-3.3.0.tar.gz
ln -s hadoop-3.3.0 hadoop
3、配置环境变量

修改 .bashrc。

vi ~/.bashrc

添加内容如下,注意根据自己的实际安装情况来,不要照搬:

# hadoop,选择自己的hadoop安装目录
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

#java,选择自己的jdk安装目录
export JAVA_HOME=/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64
export PATH=$HADOOP_HOME/bin:$PATH

重启

source ~/.bashrc
八、配置 hadoop 的运行配置文件

这里的修改,照搬就行。

cd $HADOOP_HOME/etc/hadoop/
1、修改 core-site.xml 文件

    
        hadoop.tmp.dir
        /home/hadoop/tmp
        A base for other temporary directories.
    
    
    
        fs.default.name
        hdfs://cluster-master:9000
    
    
    fs.trash.interval
        4320
    

2、修改 hdfs-site.xml 文件

	
	   dfs.namenode.name.dir
	   /home/hadoop/tmp/dfs/name
	 
	 
	   dfs.datanode.data.dir
	   /home/hadoop/data
	 
	 
	   dfs.replication
	   3
	 
	 
	   dfs.webhdfs.enabled
	   true
	 
	 
	   dfs.permissions.superusergroup
	   staff
	 
	 
	   dfs.permissions.enabled
	   false
	 
 
3、修改 mapred-site.xml 文件

	
	  mapreduce.framework.name
	  yarn
	
	
	    mapred.job.tracker
	    cluster-master:9001
	
	
	  mapreduce.jobtracker.http.address
	  cluster-master:50030
	
	
	  mapreduce.jobhisotry.address
	  cluster-master:10020
	
	
	  mapreduce.jobhistory.webapp.address
	  cluster-master:19888
	
	
	  mapreduce.jobhistory.done-dir
	  /jobhistory/done
	
	
	  mapreduce.intermediate-done-dir
	  /jobhisotry/done_intermediate
	
	
	  mapreduce.job.ubertask.enable
	  true
	

4、修改 yarn-site.xml 文件

	 
	   yarn.resourcemanager.hostname
	   cluster-master
	 
	 
	   yarn.nodemanager.aux-services
	   mapreduce_shuffle
	 
	 
	   yarn.nodemanager.aux-services.mapreduce.shuffle.class
	   org.apache.hadoop.mapred.ShuffleHandler
	 
	 
	   yarn.resourcemanager.address
	   cluster-master:18040
	 
	 
	   yarn.resourcemanager.scheduler.address
	   cluster-master:18030
	 
	 
	   yarn.resourcemanager.resource-tracker.address
	   cluster-master:18025
	  
	   yarn.resourcemanager.admin.address
	   cluster-master:18141
	 
	 
	   yarn.resourcemanager.webapp.address
	   cluster-master:18088
	 
	 
	   yarn.log-aggregation-enable
	   true
	 
	 
	   yarn.log-aggregation.retain-seconds
	   86400
	 
	
	   yarn.log-aggregation.retain-check-interval-seconds
	   86400
	 
	
	   yarn.nodemanager.remote-app-log-dir
	   /tmp/logs
	 
	
	   yarn.nodemanager.remote-app-log-dir-suffix
	   logs
	 

5、向slave分发 hadoop

打包 hadoop,返回 hadoop 安装目录 /opt,打包文件。

tar -cvf hadoop-dis.tar hadoop hadoop-3.3.0

创建为 hadoop-dis.yaml文件,并添加内容如下:

---
- hosts: cluster
  tasks:
    - name: copy .bashrc to slaves
      copy: src=~/.bashrc dest=~/
      notify:
        - exec source
    - name: copy hadoop-dis.tar to slaves
      unarchive: src=/opt/hadoop-dis.tar dest=/opt

  handlers:
    - name: exec source
      shell: source ~/.bashrc

使用 ansible-playbook 分发 .bashrc 和 hadoop-dis.tar 至 slave 主机。

ansible-playbook hadoop-dis.yaml
九、Hadoop 启动和常见的问题

在启动集群时,我遇到了下面两个问题,先把问题和解决问题的方法列在下面,供读者参考。

问题1:Attempting to operate on hdfs namenode as root

这是由于用 root 用户来操作集群产生的问题,需要在 $HADOOP_HOME/etc/hadoop/hadoop-env.sh,添加内容:

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
问题2:ERROR: Cannot set priority of datanode process

这是由于在修改hadoop运行配置文件时,设置错误导致的。这个根据错误信息定位产生错误的文件,小心粘贴。

启动 hadoop 集群

在解决了上述问题后,就可以启动集群了

cd $HADOOP_HOME/sbin
# 格式化namenode
hadoop namenode -format
# 启动集群
./start-all.sh

用 jps 可以看到运行进程信息,也可以远程进行访问。

http://ip地址:端口号/ # ip是你的主机(服务器)的ip,端口号设置的是18088
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760886.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号