docker for mac 安装spark 2.2.0 + hadoop 2.8.0 集群

来源:互联网 发布:淘宝新手入门教程视频 编辑:程序博客网 时间:2024/06/08 09:37

1、简述

本文在mac上,使用docker搭建spark 2.2 + hadoop 2.8.1集群,实现spark on yarn的任务提交。

2、docker安装

下载docker for mac 17.06.0-ce-mac19,可通过以下任意一个途径下载:
  • 官网下载:https://www.docker.com/docker-mac
  • 百度网盘下载 链接: http://pan.baidu.com/s/1b9nxZS 密码: ih9m

    下载后,直接双击,和其他mac软件一样安装即可。安装完成后,会多一个docker的图标:
    这里写图片描述
    双击docker的图标即可启动docker:
    这里写图片描述
    为了提高下载镜像的速度,设置国内镜像库:复制地址加速器地址(本文使用中科大的镜像:https://docker.mirrors.ustc.edu.cn),将地址填入Docker的配置中,路径如下:Preferences–>Daemon–>Basic–>Registry mirrors,然后重启。

3、制作镜像

启动docker之后,打开命令行,输入docker pull centos:6下载centos 6.9;然后输入 `docker run --name centos-6.9 -itd centos:6/bin/bash`,创建一个容器,进行相关软件安装和环境配置。

1)下载安装包

  • 下载jdk 1.8: 链接: https://pan.baidu.com/s/1c1OIxsk 密码: 8gej
  • 下载hadoop 2.8:链接: https://pan.baidu.com/s/1miLu6Nm 密码: ei8r
  • 下载spark 2.2.0:链接: https://pan.baidu.com/s/1miICFg8 密码: sndd
  • 下载scala:wget https://downloads.lightbend.com/scala/2.12.3/scala-2.12.3.tgz

使用docker cp 命令将以上安装包拷贝到容器根目录

2)进入容器

使用命令docker exec -it containerid /bin/bash进入容器

3)安装ssh等基础服务

curl http://mirrors.aliyun.com/repo/Centos-6.repo > /etc/yum.repos.d/CentOS-Base-6-aliyun.repomv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bakyum makecacheyum install -y net-tools which openssh-clients openssh-server iproute.x86_64 wget

修改ssh配置sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config,然后重启ssh 服务service sshd restart
使用passwd设置账号密码为123456
免密码登陆配置cd ~;ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa;cd .ssh;cat id_dsa.pub >> authorized_keys
4)安装jdk
安装命令:rpm -ivh jdk-8u144-Linux-x64.rpm
获取安装目录:update-alternatives --config java
在~/.bashrc中加入

export JAVA_HOME=/usr/Java/jdk1.8.0_144/export PATH=$JAVA_HOME:$PATH

5)安装scala
解压到scala安装包到/root/.local
在~/.bashrc中加入:

export SCALA_HOME=/root/.local/scala-2.12.3/

6)安装hadoop 2.8.0
1 - 解压安装包到/root/.local

tar xvzf hadoop-2.8.0.tar.gz

2 - 在~/.bashrc中加入:

export PATH=$JAVA_HOME:$PATHexport HADOOP_HOME=/root/.local/hadoop-2.8.0export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoopexport PATH=$PATH:$HADOOP_HOME/binexport PATH=$PATH:$HADOOP_HOME/sbinexport SPARK_DIST_CLASSPATH=$(hadoop classpath)

3 - 创建hadoop集群所需目录:

cd $HADOOP_HOME;mkdir tmp;mkdir namenode;mkdir datanode;cd $HADOOP_CONFIG_HOME/

4 - 修改core-site.xml:

<configuration>    <property>            <name>hadoop.tmp.dir</name>            <value>/root/.local/hadoop-2.8.0/tmp</value>            <description>A base for other temporary directories.</description>    </property>    <property>            <name>fs.default.name</name>            <value>hdfs://master:9000</value>            <final>true</final>            <description>The name of the default file system.             A URI whose scheme and authority determine the             FileSystem implementation. The uri's scheme             determines the config property (fs.SCHEME.impl)             naming the FileSystem implementation class. The             uri's authority is used to determine the host,            port, etc. for a filesystem.                    </description>    </property></configuration>

其中,hadoop.tmp.dir配置项值即为此前命令中创建的临时目录路径;fs.default.name配置为hdfs://master:9000,指向的是一个Master节点的主机(后续我们做集群配置的时候,自然会配置这个节点,先写在这里)

