準備環節 雲服務器一個
1下載好docker
2docker下載centos鏡像(我下載的centos8)
docker pull centos
3啓動容器同時進入啓動的容器進行相關操作
docker run -it --name centos-1 centos /bin/bash
4配置時區(別人配了咱也配一下吧)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5配置ifconfig(我的yum命令時候會報一些錯,說是編碼問題,我試瞭解決不了,因爲不影響所以沒繼續浪費時間了,要是有人解決了分享一下啊)
yum install net-tools.x86_64
6查看網卡信息
ifconfig
7安裝passwd和修改用戶密碼
yum install passwd
passwd
8安裝openssh
yum install openssh-server -y
9生成公鑰和私鑰
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_ed25519_key
10編寫啓動腳本並給權限
vi run.sh
內容如下:
#!/bin/bash
/usr/sbin/sshd -D
給腳本權限 chmod +x ./run.sh
11退出並保存容器(這裏把這些配置保存到centos-1鏡像中,可以docker images查看)
exit
docker container stop cnetos-1
docker commit centos-1 centos-me:v1.0
12啓動新的容器(hadoop0其實不保存)(過程有可能比較慢,我的服務器跑了好一會2m4g的)
docker run --name hadoop0 -d -p 5001:22 -p 50070:50070 -p 9000:9000 centos_me:v1.0 /usr/sbin/sshd -D
docker exec -it hadoop0 bash
13安裝和配置java 和 hadoop(我的centos鏡像需要yum install wget)(下面的地址可以進去)(解壓tar命令沒有自己yum下載)
Hadoop下載(我是3.2.1版本) wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
Jdk下載(我是該版本1.8) wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
配置環境
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_141
export HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.1
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib/native:$HADOOP_HOME/bin:$PATH
export CLASSSPATH=.:$JAVA_HOME/libtools.jar:$JAVA_HOME/lib/dt.jar
14在hadoop根目錄下 /usr/local/hadoop/hadoop-2.9.1/etc/hadoop修改workers(3.0以前版本爲slaves) 文件寫入(我的master也設置成數據存儲節點了,可以不設置你們)
hadoop2
hadoop3
hadoop4
hadoop5
15修改etc/hadoop下 hadoop-env.sh 在export JAVA_HOME之前插入一行
JAVA_HOME=/usr/local/jdk/jdk1.8.0_181/
16修改配置文件(有點長我方在一起了)(我依然沒有vim,自己下載)
vim core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop2:50070</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
vim hdfs-site.xml
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9001</value>
<description>#through web see HDFS status </description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description># each Block has 2backup</description>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
vim yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop2:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop2:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop2:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop2:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop2:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
vim mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop2:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop2:19888</value>
</property>
17配置ssh文件
vi /etc/ssh/ssh_config 增加
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
18停止容器保存鏡像
docker stop hadoop
docker commit hadoop2 centos_me:v1.0
19從新鏡像啓動3個容器
docker run --name hadoop2 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 -d -p 5002:22 -p 9870:9870 -p 8088:8088 -p 19888:19888 -p 50070:50070 -p 9000:9000 centos_me:v1.0 /usr/sbin/sshd -D
docker run --name hadoop3 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 --add-host hadoop5:172.17.0.5 -d -p 5003:22 centos_me:v1.0 /usr/sbin/sshd -D
docker run --name hadoop4 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 --add-host hadoop5:172.17.0.5 -d -p 5004:22 centos_me:v1.0 /usr/sbin/sshd -D
docker run --name hadoop5 --add-host hadoop2:172.17.0.2 --add-host hadoop3:172.17.0.3 --add-host hadoop4:172.17.0.4 --add-host hadoop5:172.17.0.5 -d -p 5005:22 centos_me:v1.0 /usr/sbin/sshd -D
20 xshell通過ssh登錄這幾個機器(端口分別是5002,5003,5004,5005)
21爲每臺機器安裝:
yum -y install openssh-clients
yum -y install which
22配置免密登錄這個算了自己百度(你看看/etc/hosts 文件裏面有沒有其他主機,我的錯了自己加的,網上這個是自己外部加進去好像)(記住每個機器都需要)
ssh-keygen
scp -p ~/.ssh/id_rsa.pub root@hadoop2
scp -p ~/.ssh/id_rsa.pub root@hadoop3
scp -p ~/.ssh/id_rsa.pub root@hadoop4
scp -p ~/.ssh/id_rsa.pub root@hadoop5
23格式化namenode(是對namenode進行初始化)
hdfs namenode -format (hadoop namenode -format)
23啓動hadoop
start-all.sh
24異常分析
Attempting to operate on hdfs namenode as root
在/hadoop/sbin路徑下:
將start-dfs.sh,stop-dfs.sh兩個文件頂部添加以下參數
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
start-yarn.sh,stop-yarn.sh頂部也需添加以下:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
# Licensed to the Apache Software Foundation (ASF) under one or more
報錯處理
grep "oment(Number" . -r命令找到這個錯誤的js文件
return new Date(Number(v)).toLocaleString(); (報錯的這行改成這樣,看報錯f12,就可以看到)
錯誤 ssh無法遠程,報錯"System is booting up. See pam_nologin(8)"
修改文件: /etc/pam.d/sshd
註釋account required pam_nologin.so。即在這一行前邊加#。保存即可