基礎(chǔ)搭建
docker pull centos
docker run -idt -h node0 --name --privileged --name ssh_centos centos /usr/sbin/init
docker exec -it ssh_centos /bin/bash
#進(jìn)入了容器
#修改源文件 下載提速
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 #查看系統(tǒng)版本 是centos-8
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo #下載對(duì)應(yīng)版本的源文件
yum makecache #生成緩存
yum -y update #更新系統(tǒng)
#設(shè)置防火墻(關(guān)閉防火墻)
#安裝dnf
yum install epel-release -y
yum install dnf -y
#安裝防火墻
dnf install firewalld
#查看防火墻狀態(tài)
firewall-cmd --state
(1)設(shè)置開(kāi)機(jī)啟用防火墻:systemctl enable firewalld.service
(2)設(shè)置開(kāi)機(jī)禁用防火墻:systemctl disable firewalld.service
(3)啟動(dòng)防火墻:systemctl start firewalld
(4)關(guān)閉防火墻:systemctl stop firewalld
(5)檢查防火墻狀態(tài):systemctl status firewalld
#查看網(wǎng)絡(luò)
yum install net-tools
ifconfig #ip 是 172.17.0.8
yum install passwd
passwd #設(shè)置密碼
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
執(zhí)行
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
systemctl restart sshd.service
ssh localhost #發(fā)現(xiàn)可以免密登錄了
#設(shè)置時(shí)間同步
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install wntp
ntpdate ntp1.aliyun.com
這里我們完成了基本環(huán)境的配置 提交為新的鏡像 新開(kāi)一個(gè)容器
docker commit ssh_centos centos_base
docker run -idt -h node0 -p 10022:22 --privileged --name hadoop centos_base /usr/sbin/init
#安裝jdk hadoop 配置環(huán)境變量
xshell遠(yuǎn)程鏈接docker 上傳hadoop和jdk
解壓 hadoop/rpm -i jdk
#設(shè)置環(huán)境變量
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遠(yuǎn)程執(zhí)行不加載全局變量
vi hadoop-env.sh
修改 export JAVA_HOME=${JAVA_HOME}
為 export JAVA_HOME=/usr/java/default
2 給出nameNode啟動(dòng)路徑
vi core-site.xml
在configuration中添加(node0是我的當(dāng)前主機(jī)名)
<property>
<name>fs.defaultFS</name>
<value>hdfs://node0:9000</value>
</property>
3配置hdfs 副本數(shù)為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 啟動(dòng)位置
vi slaves
node0
啟動(dòng)hdfs 這里遇到的bug我也會(huì)記錄下來(lái)
初始化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
報(bào)錯(cuò) 可以看到 which command not found
解決: 安裝 which命令
yum install which
再次初始化 成功!
啟動(dòng) start-dfs.sh 成功!
重新commit了個(gè)鏡像 把我們的工作成果保存好 命名為hadoop
再次啟動(dòng) 一個(gè)容器 暴露50070/22 端口
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such fi
這個(gè)是因?yàn)楫?dāng)前目錄被刪除 cd到一個(gè)存在的目錄即可
啟動(dòng)hdfs 訪問(wèn)localhost:50070
發(fā)現(xiàn) datanode 里沒(méi)有項(xiàng)目DN
切換到上面配置的NN和DN的路徑下有一個(gè)VERSION文件
查看可以發(fā)現(xiàn)NN的clusterID和DN的clusterID不一致
手動(dòng)將DN的ID修改為DN的cluster一樣即可
之后會(huì)搭建完全分布式(多節(jié)點(diǎn))