Docker 搭建大数据平台

Hadoop Hive Flink

Docker 镜像

镜像配置

  • 系统:centos-7
  • JAVA:1.8.0_275
  • SCALA:2.12.13
  • Hadoop:3.1.4
docker pull cpq2020/hadoop-master

镜像中配置了基本的软件vim,ssh 等服务

配置sshd

安装好sshd之后,我们需要配置ssh无密码连接本地sshd服务,如下命令:

ssh-keygen -t rsa #一直按回车键即可
cat id_dsa.pub >> authorized_keys

保存当前镜像为hadoop-master 命令如下:

# 查看当前 hadoop-master 对应的镜像ID
docker ps
docker commit $CONTAINER_ID hadoop-master

安装Hadoop

启动镜像

docker run -it --name master hadoop-master /usr/bish

配置Hadoop集群

打开hadoop_env.sh文件,修改JAVA_HOME

#假设现在/usr/local/hadoop目录下
vim etc/hadoop/hadoop-env.sh
# 将export JAVA_HOME=${JAVA_HOME}替换成export 
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/

打开core-site.xml,输入一下内容:

<configuration>
      <property>
          <name>hadoop.tmp.dir</name>
          <value>file:/root/data/hadoop/tmp</value>
          <description>Abase for other temporary directories.</description>
      </property>
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://master:9000</value>
      </property>
</configuration>

打开hdfs-site.xml输入以下内容:

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
    <final>true</final>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/root/data/hadoop/hdfs/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/root/data/hadoop/hdfs/datanode</value>
  </property>
</configuration>

修改mapred-site.xml(复制mapred-site.xml.template,再修改文件名),输入以下内容:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

修改yarn-site.xml文件,输入以下内容:

<configuration>
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>master</value>
      </property>
</configuration>

打开master上的works文件,输入两个slave的主机名:

vim etc/hadoop/slaves
# 将localhost替换成两个slave的主机名
slave1
slave2

保存这个镜像,在其他终端输入如下命令:

# 查看当前 hadoop-master 对应的镜像ID
docker ps
docker commit $CONTAINER_ID hadoop-master
# 为每个节点创建对应镜像
docker commit $CONTAINER_ID hadoop-slave1
docker commit $CONTAINER_ID hadoop-slave1

创建hadoop内部网络

#指定固定ip号段
docker network create --driver=bridge --subnet=192.168.10.0/24  hadoop

在三个终端上开启三个容器运行ubuntu/hadoopinstalled镜像,分别表示Hadoop集群中的master,slave1和slave2

docker run --hostname master --name master  -d -P -p 50070:9870 -p 8088:8088 --privileged=true --network hadoop --add-host=master:192.168.10.120  --add-host=slave1:192.168.10.121 --add-host=slave2:192.168.10.122 --ip 192.168.10.120  hadoop-master  /usr/sbin/init
docker run --hostname slave1 --name slave1  -d -P --privileged=true --network hadoop --add-host=master:192.168.10.120  --add-host=slave1:192.168.10.121 --add-host=slave2:192.168.10.122 --ip 192.168.10.121  hadoop-slave1  /usr/sbin/init
docker run --hostname slave2 --name slave2  -d -P --privileged=true --network hadoop --add-host=master:192.168.10.120  --add-host=slave1:192.168.10.121 --add-host=slave2:192.168.10.122 --ip 192.168.10.122 hadoop-slave2  /usr/sbin/init

docker 参数

  • –hostname 指定主机名
  • –name 为容器指定一个名称
  • -d 后台运行
  • -P 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • –privileged=true 获取root权限
  • –network 指定网络
  • –add-host 添加自定义hosts
  • –ip 指定容器ip
  • hadoop-master 镜像名称
  • /usr/sbin/init 启动后执行的命令

启动集群

在master终端上,首先进入/usr/local/hadoop,然后运行如下命令:

#格式化namenode元数据
cd /usr/local/hadoopbin/hdfs namenode -format
#启动集群服务
sbin/start-all.sh

在master,slave1和slave2上分别运行命令jps查看运行结果

docker解决大并发 docker大数据集群_hdfs


docker解决大并发 docker大数据集群_hadoop_02


docker解决大并发 docker大数据集群_docker_03


可以看到服务起来了,本地范围宿主机ip的8088及9870端口可以看到监控信息

查看分布式文件系统状态

hdfs dfsadmin -report

运行测试用例WordCount

在 HDFS 中创建 input 文件夹

hdfs dfs -mkdir /user/hadoop/input/wordcount

上传 file1.txt 文件到 HDFS 中

file1.txt 内容

hadoop hadoop hive
spark
flink spark
hdfs dfs -put file1.txt /user/hadoop/input/wordcount

运作 wordcount 例子程序

yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar wordcount /user/hadoop/input/wordcount /user/root/wordcountoutput

查看 HDFS 中的 /user/root/wordcountoutput 文件夹的内容

hdfs dfs -cat  /user/root/wordcountoutput/part-r-00000

flink	1
hadoop	2
hive	1
spark	2

Hadoop 部分结束了


HIVE部分

(更新中。。。)

参考

厦门大学数据库实验室-使用Docker搭建Hadoop分布式集群

Rango-基于Docker搭建Hadoop+Hive