【CSDN博客迁移】利用Docker搭建大数据处理集群(1)——HDFS和Spark

前言


前面的android项目刚完,项目总结文章还未写完,公司需要研究大数据处理应用平台,任务下达到我们部门了,鉴于部门物理机只有一台,而虚拟机启动太慢的原因,自己动手在Docker搭建了三个三节点的数据分析集群,主要包括Hdfs集群(分布式存储集群),YARN集群(分布式资源管理集群),Spark集群(分布式计算集群)。
在开始正文之前,需要掌握以下基础知识:

  • Linux基础知识(推荐《鸟哥的Linux私房菜》,我早年看的时候是第三版,现在已经有了新版本);
  • Doceker镜像,容器和仓库的概念(推荐《Docker — 从入门到实践》);
  • Hadoop的基础概念和原理;

在Centos7上搭建数据分析集群过程包括:

  • 在Cnetos7上安装Docker并创建Hadoop镜像和三节点容器
  • 在Docker上配置三节点Hdfs集群
  • 在Docker上配置三节点Yarn集群
  • 在Docker上配置三节点Spark集群

(一)安装Docker与创建Hadoop镜像和三节点容器


1.1 安装Dcoker

本文在Cnetos7系统上安装Docker,安装Docker对于Linux系统的要求是
64 位操作系统,内核版本至少为 3.10。

1.1.1 安装Docker

curl -sSL https://get.docker.com/ | sh

1.1.2 配置Docker加速器和开机启动服务

这里需要注册一个阿里云账号,每个账号有自己专属的加速器,专属加速器的地址,根据自己的地址配。

sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart

1.2 在Docker上创建Hadoop镜像

1.2.1 从Docker Hub官网仓库上获取centos镜像库

docker pull centos
#查看镜像库
docker images

1.2.2 生成带有SSH功能的centos的镜像文件

为了后面配置各节点之间的SSH免密码登陆,需要在pull下的centos镜像库种安装SSH,
这里利用 Dockerfile 文件来创建镜像

cd /usr/local

# 创建一个存放带ssh的centos镜像Dockerfile文件的目录
mkdir DockerImagesFiles/centos7.shh

#创建带ssh的centos的Dockerfile 文件
vi Dockerfile

# Dockerfile文件内容
#基于centos镜像库创建
FROM centos
MAINTAINER dys
#安装ssh
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum  install -y openssh-clients

#配置root名
RUN echo "root:123456" | chpasswd
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
#生成ssh key
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

#配置sshd服务
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

1.2.3 根据上面的Dockerfile生成centos7-ssh镜像

docker build -t="centos7-ssh" .
#执行完成后,查看已安装的镜像库
docker images

1.2.4 生成Hadoop镜像库文件

在构建Hadoop镜像库的Dockerfile所在目录下,上传已经下载的 jdk-8u101-linux-x64.tar.gz, hadoop-2.7.3.tar.gz,scala-2.11.8.tgz,spark-2.0.1-bin-hadoop2.7.tgz。

注意:这里要提前在Dockerfile文件配置环境变量,如果镜像库构建完成后,在

容器中配置环境变量是不起作用的。

cd /usr/local

# 创建一个存放hadoop镜像Dockerfile文件的目录
mkdir DockerImagesFiles/hadoop

#创建带ssh的centos的Dockerfile 文件
vi Dockerfile

# Dockerfile文件内容
#基于centos7-ssh构建
FROM centos7-ssh
#安装java
ADD jdk-8u101-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_101 /usr/local/jdk1.8
#配置JAVA环境变量
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH
#安装hadoop
ADD hadoop-2.7.3.tar.gz /usr/local
RUN mv /usr/local/hadoop-2.7.3 /usr/local/hadoop
#配置hadoop环境变量
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH

#安装scala 注意Spark2.0.1对于Scala的版本要求是2.11.x
ADD scala-2.11.8.tgz /usr/local
RUN mv /usr/local/scala-2.11.8 /usr/local/scala2.11.8

#配置scala环境变量
ENV SCALA_HOME /usr/local/scala
ENV PATH $SCALA_HOME/bin:$PATH

#安装spark
ADD spark-2.0.1-bin-hadoop2.7.tgz /usr/local
RUN mv /usr/local/spark-2.0.1-bin-hadoop2.7.tgz /usr/local/spark2.0.1

#配置spark环境变量
ENV SPARK_HOME /usr/local/spark
ENV PATH $SPARK_HOME/bin:$PATH

#创建hdfs账号
RUN useradd hdfs
RUN echo "hdfs:12345678" | chpasswd

RUN yum install -y which sudo

1.2.5 根据上面的Dockerfile构建Hadoop镜像库

docker build -t="hadoop" .
#执行完成后,查看已安装的镜像库
docker images

1.2.6 生成三节点Hadoop容器集群

1.2.6.1首先规划一下节点的主机名称,IP地址(局域网内构建docker镜像时,自动分配172.17.0.1/16网段的IP)和端口号

master 172.17.0.2
slave01 172.17.0.3
slave02 172.17.0.4

1.2.6.2下面在Hadoop镜像上创建三个容器,做为集群的节点

#创建master容器,50070和8088,8080是用来在浏览器中访问hadoop yarn spark #WEB界面,这里分别映射到物理机的50070和8088,8900端口。

#重点注意:容器启动后,映射比较麻烦,最好在这里映射。
docker run   -d -P -p 50070:50070 -p 8088:8088 -p 8080:8900 --name master -h master --add-host slave01:172.17.0.3 --add-host slave02:172.17.0.4 hadoop

