基於docker搭建Hadoop集羣

準備環節 雲服務器一個

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。即在這一行前邊加#。保存即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章