继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Docker 搭建的大数据环境,一键启停!

2019-12-27 09:34:1410980浏览

御风

1实战 · 3手记 · 1推荐
TA的实战

代码未动,环境先行

我是一个Docker 爱好者。我在学习大数据相关技术的时候,想到了一个点子:

  • 用docker搭建一个大数据开发环境!

这么做有什么好处呢 ?

我只要有了这个docker-compose.yml 容器编排描述文件,我就可以在任何一个安装docker 软件的机器里,启动我的大数据环境。
一劳永逸的事情,不正是我们程序员每天都在做并且是努力的目标吗?

如何做?

找遍了国内的博客和帖子,都没有合适的答案。
我只能自己来。

docker hub

首先我去到docker hub 。 这个就是 github的 docker 版本。
我在里面搜索了 很多 Hadoop , spark 等等关键词,找到了一家公司;
图片描述
这家公司 几乎把所有的 大数据组件都做成了 docker image 。 而且是细粒度,分角色 去划分的。真的太棒了。
比如 你现在看到的这个图片,就是 他针对于 Hadoop 中 namenode 这一角色做的docker image。如果你在其之上做一些封装和个性化定制将会变得特别容易。

于是我就从他的Registry 中找我想要的大数据组件

  • Hadoop
  • Hive
  • Spark

easy , 全都找到了。

虚拟机

接线来我们就需要 在虚拟机中安装docker了。
什么 还需要虚拟机 ?
这里我说一下,安装一个虚拟机吧,windows 各种不方便。(mac 的朋友可以飘过)。

虚拟机我使用 virtual box , 安装的 ubuntu 。
然后我就开始安装docker了。
安装了docker 还需要安装他的孪生兄弟,docker-compose
图片描述

docker-compose.yml

docker-compose 让docker 容器的编排变得简单。
docker-compose.yml 记录了如何编排的过程。他是一个描述文件!
如下 是我大数据环境的docker-compose.yml 文件!

version: '2' 
services:
  namenode:
    image: bde2020/hadoop-namenode:1.1.0-hadoop2.8-java8
    container_name: namenode
    volumes:
      - ./data/namenode:/hadoop/dfs/name
    environment:
      - CLUSTER_NAME=test
    env_file:
      - ./hadoop-hive.env
    ports:
      - 50070:50070
      - 8020:8020  
  datanode:
    image: bde2020/hadoop-datanode:1.1.0-hadoop2.8-java8
    depends_on: 
      - namenode
    volumes:
      - ./data/datanode:/hadoop/dfs/data
    env_file:
      - ./hadoop-hive.env
    ports:
      - 50075:50075
  hive-server:
    image: bde2020/hive:2.1.0-postgresql-metastore
    container_name: hive-server
    env_file:
      - ./hadoop-hive.env
    environment:
      - "HIVE_CORE_CONF_javax_jdo_option_ConnectionURL=jdbc:postgresql://hive-metastore/metastore"
    ports:
      - "10000:10000"
  hive-metastore:
    image: bde2020/hive:2.1.0-postgresql-metastore
    container_name: hive-metastore
    env_file:
      - ./hadoop-hive.env
    command: /opt/hive/bin/hive --service metastore
    ports:
      - 9083:9083
  hive-metastore-postgresql:
    image: bde2020/hive-metastore-postgresql:2.1.0
    ports:
      - 5432:5432
    volumes:
      - ./data/postgresql/:/var/lib/postgresql/data
  spark-master:
    image: bde2020/spark-master:2.1.0-hadoop2.8-hive-java8
    container_name: spark-master
    ports:
      - 8080:8080
      - 7077:7077
    env_file:
      - ./hadoop-hive.env
  spark-worker:
    image: bde2020/spark-worker:2.1.0-hadoop2.8-hive-java8
    depends_on:
      - spark-master
    environment:
      - SPARK_MASTER=spark://spark-master:7077
    ports:
      - "8081:8081"
    env_file:
      - ./hadoop-hive.env
  mysql-server:
    image: mysql:5.7
    container_name: mysql-server
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=zhangyang517
    volumes:
      - ./data/mysql:/var/lib/mysql

  elasticsearch:
    image: elasticsearch:6.5.3
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
      - "9300:9300"
    networks: 
      - es_network
  kibana:
    image: kibana:6.5.3
    ports:
      - "5601:5601"
    networks: 
      - es_network

networks:
  es_network:
    external: true

后来我需要用到 elasticsearch 和 kibana , 我就直接加上去了。真的非常方便。
最重要的是 他可以 轻松的 share 给你的小伙伴,好基友。

接下来我们需要写一个启动脚本,一个停止脚本。这样就能实现一键启停了。
run.sh

#!/bin/bash

docker-compose -f docker-compose.yml up -d namenode hive-metastore-postgresql
docker-compose -f docker-compose.yml up -d datanode hive-metastore
sleep 5
docker-compose -f docker-compose.yml up -d hive-server
docker-compose -f docker-compose.yml up -d spark-master spark-worker
docker-compose -f docker-compose.yml up -d mysql-server
#docker-compose -f docker-compose.yml up -d elasticsearch
#docker-compose -f docker-compose.yml up -d kibana
my_ip=`ip route get 1|awk '{print $NF;exit}'`
echo "Namenode: http://${my_ip}:50070"
echo "Datanode: http://${my_ip}:50075"
echo "Spark-master: http://${my_ip}:8080"

stop.sh

#!/bin/bash
docker-compose stop

来看下效果:
图片描述

启动成功了。验证一下
图片描述

图片描述

图片描述

受这次实践的启发,新课程《Spark + Elasticsearch 构建电商用户标签系统实现精准营销》就是基于 docker 搭建的 开发环境。一键启停,非常简单。
让你能够把更多的时间和精力,放到技术和业务上。

而且在新的课程中我也会讲到docker的相关技术细节。包括数据卷映射,windows 打通虚拟机docker 容器网络。一边学大数据技术,一边脑补docker,好high哟。

打开App,阅读手记
44人推荐
发表评论
随时随地看视频慕课网APP

热门评论

漏了一个配置文件:

hadoop-hive.env

CORE_CONF_fs_defaultFS=hdfs://namenode:8020


搭建好了之后,所有容器都是正常且能够打开,hive连接正常,但是上传到hdfs出现报错求大佬解答。。

namenode | java.io.IOException: File /upload/test.csv could only be replicated to 0 nodes instead of minReplication (=1). There are 1 datanode(s) running and 1 node(s) are excluded in this operation.


namenode | at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1733)

单台宿主机上使用 docker-compose 快速部署一个 docker 的大数据环境是挺方便的, 但如果想在多个宿主机上docker部署的话貌似就有些麻烦了, 这方面老师有什么好的建议么

查看全部评论