网站首页 > 技术文章 正文
hadoop安装
目标
希望通过Dockerfile能做到一次编写,多次构建运行,方便其他同学快速搭建hadoop的学习环境。
依赖软件
- docker
- jdk-8u261-linux-x64(https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html)
- hadoop-3.2.2(https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.2/hadoop-3.2.2.tar.gz)
基于centos8构建无密登录ssh镜像
拉取centos8镜像
docker pull centos:8
创建Dockerfile文件
FROM centos:8
# 安装必要软件
RUN yum install -y net-tools which openssh-clients openssh-server iproute.x86_64 wget passwd vim \
# 修改root密码
&& echo "root:root" | chpasswd \
# 添加root用户到sudoers,允许使用sudo命令
&& echo "root ALL=(ALL) ALL" >> /etc/sudoers \
# ssh用的公私钥认证,需要把PAM认证中的UsePAM yes改为no
&& sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
# 创建ssh所需的文件夹/var/run/sshd,否则ssh启动不起来
&& mkdir /var/run/sshd \
# 生成无密码的公私密钥对
&& ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa \
# 公钥添加授权文件authorized_keys中
&& cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys \
# 设置初次ssh登录时,无需yes确认登陆
&& echo "StrictHostKeyChecking no" >~/.ssh/config \
&& echo "alias ll='ls -l'" >> ~/.bashrc \
&& source ~/.bashrc
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
构建镜像
docker build -t centos8-ssh:1.0 .
构建伪集群hadoop镜像
伪集群部署规划
nn | dn1 | dn2 | |
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | RescoureManager NodeManager | NodeManager |
hadoop的配置文件
- core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://nn:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/hadoop-3.2.2/data</value>
</property>
</configuration>
- hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>nn:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>dn2:9868</value>
</property>
</configuration>
- yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>dn1</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
</configuration>
- workers文件
nn
dn1
dn2
创建Dockerfile文件
FROM centos8-ssh:1.0
# software文件夹一定要和Dockerfile在同一个目录
ARG software_home=software
RUN mkdir $software_home
COPY $software_home/* $software_home/
RUN mkdir /usr/local/java/ \
&& tar -xvf $software_home/jdk-8u261-linux-x64.tar.gz -C /usr/local/java/ \
&& mkdir /usr/local/hadoop/ \
&& tar -xvf $software_home/hadoop-3.2.2.tar.gz -C /usr/local/hadoop/ \
&& echo "export JAVA_HOME=/usr/local/java/jdk1.8.0_261" >> ~/.bashrc \
&& source ~/.bashrc \
&& echo "export JRE_HOME=$JAVA_HOME/jre" >> ~/.bashrc \
&& source ~/.bashrc \
&& echo "export PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/bin" >> ~/.bashrc \
&& echo "export HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.2" >> ~/.bashrc \
&& source ~/.bashrc \
&& echo "export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop" >> ~/.bashrc \
&& echo "export PATH=$PATH:$HADOOP_HOME/bin" >> ~/.bashrc \
&& source ~/.bashrc \
&& echo "export PATH=$PATH:$HADOOP_HOME/sbin" >> ~/.bashrc \
&& source ~/.bashrc \
&& rm -rf $HADOOP_CONFIG_HOME/core-site.xml \
&& rm -rf $HADOOP_CONFIG_HOME/hdfs-site.xml \
&& rm -rf $HADOOP_CONFIG_HOME/yarn-site.xml \
&& rm -rf $HADOOP_CONFIG_HOME/workers \
&& rm -rf $HADOOP_HOME/sbin/start-dfs.sh \
&& rm -rf $HADOOP_HOME/sbin/start-yarn.sh \
&& rm -rf $HADOOP_HOME/sbin/stop-dfs \
&& rm -rf $HADOOP_HOME/sbin/stop-yarn.sh \
&& cp $software_home/core-site.xml $HADOOP_CONFIG_HOME \
&& cp $software_home/hdfs-site.xml $HADOOP_CONFIG_HOME \
&& cp $software_home/yarn-site.xml $HADOOP_CONFIG_HOME \
&& cp $software_home/workers $HADOOP_CONFIG_HOME \
&& cp $software_home/start-dfs.sh $HADOOP_HOME/sbin \
&& cp $software_home/start-yarn.sh $HADOOP_HOME/sbin \
&& cp $software_home/stop-dfs.sh $HADOOP_HOME/sbin \
&& cp $software_home/stop-yarn.sh $HADOOP_HOME/sbin \
&& chmod 777 $HADOOP_HOME/sbin/*.sh \
&& chmod 777 $HADOOP_HOME/bin/*
构建镜像
构建镜像前,需要在Dockerfile同级下创建software文件,以下文件拷贝到本目录下:
core-site.xml
hdfs-site.xml
yarn-site.xml
workers
start-dfs.sh
start-yarn.sh
stop-dfs.sh
stop-yarn.sh
hadoop-3.2.2.tar.gz
jdk-8u261-linux-x64.tar.gz
构建镜像:
docker build -t hqg-hadoop:1.0 .
创建集群专有网络
docker network create --subnet=172.20.0.0/16 hnet
运行hadoop容器
集群网络规划
nn(NameNode) | dn1(RescoureManager) | dn2 | |
指定ip(--ip) | 172.20.1.0 | 172.20.1.1 | 172.20.1.2 |
主机名(--hostname) | nn | dn1 | dn2 |
主机映射(--add-host) | dn1:172.20.1.1 dn2:172.20.1.2 | nn:172.20.1.0 dn2:172.20.1.2 | nn:172.20.1.0 dn1:172.20.1.1 |
端口映射(-p) | 9870:9870 | 8088:8088 | |
指定网络(--network) | hnet | hnet | hnet |
nn节点容器启动命令
docker run -itd -p 9870:9870 --name=nn --hostname=nn --network=hnet --ip=172.20.1.0 --add-host=dn1:172.20.1.1 --add-host=dn2:172.20.1.2 --privileged hqg-hadoop:1.0 /usr/sbin/init
dn1节点容器启动命令
docker run -itd -p 8088:8088 --name=dn1 --hostname=dn1 --network=hnet --ip=172.20.1.1 --add-host=nn:172.20.1.0 --add-host=dn2:172.20.1.2 --privileged hqg-hadoop:1.0 /usr/sbin/init
dn2节点容器启动命令
docker run -itd --name=dn2 --hostname=dn2 --network=hnet --ip=172.20.1.2 --add-host=nn:172.20.1.0 --add-host=dn1:172.20.1.1 --privileged hqg-hadoop:1.0 /usr/sbin/init
启动hadoop集群
格式化namenode(第一次启动格式化NameNode)
hdfs namenode -format
启动HDFS
在NameNode节点上,执行 sbin/start-dfs.sh。
对于root用户,需要在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
启动YARN
在ResourceManager节点上,执行sbin/start-yarn.sh。
对于root用户,需要在start-yarn.sh,stop-yarn.sh顶部添加以下:
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
验证集群
- 查看HDFS的NameNode节点 http://虚拟机/物理机ip:9870/
- 查看YARN的ResourceManager http://虚拟机/物理机ip:8088/
- 上一篇: Oracle数据库随集群启动不同版本总结
- 下一篇: 当领导要求部署weblogic集群时怎么办?
猜你喜欢
- 2025-07-17 Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 2025-07-17 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 2024-10-23 oracle 三种高可用方案 oracle高性能解决方案
- 2024-10-23 看架构专家大话OracleRAG:集群+高可用性+备份与恢复
- 2024-10-23 Oracle 19c集群心跳网络全部配错该如何抢救
- 2024-10-23 快速了解Canal 快速了解汉字知的读音写法等知识点
- 2024-10-23 ES架构分析 es分布式架构原理
- 2024-10-23 详解RAC并发逻辑、硬件架构、软件架构拓扑与原理解析
- 2024-10-23 基于mycat+haproxy+keepalived搭建mysql集群(Haproxy篇)
- 2024-10-23 Oracle基础知识之asm磁盘组 oracleasm磁盘管理
你 发表评论:
欢迎- 613℃几个Oracle空值处理函数 oracle处理null值的函数
- 604℃Oracle分析函数之Lag和Lead()使用
- 593℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 590℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 584℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 578℃【数据统计分析】详解Oracle分组函数之CUBE
- 567℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 559℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)