因大数据作业要求需用doker安装hadoop分布式
使用Docker部署全分布式Hadoop。要求只能在一台虚拟机中部署;需要有两个master节点(一个master节点中有NameNode,另外一个master节点中有SecondaryNameNode),四个worker节点。请写出此部署的所有命令和内容。
请注意:本人之前并未接触doker
参照连接
https://cloud.tencent.com/developer/article/1167995
https://dblab.xmu.edu.cn/blog/1233/
ubuntu虚拟机+docker+hadoop完全分布式环境搭建_ubuntu20.04安装docker和hadoop机器-优快云博客
总结:
第1步 - 安装Docker
官方Ubuntu存储库中提供的Docker安装包,但是可能不是最新的版本。为了确保我们获得最新版本,我们将从官方Docker存储库安装Docker。为此,我们将添加一个新的资源包,从Docker添加GPG密钥以确保下载有效,然后安装该包。
首先,更新现有的包列表:
sudo apt update
接下来,使用apt
安装一些允许通过HTTPS才能使用的软件包:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
然后将官方Docker存储库的GPG密钥添加到您的系统:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
将Docker存储库添加到APT源:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
接下来,使用新添加的repo源中的Docker包更新包数据库:
sudo apt update
确保您要从Docker repo安装而不是默认的Ubuntu repo:
apt-cache policy docker-ce
虽然Docker的版本号可能不同,但您还是会看到这样的输出:
docker-ce:
Installed: (none)
Candidate: 18.03.1~ce~3-0~ubuntu
Version table:
18.03.1~ce~3-0~ubuntu 500
500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages
现在docker-ce
还没有安装,用上面这个命令我们能看到安装源来自的Docker官方存储库。
最后,安装Docker:
sudo apt install docker-ce
现在应该安装好Docker了,检查它是否正在运行:
sudo systemctl status docker
输出应类似于以下内容,表明该服务处于工作状态:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-07-05 15:08:39 UTC; 2min 55s ago
Docs: https://docs.docker.com
Main PID: 10096 (dockerd)
Tasks: 16
CGroup: /system.slice/docker.service
├─10096 /usr/bin/dockerd -H fd://
└─10113 docker-containerd --config /var/run/docker/containerd/containerd.toml
第2步 - 在不输入Sudo情况下执行Docker(可选)
默认情况下,该docker
命令只能由root用户或docker组中的用户运行,该用户在Docker的安装过程中自动创建。如果您尝试运行该docker
命令而不使用sudo
或不在docker组中中用户运行,您将看到如下输出:
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
要想在在运行docker
命令时不输入sudo
,请将用户名添加到docker
组中:
sudo usermod -aG docker ${USER}
第3步 - 使用Docker命令
命令使用包括传递一系列docker
选项和命令,后跟参数。语法采用以下形式:
docker [option] [command] [arguments]
要查看所有可用的子命令,请输入:docker
要查看特定命令,请输入:
docker docker-subcommand --help
要查看有关Docker的系统信息,请使用
docker info
第4步 - 使用Docker镜像
Docker容器是从Docker镜像构建的。默认情况下,Docker从Docker Hub中提取这些镜像,这是一个由Docker管理的Docker镜像市场,这是Docker项目背后的公司。任何人都可以在Docker Hub上托管他们的Docker镜像,所以您只需要将您的应用程序和Linux放在那边托管即可。
要检查您是否可以从Docker Hub访问和下载镜像,请输入:
docker run hello-world
输出下面的内容则Docker正常工作:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:3e1764d0f546ceac4565547df2ac4907fe46f007ea229fd7ef2718514bcec35d
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Docker最初无法在本地找到hello-world
镜像,因此它从Docker Hub下载了镜像,Docker Hub是默认存储库。下载映像后,Docker从映像创建了一个容器,并在容器中执行了应用程序,显示了该消息。
您可以使用docker
带子命令的search
命令搜索Docker Hub上可用的镜像。例如,要搜索Ubuntu映像,请输入:
docker search ubuntu
该脚本将对Docker Hub进行抓取,并返回名称与搜索字符串匹配的所有镜像的列表。输出将类似于:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 7917 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 193 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 156 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 93 [OK]
ubuntu-upstart Upstart is an event-based replacement for th… 87 [OK]
neurodebian NeuroDebian provides neuroscience research s… 50 [OK]
ubuntu-debootstrap debootstrap --variant=minbase --components=m… 38 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 36 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images w… 23 [OK]
tutum/ubuntu Simple Ubuntu docker images with SSH access 18
i386/ubuntu Ubuntu is a Debian-based Linux operating sys… 13
ppc64le/ubuntu Ubuntu is a Debian-based Linux operating sys… 12
1and1internet/ubuntu-16-apache-php-7.0 ubuntu-16-apache-php-7.0 10 [OK]
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mariadb-10 ubuntu-16-nginx-php-phpmyadmin-mariadb-10 6 [OK]
eclipse/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 6 [OK]
codenvy/ubuntu_jdk8 Ubuntu, JDK8, Maven 3, git, curl, nmap, mc, … 4 [OK]
darksheer/ubuntu Base Ubuntu Image -- Updated hourly 4 [OK]
1and1internet/ubuntu-16-apache ubuntu-16-apache 3 [OK]
1and1internet/ubuntu-16-nginx-php-5.6-wordpress-4 ubuntu-16-nginx-php-5.6-wordpress-4 3 [OK]
1and1internet/ubuntu-16-sshd ubuntu-16-sshd 1 [OK]
pivotaldata/ubuntu A quick freshening-up of the base Ubuntu doc… 1
1and1internet/ubuntu-16-healthcheck ubuntu-16-healthcheck 0 [OK]
pivotaldata/ubuntu-gpdb-dev Ubuntu images for GPDB development 0
smartentry/ubuntu ubuntu with smartentry 0 [OK]
ossobv/ubuntu
...
在OFFICIAL列中,带OK标记的表明这个镜像由公司构建和支持。其他镜像则由个人创建。确定要使用的映像后,可以使用命令pull
将其下载到计算机。
执行以下ubuntu
命令将官方映像下载到您的计算机:
输出
Using default tag: latest
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
下载映像后,可以使用子命令run
运行容器。正如示例中那样,如果在使用子命令docker执行时未下载hello-world
镜像,则Docker客户端将首先下载镜像,然后使用run
运行容器。
要查看已下载到计算机的镜像,请输入:
docker images
输出
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 113a43faa138 4 weeks ago 81.2MB
hello-world latest e38bc07ac18e 2 months ago 1.85kB
正如您将在本教程后面看到的那样,用于运行容器的镜像可以被修改并用于生成新镜像,然后可以将其上传到Docker Hub或其他Docker镜像托管网站。
到此doker安装成功,若对doker不熟悉建议在走一遍下面连接中5678步https://cloud.tencent.com/developer/article/1167995
第五步-Ubuntu系统初始化
该步骤是在进入容器的交互端口后进行的命令大致如下
这是进入已有容器的情况
docker ps -a ->docker start [CONTAINER ID]->docker exec -it [CONTAINER ID] bash
docker images表示列出Docker上所有的镜像;镜像也是一堆文件,我们需要在Docker上开启这Ubuntu系统;在启动Ubuntu镜像时,需要先在个人文件下创建一个目录,用于向Docker内部的Ubuntu系统传输文件;命令如下:
cd ~
mkdir build
然后再在Docker上运行Ubuntu系统;
docker run -it -v /home/hadoop/build:/root/build --name ubuntuV0 ubuntu
这里解析下这个命令参数:
* docker run 表示运行一个镜像;
* -i表示开启交互式;-t表示分配一个tty,可以理解为一个控制台;因此-it可以理解为在当前终端上与docker内部的ubuntu系统交互;
* -v 表示docker内部的ubuntu系统/root/build目录与本地/home/hadoop/build共享;这可以很方便将本地文件上传到Docker内部的Ubuntu系统;
* --name ubuntuV0 表示Ubuntu镜像启动名称,如果没有指定,那么Docker将会随机分配一个名字;
* ubuntu 表示docker run启动的镜像文件;
ubuntu初始化
更新系统软件源
apt-get update
安装vim
apt-get install vim
若出现以下代码,表示选择时区根据实际情况选择,5表示亚洲
lease select the geographic area in which you live. Subsequent configuration questions will narrow this down by
presenting a list of cities, representing the time zones in which they are located.
1. Africa 3. Antarctica 5. Asia 7. Australia 9. Indian 11. Etc
2. America 4. Arctic 6. Atlantic 8. Europe 10. Pacific
Geographic area:
Geographic area:
Geographic area: 5
19表示重庆
Please select the city or region corresponding to your time zone.
1. Aden 16. Brunei 31. Hong_Kong 46. Kuala_Lumpur 61. Pyongyang 76. Tel_Aviv
2. Almaty 17. Chita 32. Hovd 47. Kuching 62. Qatar 77. Thimphu
3. Amman 18. Choibalsan 33. Irkutsk 48. Kuwait 63. Qostanay 78. Tokyo
4. Anadyr 19. Chongqing 34. Istanbul 49. Macau 64. Qyzylorda 79. Tomsk
5. Aqtau 20. Colombo 35. Jakarta 50. Magadan 65. Riyadh 80. Ulaanbaatar
6. Aqtobe 21. Damascus 36. Jayapura 51. Makassar 66. Sakhalin 81. Urumqi
7. Ashgabat 22. Dhaka 37. Jerusalem 52. Manila 67. Samarkand 82. Ust-Nera
8. Atyrau 23. Dili 38. Kabul 53. Muscat 68. Seoul 83. Vientiane
9. Baghdad 24. Dubai 39. Kamchatka 54. Nicosia 69. Shanghai 84. Vladivostok
10. Bahrain 25. Dushanbe 40. Karachi 55. Novokuznetsk 70. Singapore 85. Yakutsk
11. Baku 26. Famagusta 41. Kashgar 56. Novosibirsk 71. Srednekolymsk 86. Yangon
12. Bangkok 27. Gaza 42. Kathmandu 57. Omsk 72. Taipei 87. Yekaterinburg
13. Barnaul 28. Harbin 43. Khandyga 58. Oral 73. Tashkent 88. Yerevan
14. Beirut 29. Hebron 44. Kolkata 59. Phnom_Penh 74. Tbilisi
15. Bishkek 30. Ho_Chi_Minh 45. Krasnoyarsk 60. Pontianak 75. Tehran
Time zone: 19
安装sshd
接着安装sshd,因为在开启分布式Hadoop时,需要用到ssh连接slave:
apt-get install ssh
然后运行如下脚本即可开启sshd服务器:
/etc/init.d/ssh start
但是这样的话,就需要每次在开启镜像时,都需要手动开启sshd服务,因此我们把这启动命令写进~/.bashrc文件,这样我们每次登录Ubuntu系统时,都能自动启动sshd服务;
vim ~/.bashrc
在该文件中最后一行添加如下内容:
/etc/init.d/ssh start
配置sshd
安装好sshd之后,我们需要配置ssh无密码连接本地sshd服务,如下命令:
ssh-keygen -t rsa #一直按回车键即可
cat id_rsa.pub >> authorized_keys
------------------------------------------------
下次更新