创建虚拟网络
docker network create —driver=bridge hadoop
拉取centos镜像
创建一个centos容器
docker run -itd --privileged --name Centos8 centos /usr/sbin/initdocker exec -it Centos8 /bin/bash
安装 jdk1.8、Scala
yum install -y vim bash-completion net-tools wget // 安装小工具cd /etc/yum.repos.d/mkdir bakmv * bak/wget https://mirrors.aliyun.com/repo/Centos-8.repoyum clean allyum makecacheyum install java-1.8.0-openjdk* -yjava -versionyum install scale -yscale //测试
配置SSH
集群间需要使用ssh互相通信
yum install openssh-server openssh-clients -y //安装sshcdssh-keygen -t rsa -P "" //生成密钥,免密登录cat .ssh/id_rsa.pub >> .ssh/authorized_keyssystemctl start sshdssh 127.0.0.1 //测试免密登录exit // 记得退出vim ~/.bashrc //配置ssh服务开机自启动// 在文件最下面添加一行systemctl start sshd
安装Hadoop
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gztar -zxvf hadoop-3.2.1.tar.gz -C /usr/local/cd /usr/local/mv hadoop-3.2.1 hadoop
配置hadoop
编辑/etc/profile,在文件最后加入以下内容
JAVA_HOME 为 JDK 安装路径,用 update-alternatives —config java 可查看
#javaexport JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el8_2.x86_64export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=${JAVA_HOME}/bin:$PATH#hadoopexport HADOOP_HOME=/usr/local/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_YARN_HOME=$HADOOP_HOMEexport HADOOP_INSTALL=$HADOOP_HOMEexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport HADOOP_CONF_DIR=$HADOOP_HOMEexport HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexecexport JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATHexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport HDFS_DATANODE_USER=rootexport HDFS_DATANODE_SECURE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport HDFS_NAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=root
-
修改 hadoop-env.sh
/usr/local/hadoop/etc/hadoop/hadoop-env.sh
在文件最后追加以下内容
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el8_2.x86_64export HDFS_NAMENODE_USER=rootexport HDFS_DATANODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=root
修改 core-site.xml
/usr/local/hadoop/etc/hadoop/core-site.xml
将文件内容修改为以下内容,其中h01为主机名字,可在/etc/hosts中添加
<configuration><property><name>fs.default.name</name><value>hdfs://h01:9000</value></property><property><name>hadoop.tmp.dir</name><value>/home/hadoop3/hadoop/tmp</value></property></configuration>
修改 hdfs-site.xml
/usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.name.dir</name><value>/home/hadoop3/hadoop/hdfs/name</value></property><property><name>dfs.namenode.data.dir</name><value>/home/hadoop3/hadoop/hdfs/data</value></property></configuration>
修改 mapred-site.xml
/usr/local/hadoop/etc/hadoop/mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.application.classpath</name><value>/usr/local/hadoop/etc/hadoop,/usr/local/hadoop/share/hadoop/common/*,/usr/local/hadoop/share/hadoop/common/lib/*,/usr/local/hadoop/share/hadoop/hdfs/*,/usr/local/hadoop/share/hadoop/hdfs/lib/*,/usr/local/hadoop/share/hadoop/mapreduce/*,/usr/local/hadoop/share/hadoop/mapreduce/lib/*,/usr/local/hadoop/share/hadoop/yarn/*,/usr/local/hadoop/share/hadoop/yarn/lib/*</value></property></configuration>
修改 mapred-site.xml
/usr/local/hadoop/etc/hadoop/yarn-site.xml
<configuration><property><name>yarn.resourcemanager.hostname</name><value>h01</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>
修改hadoop/workers
/usr/local/hadoop/etc/hadoop/workers
- 用于群起脚本
h01h02h03
创建3个一样的容器
```bash docker ps -a制作镜像
docker commit -m “Alitahadoop” -a “Alita” 73a701cae68b alitahadoop docker images
//启动的是 h01 是做 master 节点的,所以暴露了端口,以供访问 web 页面 docker run -itd —privileged —network hadoop -h “h01” —name “h01” -p 9870:9870 -p 8088:8088 alitahadoop /usr/sbin/init docker run -itd —privileged —network hadoop -h “h02” —name “h02” alitahadoop /usr/sbin/init docker run -itd —privileged —network hadoop -h “h03” —name “h03” alitahadoop /usr/sbin/init
docker start h01 h02 h03
<a name="lHL9C"></a>### 配置各个容器对应的/etc/hosts文件```bash# 查看ip:docker inspect h01172.18.0.2 h01172.18.0.3 h02172.18.0.4 h03
在h01中启动hadoop
docker exec -it h01 /bin/bashcd /usr/local/hadoop/binhdfs namenode -format //先进行格式化操作cd /usr/local/hadoop/sbin/ //进入 hadoop 的 sbin 目录./start-all.sh //启动//关闭集群执行脚本 ./stop-all.shcd /usr/local/hadoop/bin./hadoop dfsadmin -report /查看分布式文件系统的状态
