美文网首页我爱编程
容器、微服务、深度学习和阿里云

容器、微服务、深度学习和阿里云

作者: 阿呆少爷 | 来源:发表于2016-11-08 20:44 被阅读774次

    今年去参加Qcon上海2016开发者大会,发现大家都在讲容器、微服务、深度学习这些高端的东西,所以抓紧时间学习和总结了一下,给大家吹吹牛,算是不虚此行吧。

    容器

    基于Linux内核中的Control Groupsnamespace技术,对运行的进程做隔离和控制。Linux内核还在不断创新中,《Unix 环境高级编程》没有包含这些新技术,所以很多人对此一无所知。

    不同于一般的虚拟化技术,在host中可以看到容器里面运行的进程。image和container的关系就像是可执行程序和进程的关系。

    22957 ?        Sl     0:00  |   \_ docker-containerd-shim 9f4669fd46ab076cca3b71d67f697b1e9768e351bc40be3a85fa4e02eb92720a /var/run/docker/libcontainerd/9f4669fd46ab076cca3b
    22971 pts/4    Ss     0:00  |   |   \_ sh -c service ssh start; bash
    23029 ?        Ss     0:00  |   |       \_ /usr/sbin/sshd
    23032 pts/4    S+     0:00  |   |       \_ bash
    23593 ?        Sl    29:49  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_datanode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/local/h
    24149 ?        Sl    36:09  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_nodemanager -Xmx1000m -Dhadoop.log.dir=/usr/local/hadoop/logs -Dyarn.log.dir=/us
    23065 ?        Sl     0:00  |   \_ docker-containerd-shim 1262b62afcac0c41ede4c28484a9697246e67c87c3945c1dd16cff3319689514 /var/run/docker/libcontainerd/1262b62afcac0c41ede4
    23079 pts/5    Ss     0:00  |   |   \_ sh -c service ssh start; bash
    23138 ?        Ss     0:00  |   |       \_ /usr/sbin/sshd
    23141 pts/5    S+     0:00  |   |       \_ bash
    23591 ?        Sl    29:02  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_datanode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/usr/local/h
    24167 ?        Sl    35:48  |   |       \_ /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_nodemanager -Xmx1000m -Dhadoop.log.dir=/usr/local/hadoop/logs -Dyarn.log.dir=/us
    

    但是容器看不到host和别的容器的信息。

    root@hadoop-master:~# ps xf
      PID TTY      STAT   TIME COMMAND
      579 ?        Sl     0:08 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_resourcemanager -Xmx1000m -Dhadoo
      120 ?        Ss     0:00 bash
      904 ?        R+     0:00  \_ ps xf
       93 ?        Ss+    0:00 bash
        1 ?        Ss     0:00 sh -c service ssh start; bash
       31 ?        Ss     0:00 /usr/sbin/sshd
       34 ?        S+     0:00 bash
      239 ?        Sl     0:05 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_namenode -Xmx1000m -Djava.net.pre
      428 ?        Sl     0:03 /usr/lib/jvm/java-7-openjdk-amd64/bin/java -Dproc_secondarynamenode -Xmx1000m -Djav
    

    有了docker,学习真的是一件很容易的事情。比如要搭建一个多节点的Hadoop集群,社区早有人做好了镜像,pull下来就能跑得飞起。参考文章:基于Docker搭建Hadoop集群之升级版。例子中创建了三个容器,一个master(跑yarn),两个slave(跑dfs),这样就有了一个三节点的集群,然后把Hadoop集群跑起来。

    还有比这更简单的Hadoop搭建的学习环境吗?

    screenshot.png
    root@hadoop-master:~# ./run-wordcount.sh 
    16/11/08 12:28:32 INFO client.RMProxy: Connecting to ResourceManager at hadoop-master/172.20.0.2:8032
    16/11/08 12:28:33 INFO input.FileInputFormat: Total input paths to process : 2
    16/11/08 12:28:33 INFO mapreduce.JobSubmitter: number of splits:2
    16/11/08 12:28:33 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1478607997885_0001
    16/11/08 12:28:34 INFO impl.YarnClientImpl: Submitted application application_1478607997885_0001
    16/11/08 12:28:34 INFO mapreduce.Job: The url to track the job: http://hadoop-master:8088/proxy/application_1478607997885_0001/
    16/11/08 12:28:34 INFO mapreduce.Job: Running job: job_1478607997885_0001
    16/11/08 12:28:43 INFO mapreduce.Job: Job job_1478607997885_0001 running in uber mode : false
    16/11/08 12:28:43 INFO mapreduce.Job:  map 0% reduce 0%
    16/11/08 12:28:52 INFO mapreduce.Job:  map 50% reduce 0%
    16/11/08 12:28:53 INFO mapreduce.Job:  map 100% reduce 0%
    16/11/08 12:28:59 INFO mapreduce.Job:  map 100% reduce 100%
    16/11/08 12:28:59 INFO mapreduce.Job: Job job_1478607997885_0001 completed successfully
    16/11/08 12:28:59 INFO mapreduce.Job: Counters: 49
        File System Counters
            FILE: Number of bytes read=56
            FILE: Number of bytes written=352398
            FILE: Number of read operations=0
            FILE: Number of large read operations=0
            FILE: Number of write operations=0
            HDFS: Number of bytes read=258
            HDFS: Number of bytes written=26
            HDFS: Number of read operations=9
            HDFS: Number of large read operations=0
            HDFS: Number of write operations=2
        Job Counters 
            Launched map tasks=2
            Launched reduce tasks=1
            Data-local map tasks=2
            Total time spent by all maps in occupied slots (ms)=14221
            Total time spent by all reduces in occupied slots (ms)=4203
            Total time spent by all map tasks (ms)=14221
            Total time spent by all reduce tasks (ms)=4203
            Total vcore-milliseconds taken by all map tasks=14221
            Total vcore-milliseconds taken by all reduce tasks=4203
            Total megabyte-milliseconds taken by all map tasks=14562304
            Total megabyte-milliseconds taken by all reduce tasks=4303872
        Map-Reduce Framework
            Map input records=2
            Map output records=4
            Map output bytes=42
            Map output materialized bytes=62
            Input split bytes=232
            Combine input records=4
            Combine output records=4
            Reduce input groups=3
            Reduce shuffle bytes=62
            Reduce input records=4
            Reduce output records=3
            Spilled Records=8
            Shuffled Maps =2
            Failed Shuffles=0
            Merged Map outputs=2
            GC time elapsed (ms)=141
            CPU time spent (ms)=1450
            Physical memory (bytes) snapshot=798035968
            Virtual memory (bytes) snapshot=2619658240
            Total committed heap usage (bytes)=509607936
        Shuffle Errors
            BAD_ID=0
            CONNECTION=0
            IO_ERROR=0
            WRONG_LENGTH=0
            WRONG_MAP=0
            WRONG_REDUCE=0
        File Input Format Counters 
            Bytes Read=26
        File Output Format Counters 
            Bytes Written=26
    
    input file1.txt:
    Hello Hadoop
    
    input file2.txt:
    Hello Docker
    
    wordcount output:
    Docker  1
    Hadoop  1
    Hello   2
    

    aufs(Advanced multi layered unification filesystem)也是相当有意思。

    ~# docker pull xuyecan/ubuntu-shadowsocks
    Using default tag: latest
    latest: Pulling from xuyecan/ubuntu-shadowsocks
    bf5d46315322: Already exists 
    9f13e0ac480c: Already exists 
    e8988b5b3097: Already exists 
    40af181810e7: Already exists 
    e6f7c7e5c03e: Already exists 
    64995ac659ee: Pull complete 
    Digest: sha256:0cfb5275581be3e6a5cce3f230ff9c3ef714f3c9291b76eb41e2f47d7362a994
    Status: Downloaded newer image for xuyecan/ubuntu-shadowsocks:latest
    

    Docker for Mac

    Mac上使用Docker也是非常简单的呢。首先下载并安装https://download.docker.com/mac/stable/Docker.dmg,然后把App启动起来。因为官方源比较慢,可以配置一下阿里云的镜像:https://imuewcw.mirror.acs.aliyun.com

    screenshot.png

    配置完成之后,点击下方Apply & Restart就好了。以前想要在Linux环境下测试一些东西可麻烦了,现在有了Docker for Mac,在Mac上拉一个Ubuntu,用起来真的很方便。

    [~]$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    nginx               latest              05a60462f8ba        5 days ago          181.5 MB
    ubuntu              latest              f753707788c5        4 weeks ago         127.2 MB
    [~]$ docker run -ti f753707788c5
    root@76cb78b38af5:/# cat /etc/*release
    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=16.04
    DISTRIB_CODENAME=xenial
    DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
    NAME="Ubuntu"
    VERSION="16.04.1 LTS (Xenial Xerus)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 16.04.1 LTS"
    VERSION_ID="16.04"
    HOME_URL="http://www.ubuntu.com/"
    SUPPORT_URL="http://help.ubuntu.com/"
    BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
    UBUNTU_CODENAME=xenial
    

    CoreOS

    CoreOS是一个非常极端的Linux发行版,它没有传统的包管理系统,比如yum和apt-get,完全使用docker来做包管理。比如要使用gcc,那么需要去pull一个gcc的image,然后通过目录共享的方式来编译代码。

    CoreOS自带了fleet做服务的管理,fleet大大方便了运维同学管理服务。CoreOS fleet之初体验这篇文章通过一个demo较好地讲述了fleet的使用。

    阿里云与时俱进,也提供CoreOS镜像。

    screenshot.png

    微服务

    这篇文章:微服务实战(一):微服务架构的优势与不足总结得非常到位。

    深度学习

    screenshot.png

    AWS 首席云计算技术顾问的AWS 首席云计算技术顾问介绍了一下深度学习的历史及如何搭建环境。

    腾讯孙子荀分享的新媒体与深度学习给我留下了深刻的印象。通过深度学习给出适合每个人的最佳推送时间、合理裁切图片、分析文章质量等等。

    目前有很多优秀的深度学习框架,比如Google开源的TensorFlow,被广泛应用于各种场景。其实我也想总结点啥,但是实在说不出来,大家自行去学习莫烦 tensorflow 神经网络 教程吧,这个TensorFlow的系列教程很赞。

    Jupyter & TensorBoard对于初学者很有用。

    screenshot.png screenshot.png

    阿里云

    阿里云对容器有丰富的支持,包括Docker Registry容器服务HPC等等。阿里云使用Docker Swarm做服务编排。

    轻松利用现有ECS实例大家容器服务集群。

    screenshot.png

    云栖社区更是有大量关于TensorFlow的文章。

    本系列将利用Docker和阿里云容器服务,帮助您上手TensorFlow的机器学习方案

    第一篇:打造TensorFlow的实验环境
    第二篇:轻松搭建TensorFlow Serving集群
    第三篇:打通TensorFlow持续训练链路

    服务编排

    用户只关心自己的服务,至于服务如何跑起来,并发和容错就要交给编排工具去做了。目前比较流行的编排工具有Docker Swarm、Google Kubernetes、Apache Mesos。

    1. 通过基于Docker搭建单机版Mesos/Marathon这篇文章,可以理解一下Mesos的基本原理及使用。

    2. 通过镜像创建 Nginx介绍了如何使用阿里云容器服务创建Nginx应用,可以了解一下Docker Swarm。把Nginx服务运行起来之后,可以到相应的机器上查看到对应的container。

    root@cbb4515a0d85e4014b0a37d455793a89e-node1:~# docker ps -a | grep nginx
    556348917c43        nginx:latest                                             "nginx -g 'daemon off"   2 weeks ago         Exited (0) 2 minutes ago                                                      nginx_nginx_1
    

    推荐资料

    1. 书籍:《Docker技术入门与实践》,链接:Docker — 从入门到实践
    2. 阿里云容器服务文档。
    3. 云栖社区有很多关于容器、深度学习、阿里云容器服务的相关文章,值得阅读。
    4. Mesos
    5. TensorFlow 官方文档中文版
    6. Kubernetes入门指南
    7. Docker Machine 简介

    相关文章

      网友评论

        本文标题:容器、微服务、深度学习和阿里云

        本文链接:https://www.haomeiwen.com/subject/btmadttx.html