docker手撸hadoop伪分布式

基础搭建

docker pull centos
docker run -idt -h node0 --name --privileged --name ssh_centos centos /usr/sbin/init
docker exec -it ssh_centos /bin/bash

#进入了容器

#修改源文件 下载提速
yum -y install wget   #安装wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup  #备份源
cd /etc/yum.repos.d/
rpm -q centos-release #查看系统版本 是centos-8
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo  #下载对应版本的源文件
yum makecache #生成缓存
yum -y update #更新系统


#设置防火墙(关闭防火墙)
 #安装dnf
    
yum install epel-release -y
yum install dnf -y

#安装防火墙
dnf install firewalld

#查看防火墙状态
firewall-cmd --state 
      
                (1)设置开机启用防火墙:systemctl enable firewalld.service
                
                (2)设置开机禁用防火墙:systemctl disable firewalld.service
                
                (3)启动防火墙:systemctl start firewalld
                
                (4)关闭防火墙:systemctl stop firewalld
                
                (5)检查防火墙状态:systemctl status firewalld 



#查看网络
 yum install net-tools
 ifconfig   #ip 是 172.17.0.8

yum install passwd
passwd #设置密码
yum install openssh-server
yum install openssh-clients
systemctl start sshd.service
ssh localhots #输入密码 登录 生成 ~/.ssh目录
exit #从ssh退回到容器中

vi /etc/ssh/sshd_config
#编辑ssh配置文件
    添加
    RSAAuthorization yes
    PubkeyAuthentication yes
  
执行
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
systemctl restart sshd.service

ssh localhost #发现可以免密登录了

#设置时间同步
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install wntp
ntpdate ntp1.aliyun.com

这里我们完成了基本环境的配置 提交为新的镜像 新开一个容器

docker commit ssh_centos centos_base

docker run -idt -h node0 -p 10022:22 --privileged --name hadoop centos_base /usr/sbin/init

#安装jdk hadoop 配置环境变量
xshell远程链接docker 上传hadoop和jdk
解压  hadoop/rpm -i jdk

#设置环境变量 
vi /etc/profile
    export JAVA_HOME=/usr/java/default
    export HADOOP_HOME=/opt/bigdata/hadoop-2.6.5
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile

配置hadoop

cd $HADOOP_HOME/etc/hadoop

1必须给hadoop配置javahome ssh远程执行不加载全局变量
vi hadoop-env.sh
    修改 export JAVA_HOME=${JAVA_HOME}
    为   export JAVA_HOME=/usr/java/default


2 给出nameNode启动路径
vi core-site.xml
    在configuration中添加(node0是我的当前主机名)
         
            fs.defaultFS
            hdfs://node0:9000
         
     
3配置hdfs 副本数为1
vi hdfs-site.xml
     在configuration中添加
        
            dfs.replication
            1
        
        
            dfs.namenode.name.dir
            /var/bigdata/hadoop/local/dfs/name
        
        
            dfs.datanode.data.dir
            /var/bigdata/hadoop/local/dfs/data
        
        
            dfs.namenode.secondary.http-address
            node01:50090
        
        
            dfs.namenode.checkpoint.dir
            /var/bigdata/hadoop/local/dfs/secondary
        

4配置slaves 启动位置
    vi slaves
            node0

启动hdfs 这里遇到的bug我也会记录下来

初始化NN
[root@node0 hadoop-2.6.5]# hdfs namenode -format
/opt/hadoop-2.6.5/bin/hdfs: line 28: which: command not found
dirname: missing operand

报错 可以看到 which command not found
解决: 安装 which命令

yum install which

再次初始化 成功!

启动 start-dfs.sh 成功!

重新commit了个镜像 把我们的工作成果保存好 命名为hadoop
再次启动 一个容器 暴露50070/22 端口

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such fi
这个是因为当前目录被删除 cd到一个存在的目录即可

启动hdfs 访问localhost:50070  
发现 datanode 里没有项目DN
切换到上面配置的NN和DN的路径下有一个VERSION文件
查看可以发现NN的clusterID和DN的clusterID不一致
手动将DN的ID修改为DN的cluster一样即可

之后会搭建完全分布式(多节点)

你可能感兴趣的:(docker手撸hadoop伪分布式)