5 - 配置hdfs-site.xml:

<configuration>    <property>        <name>dfs.replication</name>        <value>2</value>        <final>true</final>        <description>Default block replication.        The actual number of replications can be specified when the file is created.        The default is used if replication is not specified in create time.        </description>    </property>    <property>        <name>dfs.namenode.name.dir</name>        <value>/root/.local/hadoop-2.8.0/namenode</value>        <final>true</final>    </property>    <property>        <name>dfs.datanode.data.dir</name>        <value>/root/.local/hadoop-2.8.0/datanode</value>        <final>true</final>    </property></configuration>

我们后续搭建集群环境时,将配置一个Master节点和两个Slave节点。所以dfs.replication配置为2。
dfs.namenode.name.dir和dfs.datanode.data.dir分别配置为之前创建的NameNode和DataNode的目录路径。

6 - 配置mapred-site.xml:

<configuration>    <property>        <name>mapred.job.tracker</name>        <value>master:9001</value>        <description>The host and port that the MapReduce job tracker runs        at.  If "local", then jobs are run in-process as a single map        and reduce task.        </description>    </property></configuration>

这里只有一个配置项mapred.job.tracker,我们指向master节点机器。

7 - 配置yarn-site.xml:

<configuration>    <property>        <name>yarn.nodemanager.vmem-check-enabled</name>        <value>false</value>        <description>Whether virtual memory limits will be enforced for containers</description>    </property></configuration>

yarn.nodemanager.vmem-check-enabled是为了防止启动任务时,报Container [pid=4879,containerID=container_1502105785590_0004_02_000001] is running beyond virtual memory limits. Current usage: 232.7 MB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.错误

8 - 格式化datanode:

/root/.local/hadoop-2.8.0/bin/hadoop namenode -format

7)安装spark 2.2.0
下载安装包 链接: https://pan.baidu.com/s/1o8iGSWU 密码: kh34。
解压到~/.local/,修改spark-env.sh,末尾增加

export SCALA_HOME=/root/.local/scala-2.12.3/export JAVA_HOME=/usr/java/jdk1.8.0_144/export HADOOP_HOME=/root/.local/hadoop-2.8.0export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopSPARK_MASTER_IP=masterSPARK_LOCAL_DIRS=/root/.local/spark-2.2.0-bin-without-hadoopSPARK_DRIVER_MEMORY=1G

slaves文件中加入:

slave01slave02

8)保存镜像

docker commit -m "centos-6.9 with spark 2.2.0 and hadoop 2.8.0" 67f66c301c35 centos:with-saprk-hadoop

67f66c301c35为容器id

4、使用保存的镜像,搭建集群

#端口50070和8088,8080是用来在浏览器中访问hadoopyarnsparkWEB界面,这里分别映射到物理机的50070和8088,8080端口。docker run -itd -P -p 50070:50070 -p 8088:8088 -p 8080:8080 --name master -h master --add-host slave01:172.17.0.4 --add-host slave02:172.17.0.5 centos:with-saprk-hadoopdocker run -itd -P --name slave01 -h slave01 --add-host master:172.17.0.3 --add-host slave02:172.17.0.5  centos:with-saprk-hadoopdocker run -itd -P --name slave02 -h slave02 --add-host master:172.17.0.3 --add-host slave01:172.17.0.4  centos:with-saprk-hadoop

进入容器(如,进入master节点,使用命令docker exec -it master /bin/bash),检查/etc/hosts是否正确,并测试ssh能否免密码登陆
进入master容器,启动hadoop和spark集群:

cd /root/.local/hadoop-2.8.0/sbin;sh start-all.sh   cd /root/.local/spark-2.2.0-bin-without-hadoop/sbin; sh start-all.sh

如果仅执行提交spark任务到yarn集群,不启动spark集群也没有问题。

5、启动后的效果

成功启动后,以下几个界面:

  • hadoop node管理界面(http://127.0.0.1:50070)
    这里写图片描述
  • 浏览节点(http://127.0.0.1:8088/cluster):
    这里写图片描述

  • spark界面(http://127.0.0.1:8080/):
    这里写图片描述

6、结语

最简单的集群搭建搞定,复杂的一些设置都没有涉及,敬请期待下一篇吧。