基础搭建
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是我的当前主机名)
<property>
<name>fs.defaultFS</name>
<value>hdfs://node0:9000</value>
</property>
3配置hdfs 副本数为1
vi hdfs-site.xml
在configuration中添加
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/var/bigdata/hadoop/local/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/var/bigdata/hadoop/local/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/var/bigdata/hadoop/local/dfs/secondary</value>
</property>
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一样即可
之后会搭建完全分布式(多节点)