#创建slave01容器,在容器host文件,添加hostname,并配置其他节点主机名称和IP地址
docker run   -d -P --name slave01 -h slave01 --add-host master:172.17.0.2 --add-host slave02:172.17.0.4  hadoop

#创建slave02容器
docker run   -d -P --name slave02 -h slave02 --add-host master:172.17.0.2 --add-host slave01:172.17.0.3  hadoop

1.2.6.3 查看已创建的容器并更改hadoop和spark2.0.1目录所属用户

#查看已创建的容器
docker ps -a
#更改hadoop和spark2.0.1目录所属用户
chown -R hdfs:hdfs /usr/local/hadoop
chown -R hdfs:hdfs /usr/local/spark2.0.1

(二)在Docker上配置三节点Hdfs集群


2.1开启三个容器终端

docker exec -it master /bin/bash
docker exec -it slave01 /bin/bash
docker exec -it slave02 /bin/bash

2.1 配置hdfs账号容器各节点间的SSH免密码登陆

分别进入master,slave01,slave02三个容器节点,执行下面命令

#切换到hdfs账号
su hdfs
#生成hdfs账号的key,执行后会有多个输入提示,不用输入任何内容,全部直接回车即可
ssh-keygen
#拷贝到其他节点
ssh-copy-id -i /home/hdfs/.ssh/id_rsa -p 22 hdfs@master
ssh-copy-id -i /home/hdfs/.ssh/id_rsa -p 22 hdfs@slave01
ssh-copy-id -i /home/hdfs/.ssh/id_rsa -p 22 hdfs@slave02
#验证是否设置成功
ssh slave01

2.2 配置hadoop

这里主要配置hdfs,因为我们的计算框架要用spark,所以maprreduce的不需要配置。
进入master容器的hadoop配置目录,需要配置有以下7个文件:hadoop-env.sh,slaves,core-site.xml,hdfs-site.xml,maprd-site.xml,yarn-site.xml

2.2.1 在hadoop-env.sh中配置JAVA_HOME

export JAVA_HOME=/usr/local/jdk1.8

2.2.2 在slaves中配置子节点主机名

进入slaves文件,添加下面名称

slave01
slave02

2.2.3 修改core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000/</value>
    </property>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>file:/usr/local/hadoop/tmp</value>
    </property>
</configuration>

2.2.4 修改hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
</configuration>

2.2.5 修改mapred-site.xml

2.2.5.1 复制mapred-site.xml文件

#这个文件默认不存在,需要从 mapred-site.xml.template 复制过来
cp mapred-site.xml.template mapred-site.xml

2.2.5.2 修改mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

2.2.6 修改yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master:8035</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master:8088</value>
    </property>
</configuration>

2.2.7 master容器配置的hadoop目录分别分发到slave01,slave02节点

scp -r hadoop  slave01:/usr/local/
scp -r hadoop  slave02:/usr/local/

2.3 启动HDFS集群,验证是否搭建成功

#如果配置环境变量,就直接执行
hdfs namenode -format     #格式化namenode
start-dfs.sh               #启动dfs 

# 在 master上执行jps 
$ jps
#运行结果应该包含下面的进程
1200 SecondaryNameNode
3622 Jps
988 NameNode

# 在 slave上执行jps 
$ jps   
#运行结果应该包含下面的进程
2213 Jps
1962 DataNode

浏览器输入http://本机ip地址:50070 ,可以浏览hadoop node管理界面


hadoop界面.png

(二)在Docker上配置三节点Yarn集群

上面已经配置成功,直接启动yarn集群

#启动yarn
start-yarn.sh             

浏览器输入http://本机ip地址:8088/cluster 可以浏览节点;


yarn集群界面.png

(三) 在Docker上配置三节点spark集群


3.1 配置spark

进入master容器的spark配置目录,需要配置有两个文件:spark-env.sh,slaves

3.1.1 配置spark-env.sh

cd /usr/lcoal/spark2.0.1/conf
 #从配置模板复制
cp spark-env.sh.template spark-env.sh  
#添加配置内容
vi spark-env.sh    

在spark-env.sh末尾添加以下内容:

export SCALA_HOME=/usr/local/scala2.11.8
export JAVA_HOME=/usr/local/jdk1.8
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
SPARK_MASTER_IP=master
SPARK_LOCAL_DIRS=/usr/local/spark2.0.1
SPARK_DRIVER_MEMORY=1G

3.1.2 在slaves文件下填上slave主机名

slave01
slave02

3.1.3 master容器配置的spark目录分别分发到slave01,slave02节点

scp -r spark2.0.1  slave01:/usr/local/
scp -r spark2.0.1  slave02:/usr/local/

3.2 启动spark集群

start-all.sh

浏览Spark的Web管理页面: http://本机ip地址:8900


spark集群界面.png

总结

本文只是搭建了数据分析的开发环境,作为开发测试使用,距离生成环境的标准还很远。例如容器节点的自动化扩容,容器的CPU内存,调整,有待继续研究。

参考文章

1.https://www.sdk.cn/news/5278 . Docker部署Hadoop集群
2.http://wuchong.me/blog/2015/04/04/spark-on-yarn-cluster-deploy/ .Spark On YARN 集群安装部署
3.http://shinest.cc/static/post/scala/hadoop_cluster_on_docker.md.html . Hadoop Cluster On Docker

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容