docker构建hadoop集群

本章简介

  1. 以ubuntu:16.04作为基础镜像。
  2. 在基础镜像内安装一个hadoop,并制作成镜像hadoop。
  3. 启动多个hadoop容器(一个master,两个slave)。
  4. 验证可用性。
  5. 使用hadoop集群。

基础镜像

第一步,拉取基础docker镜像。

# 拉取镜像
sudo docker pull ubuntu:16.04
# 启动容器
docker run -it --name hdp ubuntu:16.04

安装hadoop

以下为容器内的操作:

## 修改资源
echo "deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe" > /etc/apt/sources.list
## 环境安装
apt update
apt install openjdk-8-jdk
apt install scala
apt install vim
apt install net-tools
apt install openssh-server
apt install openssh-client
## ssh
cd ~
ssh-keygen -t rsa -P ""
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
service ssh start
ssh 127.0.0.1
## 设置ssh为启动
echo service ssh start >> ~/.bashrc

安装hadoop

### 在本地系统下载:https://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
### 复制到容器内:docker cp hadoop-3.2.1.tar.gz   hdp:/root
tar -zxvf hadoop-3.2.1.tar.gz -C /usr/local
cd /usr/local
mv hadoop-3.2.1 hadoop

## 修改环境变量
echo "
#java
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre    
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib    
export PATH=${JAVA_HOME}/bin:$PATH
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME 
export HADOOP_INSTALL=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec 
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_NAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
" >> /etc/profile
source /etc/profile

配置hadoop

## 修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh
echo "
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
" >> /usr/local/hadoop/etc/hadoop/hadoop-env.sh
## /usr/local/hadoop/etc/hadoop下的core-site.xml
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet type=\"text/xsl\" href=\"configuration.xsl\"?>
<configuration>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/hadoop/tmp</value>
    </property>
</configuration>
" > /usr/local/hadoop/etc/hadoop/core-site.xml
## /usr/local/hadoop/etc/hadoop下的hdfs-site.xml
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet type=\"text/xsl\" href=\"configuration.xsl\"?>
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/root/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.namenode.data.dir</name>
        <value>/root/hadoop/hdfs/data</value>
    </property>
</configuration>
" > /usr/local/hadoop/etc/hadoop/hdfs-site.xml
## /usr/local/hadoop/etc/hadoop下的mapred-site.xml
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet type=\"text/xsl\" href=\"configuration.xsl\"?>
<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>
" > /usr/local/hadoop/etc/hadoop/mapred-site.xml
## /usr/local/hadoop/etc/hadoop下的yarn-site.xml
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet type=\"text/xsl\" href=\"configuration.xsl\"?>
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>
" > /usr/local/hadoop/etc/hadoop/yarn-site.xml
## /usr/local/hadoop/etc/hadoop下的 workers
echo "slave1
slave2
" > /usr/local/hadoop/etc/hadoop/workers
## 初始化节点,
$HADOOP_HOME/bin/hadoop namenode -format
# /************************************************************
# SHUTDOWN_MSG: Shutting down NameNode at befc49964aae/172.17.0.2
# ************************************************************/

保存镜像

docker commit -m "hadoop" bef ubuntu:hadoop
# sha256:5c9093ecff959c7dcf880f416cb4bab2d222bb4908c721ce40638abbec628e23

构建集群

## 构建docker网络
docker network create hadoop

## 启动一个master 两个slave
docker run -it --rm --network hadoop -h master --name master -p 9870:9870 -p 8088:8088 ubuntu:hadoop /bin/bash
docker run -it --rm --network hadoop -h slave1 --name slave1 ubuntu:hadoop /bin/bash
docker run -it --rm --network hadoop -h slave2 --name slave2 ubuntu:hadoop /bin/bash

### 进入master容器,启动hadoop
cd /usr/local/hadoop/sbin/ && ./start-all.sh

访问集群

localhost:9870

localhost:8088

示例

cat ../README.txt > ../file.txt
./hadoop fs -mkdir /input
./hadoop fs -put ../file.txt /input
./hadoop fs -ls /input
./hadoop jar ../share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /input /output

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用Docker部署Hadoop集群时,可以按照以下步骤进行操作: 1. 安装Docker:首先,确保你的机器上已经安装了Docker。你可以从Docker官方网站上下载并按照指南进行安装。 2. 创建Docker镜像:为了部署Hadoop集群,你需要创建一个包含HadoopDocker镜像。你可以使用Dockerfile来定义镜像的配置和依赖项。在Dockerfile中,你需要下载和安装Hadoop,并进行必要的配置。 3. 构建镜像:使用Docker命令构建镜像。在命令行中,进入到包含Dockerfile的目录,并执行以下命令: ``` docker build -t hadoop-image . ``` 4. 创建容器:使用Docker命令创建多个容器来模拟Hadoop集群中的不同角色(如NameNode、DataNode等)。你可以使用Docker Compose来定义和管理容器。在Compose文件中,你可以指定每个容器的角色、网络配置和挂载点等。 5. 启动容器:使用Docker Compose启动容器。在命令行中,进入到Compose文件所在的目录,并执行以下命令: ``` docker-compose up -d ``` 6. 配置Hadoop集群:一旦容器启动,你可以通过进入容器来配置Hadoop集群。使用以下命令进入容器: ``` docker exec -it <container_name> bash ``` 7. 在容器中配置Hadoop:在容器中,你可以编辑Hadoop的配置文件(如core-site.xml、hdfs-site.xml等)来设置集群的参数。确保配置文件中的各个节点的IP地址和端口号正确。 8. 启动Hadoop集群:在容器中,使用以下命令启动Hadoop集群: ``` start-dfs.sh start-yarn.sh ``` 9. 验证集群:使用以下命令验证Hadoop集群是否正常运行: ``` hdfs dfsadmin -report yarn node -list ``` 10. 使用Hadoop集群:一旦集群正常运行,你可以使用Hadoop命令行工具或编写MapReduce程序来进行数据处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值