企业网站建设收费,中国招标信息网,西安市政道桥建设公司网站,wordpress motify我的思路是这样#xff1a;安装ubuntu系统----下载docker----在docker里拉取hadoop镜像----在此镜像里创建三个容器(Master、Slave1、Slave2)----完成完全分布式 1. 安装ubuntu系统(无论你是安装的单系统#xff0c;还是用虚拟机安装了ubuntu) 如果想安装单… 我的思路是这样安装ubuntu系统----下载docker----在docker里拉取hadoop镜像----在此镜像里创建三个容器(Master、Slave1、Slave2)----完成完全分布式 1. 安装ubuntu系统(无论你是安装的单系统还是用虚拟机安装了ubuntu) 如果想安装单系统步骤如下
1) 把ubuntu镜像下载到电脑桌面(版本自选)。
2) 再把ultraiso下载到U盘然后解压安装在U盘 (3) 制作U盘启动工具参考链接为https://blog.csdn.net/yaoyut/article/details/78003061 在“便捷启动→写入新的驱动器引导扇区“这个步骤中如果出现设备正忙写入引导扇区失败的错误这时你把杀毒软件还有其他软件都关闭然后把U盘拔下来再插入问题就解决了。 (4) 重启电脑根据自己的电脑情况进入BOIS界面(相信小伙伴们都用u盘重装过电脑这里我就不再赘述)
这时候参考 https://blog.csdn.net/ramse/article/details/52716937
假如你进入BOIS界面时没有跟链接中的界面一样那么可能是两个问题 a、制作U盘启动失败需重新制作。 b、重启电脑时没有把u盘作为首选启动盘这个问题百度可以搜到解决。 2. 安装docker
参考链接为https://blog.csdn.net/diligent_lee/article/details/79098302 英语好的可以看这个https://docs.docker.com/install/linux/docker-ce/ubuntu/#set-up-the-repository
安装了ubuntu16.04 LTS后并安装了docker 18.06.1-ce如下图所示 zhangqingfengzhangqingfeng:~$ docker versionClient:Version: 18.06.1-ceAPI version: 1.38Go version: go1.10.3Git commit: e68fc7aBuilt: Tue Aug 21 17:24:56 2018OS/Arch: linux/amd64Experimental: false Server:Engine:Version: 18.06.1-ceAPI version: 1.38 (minimum version 1.12)Go version: go1.10.3Git commit: e68fc7aBuilt: Tue Aug 21 17:23:21 2018OS/Arch: linux/amd64Experimental: false 这里你可能使用sudo docker version作为命令如果想去掉sudo可以参考链接https://www.jianshu.com/p/95e397570896
3. 拉取hadoop镜像你可以选择Docker Hub库或者阿里云库我选的是阿里云库它有加速器
首先应该注册 阿里云库https://cr.console.aliyun.com Docker Hub库 https://hub.docker.com/
从阿里云库拉取hadoop镜像当然里面不是所有镜像都管用可以选择下载的区域多试几次吧
我拉取的镜像是registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop 和 registry.cn-hangzhou.aliyuncs.com/aofch/hadoop 选择其一即可我接下来用的第一个镜像因为这个镜像把我们需要的工具基本下好了比如 jdk、hadoop、spark省了不少事呢
因为阿里云有加速器你在找hadoop镜像的时候在网页左边会有”镜像加速器“的条目点进去会教你配置加速器。当然里面就是一段代码你退出docker即按下CtrlD然后输入以下代码 sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json -EOF{ registry-mirrors: [https://lqbkkmob.mirror.aliyuncs.com]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker 4. 接下来就是创建容器了并对容器进行配置及ssh的互联
a. 敲上指令docker pull registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop zhangqingfengzhangqingfeng:~$ docker pull registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop b. 经过一段时间后镜像已经下载到本地计算机可使用指令docker images查看是否下载成功 zhangqingfengzhangqingfeng:~$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEregistry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop latest 8b768e1604ad 4 months ago 2.11GB c. 这时我们要在这个hadoop镜像里创建三个容器(Master、Slave1、Slave2)敲上如下指令(我们先把三个容器创建出来再慢慢里面添加配置)docker run -it --name Master -h Master registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash zhangqingfengzhangqingfeng:~$ docker run -it --name Master -h Master registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash[rootMaster local]# d. 此时把Master空的容器创建出来了当然里面什么也没配置这时候敲上CtrlPQ会返回到初始目录并且不会退出Master容器假如你按下CtrlC也会退出到初始目录但是这时候也把Master容器退出了敲上CtrlPQ后会出现下面情景代码如下 [rootMaster local]# zhangqingfengzhangqingfeng:~$ zhangqingfengzhangqingfeng:~$ e. 修改一下代码的容器名依次创建出容器Slave1和容器Slave2 zhangqingfengzhangqingfeng:~$ docker run -it --name Slave1 -h Slave1 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash[rootSlave1 local]# zhangqingfengzhangqingfeng:~$ zhangqingfengzhangqingfeng:~$ docker run -it --name Slave2 -h Slave2 registry.cn-beijing.aliyuncs.com/bitnp/docker-spark-hadoop /bin/bash [rootSlave2 local]# zhangqingfengzhangqingfeng:~$ zhangqingfengzhangqingfeng:~$ f. 至此三个空容器已经创建完成接下来我们要使用ssh把三个容器连接起来
我的docker里面空空如也没有指令apt-get没有指令gedit但是里面有yum可以用yum下载vim来编辑文件还可以用yum下载openssh-clientsopenssh-server如果你在docker里面连yum都没有那么你先使用CtrlPQ退出在初始目录用apt-get下载一个yum(指令是 sudo apt-get install yum )然后在docker里面就可以使用了。
先对Master容器进行配置进入Master容器敲上指令 docker attach Master zhangqingfengzhangqingfeng:~$ docker attach Master[rootMaster local]# 我们先下载vim敲上指令 yum -y install vim [rootMaster local]# yum -y install vim.......过程省略Complete![rootMaster local]# 再把openssh-clients和openssh-server下载下来注意按我说的顺序下载先下openssh-clients [rootMaster local]# yum -y install openssh-clients.......Complete![rootMaster local]# yum -y install openssh-server.......Complete![rootMaster local] g. 这时我们配置Master容器的ssh密钥
先执行指令 /usr/sbin/sshd会出现下列情景 [rootMaster local]# /usr/sbin/sshdCould not load host key: /etc/ssh/ssh_host_rsa_keyCould not load host key: /etc/ssh/ssh_host_ecdsa_keyCould not load host key: /etc/ssh/ssh_host_ed25519_keysshd: no hostkeys available -- exiting. 再执行指令 /usr/sbin/sshd-keygen -A 出现下列情景 [rootMaster local]# /usr/sbin/sshd-keygen -A/usr/sbin/sshd-keygen: line 10: /etc/rc.d/init.d/functions: No such file or directoryGenerating SSH2 RSA host key: /usr/sbin/sshd-keygen: line 63: success: command not found Generating SSH2 ECDSA host key: /usr/sbin/sshd-keygen: line 105: success: command not found Generating SSH2 ED25519 host key: /usr/sbin/sshd-keygen: line 126: success: command not found 再次输入一遍 /usr/sbin/sshd 即可 [rootMaster local]# /usr/sbin/sshd[rootMaster local]# 上述三步必不可少不然会出现 ssh: connect to host localhost port 22: Cannot assign requested address 等错误
这时的错误参考链接为https://blog.csdn.net/leon_wzm/article/details/78690439?utm_sourcedebugrunutm_mediumreferral
然后我们就开始制作密钥了输入指令 ssh-keygen -t rsa 然后都按 Enter 键 [rootMaster local]# ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh.Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:BPC1QSB9LcIro8HoVtPSFoHMvDjMqgmdkhCoiM167c rootMasterThe keys randomart image is:---[RSA 2048]----|. o. ||o ooo. ||. oo. ||oo.. ||oo S ||Ooo ||. o ||o. . . || ...E. |----[SHA256]-----[rootMaster local]# 生成的密钥如图所示存在 /root/.ssh/id_rsa.pub 文件中了我们需要把密钥存储在 /root/.ssh/authorized_keys 文件中指令是 cat /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys [rootMaster local]# cat /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys[rootMaster local]# 此时你可以使用指令 cat /root/.ssh/authorized_keys 查看authorized_keys 文件中是否有你刚才存入的密钥 [rootMaster local]# cat /root/.ssh/authorized_keysssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnfGoobPBQlX38ePTP88oTWeYZvaR73ADrDPTyEEX6Fy4Og4IQcd6pq5g0vjUdVxCVnes7UsCpKvPkrqjAqDPm/oY61jplDZCzxEG45kbHl06SY8X/Km12PsKjOKWDJzCwTs1u0EnXL1UDmFePGhv/MJNPtihMitNM/QWfk6ObzFjDY6sGexe3zRqi9fdZLZVNFL3PPIfS0cHdA/Vw8FXeEfFifTwRNwOVG9rKEsL2TyhCcynn4hRJ9AFwl18GvJn5eLxuPeVVuKn8yzGpDhVvuntdGVxCcGgaWiwyb/W8mtxozXP1C5fKkM6fghj46kK9MdtR14f49Tkc5JB rootMaster[rootMaster local]# 到这里你的Master容器的ssh已经配好了可以使用指令 ssh localhost 验证一下 敲上之后需要再输入 yes虽然有warning但是不用管它带回配置了 /etc/ssh/sshd_config 文件就什么警告也没了验证完了 敲上 CtrlD即可断开与localhost的ssh连接 [rootMaster local]# ssh localhostThe authenticity of host localhost (127.0.0.1) cant be established.ECDSA key fingerprint is SHA256:TrBwBsvNKUoilsNryQVTpHVmBgBHLnFUuBFcQdQafJs.ECDSA key fingerprint is MD5:cb:69:58:d4:c0:f8:60:71:4d:5b:59:bf:07:d4:da:af.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added localhost (ECDSA) to the list of known hosts.[rootMaster ~]# logoutConnection to localhost closed.[rootMaster local]# 为了ssh链接时的美观简洁我们配置其/etc/ssh/sshd_config 文件输入指令 vim /etc/ssh/sshd_config 进入编辑文件模式 [rootMaster local]# vim /etc/ssh/sshd_config这里如果有同学不懂 vim 的使用可以参考链接https://blog.csdn.net/yu870646595/article/details/52045150
进去编辑文件之后敲上 i 此时进入编辑模式按照我下面所列的代码找到它并改成我这样 Port 22PermitRootLogin yesPubkeyAuthentication yesPasswordAuthentication yesChallengeResponseAuthentication noUsePAM yesPrintLastLog no 然后按下 Esc 键进入命令模式 再敲上指令 :wq 退出这个编辑文件界面回到Master容器界面
再敲上指令 vim /etc/ssh/ssh_config 找到 StrictHostKeyChecking no (大约在第35行) 将以前的 # 去掉并把 ask 改成 no [rootMaster local]# vim /etc/ssh/ssh_config StrictHostKeyChecking no改完之后同样敲上 Esc 键进入命令模式 再敲上指令 :wq 退出这个编辑文件界面回到Master容器界面
这时候按下CtrlPQ返回到初始目录查看此时三个容器的ip地址输入命令 docker inspect -f {{.Name}} - {{.NetworkSettings.IPAddress }} $(docker ps -aq) [rootMaster local]# read escape sequence zhangqingfengzhangqingfeng:~$ docker inspect -f {{.Name}} - {{.NetworkSettings.IPAddress }} $(docker ps -aq)/Master - 172.17.0.2/Slave1 - 172.17.0.3/Slave2 - 172.17.0.4zhangqingfengzhangqingfeng:~$ 然后进入Master容器(指令是docker attach Master)打开 /etc/hosts 文件把上述内容填上目的是给每个节点的 ip 附上名字ssh连接的时候就可以直接 ssh Slave1而不是 ssh 172.17.0.3 这么麻烦了所以我们再次敲上指令 docker attach Master 进入Master 容器 编辑 /etc/hosts 文件所以敲上指令 vim /etc/hosts 进入编辑模式将容器名及其对应的 ip 填入 修改完之后回到Master 容器如果还有不会使用vim修改文件的小伙伴请看这个链接https://blog.csdn.net/yu870646595/article/details/52045150 zhangqingfengzhangqingfeng:~$ docker attach Master[rootMaster local]# vim /etc/hosts 127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.2 Master172.17.0.3 Slave1172.17.0.4 Slave2 至此Master 容器已经配置完成然后我们敲上 CtrlPQ 退出当前的Master容器然后敲上 docker attach Slave1 进入Slave1容器用和Master容器相同的方法把Slave1也配置一遍(就是从下载vim开始到配置/etc/hosts文件这几个步骤)再用相同的方式 把 Slave2 也配置完。
h. 三个容器Master、Slave1、Slave2 的配置终于接近尾声仅差最后一步我们需要把三个容器的每个密钥都要放在自己容器的/root/.ssh/authorized_keys 文件中只有这样才能把三个容器的互信建立起来假如你不这样做你在Master容器中用ssh连接其他容器(比如连接Slave1)那么它会提示你输入Slave1的密码而这个密码你输入什么也不对。
这时的错误参考链接为https://blog.csdn.net/kunlong0909/article/details/7284174
因为每个容器的 /root/.ssh/authorized_keys 文件都需要填入 所有容器的密钥而此时我们刚配置完Slave2容器那么直接输入 vim /root/.ssh/authorized_keys 进去文件然后按 i 进入编辑模式把Slave2的密钥拷贝到一个文件中(你在电脑桌面新建一个临时文件即可)保存结束退出文件然后CtrlPQ退出Slave2容器然后 敲上 docker attach Slave1 进入Slave1 容器相同的方式把Slave1的密钥也拷贝出来然后退出Slave1进入Master容器把刚才拷贝的两个密钥追加到/root/.ssh/authorized_keys 文件中(就是进入这个文件切换为编辑模式把那两个密钥复制过来就行)然后把这个三个密钥拷贝出来复制到Slave1的 /root/.ssh/authorized_keys 文件中也同样复制到Slave1的 root/.ssh/authorized_keys 文件中。用到的详细指令如下
(1) vim /root/.ssh/authorized_keys 进去之后 按下 i 复制密钥到一个临时新建的文件(你在桌面临时建一个就行)
(2) 按下 Esc 敲上 :wq 保存并退出文件 敲上 CtrlPQ 退回初始目录
(3) docker attach Slave1 进入Slave1容器
(4) 重复第(1)(2)步
(5) docker attach Master 进入Master容器
(6) vim /root/.ssh/authorized_keys 进去之后 按下 i 把刚才复制的两个密钥放到到这个文件中并把这个三个密钥临时存到一 个文件中
(7) 按下 Esc 敲上 :wq 保存并退出文件 敲上 /usr/sbin/sshd 再敲上 CtrlPQ 退回初始目录
(8) docker attach Slave1 进入Slave1容器
(9) vim /root/.ssh/authorized_keys 进去之后 按下 i 删除所有把刚才复制的三个密钥放到到这个文件中
(10) 按下 Esc 敲上 :wq 保存并退出文件敲上 /usr/sbin/sshd 再敲上 CtrlPQ 退回初始目录
(11docker attach Slave2 进入Slave2容器
(12) vim /root/.ssh/authorized_keys 进去之后 按下 i 删除所有把刚才复制的三个密钥放到到这个文件中
(13) 按下 Esc 敲上 :wq 保存并退出文件 敲上 CtrlPQ 退回初始目录 docker attach Master 进入 Master容器
敲上 /usr/sbin/sshd
在所有密钥都放入各个容器之后我们进行验证一下在Master容器中我们输入指令 ssh Slave1 看到的情景有下面几个情况
① 如果你出现下面错误那么你肯定没在每个容器中的 /etc/hosts 文件中输入所有的容器的名字及其对应的 ip 地址 [rootMaster local]# ssh Slave1ssh: Could not resolve hostname slave1: Name or service not known[rootMaster local]# ssh Slave2ssh: Could not resolve hostname slave2: Name or service not known ② 假如你出现下面错误那么你肯定没在退出每个容器前 敲上指令 /usr/sbin/sshd 看上述13个步骤的红字很重要 [rootMaster local]# ssh Slave1ssh: connect to host slave1 port 22: Connection refused[rootMaster local]#[rootMaster local]# ssh Slave2ssh: connect to host slave1 port 22: Connection refused[rootMaster local]# 这时的错误参考链接为https://blog.csdn.net/leon_wzm/article/details/78690439?utm_sourcedebugrunutm_mediumreferral
现在我们终于可以成功的验证了现在 Master 容器中连接 Slave1 指令是ssh Slave1 如下图 [rootMaster local]# ssh Slave1[rootSlave1 ~]# 由图可知成功了敲上 Ctrl D 断开与 Slave1 的连接 再验证与 Slave2 的连接指令是 ssh Slave2 成功后CtrlD断开与 Slave2 的连接。 [rootMaster local]# ssh Slave1[rootSlave1 ~]# logoutConnection to slave1 closed.[rootMaster local]# ssh Slave2[rootSlave2 ~]# [rootSlave2 ~]# logoutConnection to slave1 closed.[rootMaster local]# ③ 假如你连接Slave1时还提示了很多信息不像我这样简洁比如还有 LastLogin 之类的提示信息那你肯定是每个容器的vim /etc/ssh/sshd_config 和 vim /etc/ssh/ssh_config 文件的配置没有跟我的一样在上述步骤 g 中会有这两个文件的配置。
I. ssh互联成功之后我们便开始使用hadoop进行实战但在这之前还需配置每个容器的环境变量
① 首先我们查看JAVA_HOME的地址在 hadoop-env.sh 文件中我们并不知道这个文件的具体路径没关系我们只需知道它的名字使用指令 find / -name hadoop-env.sh 搜索它即可(注意这时候我们目前是在Master容器界面里) [rootMaster local]# find / -name hadoop-env.sh/usr/local/hadoop-2.7.5/etc/hadoop/hadoop-env.sh[rootMaster local]# 我们 用指令 vim /usr/local/hadoop-2.7.5/etc/hadoop/hadoop-env.sh 进入这个文件看到JAVA_HOME这一行记录它的路径然后退出这个文件即可 [rootMaster local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/hadoop-env.sh export JAVA_HOME/usr/local/jdk1.8.0_162 在这个镜像中JAVA_HOME路径给我们设置好了我们需要记住这个地址待会会在其他配置中用到。
接下来我们依次配置每个容器的 core-site.xml 和 yarn-site.xml 和 mapred-site.xml 及 hdfs-site.xml 文件
② 首先使用 find / -name core-site.xml 的具体路径然后用指令 vim 文件路径 进入这个文件 [rootMaster local]# find / -name core-site.xml/usr/local/hadoop-2.7.5/etc/hadoop/core-site.xml[rootMaster local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/core-site.xml 里面的配置改成如下图所示然后 :wq 保存退出 !-- Put site-specific property overrides in this file. --configuration property namefs.defaultFS/name valuehdfs://Master:9000/value /property property nameio.file.buffer.size/name value131072/value /property property namehadoop.tmp.dir/name value/usr/local/hadoop-2.7.5/tmp/value /property/configuration ③ 进入yarn-site.xml 进行配置结束后保存退出。 [rootMaster local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/yarn-site.xmllimitations under the License. See accompanying LICENSE file.--configuration property nameyarn.nodemanager.aux-services/name valuemapreduce_shuffle/value /property property nameyarn.resourcemanager.address/name valueMaster:8032/value /property property nameyarn.resourcemanager.scheduler.address/name valueMaster:8030/value /property property nameyarn.resourcemanager.resource-tracker.address/name valueMaster:8031/value /property property nameyarn.resourcemanager.admin.address/name valueMaster:8033/value /property property nameyarn.resourcemanager.webapp.address/name valueMaster:8088/value /property property nameyarn.nodemanager.aux-services.mapreduce.shuffle.class/name valueorg.apache.hadoop.mapred.ShuffleHandler/value /property/configuration ④ 进入mapred-site.xml 进行配置结束后保存退出 [rootMaster local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/mapred-site.xml !-- Put site-specific property overrides in this file. --configuration property namemapreduce.framework.name/name valueyarn/value /property/configuration ⑤ 进入hdfs-site.xml 进行配置结束后保存退出 [rootMaster local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/hdfs-site.xml !-- Put site-specific property overrides in this file. --configuration property namedfs.replication/name value2/value /property property namedfs.namenode.name.dir/name valuefile:/usr/local/hadoop-2.7.5/hdfs/name/value /property/configuration J. 在步骤I 中是配置 Master 容器的环境变量我们还需要进入Slave1容器相同的代码把 Slave1的环境变量也配置完当然容器slave2也是如此。唯一不同的是在步骤⑤ 的hdfs-site.xml中Master容器设置的是namenode而Slave1和Slave2设置的是datanode如下图 [rootSlave1 local]# vim /usr/local/hadoop-2.7.5/etc/hadoop/hdfs-site.xml!-- Put site-specific property overrides in this file. --configuration property namedfs.replication/name value2/value /property property namedfs.datanode.data.dir/name valuefile:/usr/local/hadoop-2.7.5/hdfs/data/value /property/configuration K. ①现在我们在Master容器中通过ssh连接Slave1(或Slave2)删除其hdfs所有目录 (这个目录就在刚才的hdfs-site.xml文件中忘了的话你再vim打开它把datanode保存的路径记下来我的是 /usr/local/hadoop-2.7.5/hdfs/data) 并重新创建代码如下。因为下一步的格式化只能用一次用两次的话就需要用到这一步为了保险我们在第一次就直接用这一步以免不必要的麻烦。 [rootMaster local]# ssh Slave1[rootSlave1 ~]# rm -rf /usr/local/hadoop-2.7.5/hdfs[rootSlave1 ~]# mkdir -p /usr/local/hadoop-2.7.5/hdfs/data ② 在Slave1删除并创建之后我们 CtrlD 断开与Slave1的ssh连接然后 使用指令 ssh Slave2 与Slave2容器进行连接与Slave1相同我们需要把hdfs目录删除并重新创建结束之后我们 CtrlD 断开与Slave2的连接回到Master容器界面代码如下 [rootSlave1 ~]# logout Connection to slave1 closed.[rootMaster local]# ssh Slave2[rootSlave2 ~]# [rootSlave2 ~]# rm -rf /usr/local/hadoop-2.7.5/hdfs[rootSlave2 ~]# mkdir -p /usr/local/hadoop-2.7.5/hdfs/data[rootSlave2 ~]# logout Connection to slave1 closed.[rootMaster local]# ③ Slave1和Slave2都已经删除并重建 hdfs 目录了现在我们把Master容器也这么做注意Master容器创建的是 name子文件不再是 data 子文件里 [rootMaster local]# rm -rf /usr/local/hadoop-2.7.5/hdfs[rootMaster local]# mkdir -p /usr/local/hadoop-2.7.5/hdfs/name[rootMaster local]# L. 现在我们格式化 NameNode HDFS 目录 在Master容器中使用指令 hdfs namenode -format [rootMaster local]# hdfs namenode -format..........一堆代码此处省略[rootMaster local]# M. ①我们需要进入sbin 文件来启动hadoop 集群我们不清楚 sbin 文件的具体路径所以我们可以使用 指令 find / -name sbin 找到路径然后 cd 路径 进入这个路径。 [rootMaster local]# find / -name sbin/usr/local/sbin/usr/local/hadoop-2.7.5/sbin/usr/local/spark-2.3.0-bin-hadoop2.7/sbin/usr/lib/debug/usr/sbin/usr/lib/debug/sbin/usr/sbin/sbin[rootMaster local]# cd /usr/local/hadoop-2.7.5/sbin[rootMaster sbin]# ② 然后我们使用指令 ./start-all.sh 来启动集群 [rootMaster sbin]# ./start-all.shThis script is Deprecated. Instead use start-dfs.sh and start-yarn.shStarting namenodes on [Master]Master: starting namenode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-namenode-Master.outSlave1: starting datanode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-datanode-Slave1.outSlave2: starting datanode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-datanode-Slave2.outStarting secondary namenodes [0.0.0.0]0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.7.5/logs/hadoop-root-secondarynamenode-Master.outstarting yarn daemonsstarting resourcemanager, logging to /usr/local/hadoop-2.7.5/logs/yarn--resourcemanager-Master.outSlave1: starting nodemanager, logging to /usr/local/hadoop-2.7.5/logs/yarn-root-nodemanager-Slave1.outSlave2: starting nodemanager, logging to /usr/local/hadoop-2.7.5/logs/yarn-root-nodemanager-Slave2.out[rootMaster sbin]# ③ 使用 jps 查看 namenode 是否启动此时看的是Master容器的namenode是否启动。 [rootMaster sbin]# jps192 NameNode562 ResourceManager824 Jps392 SecondaryNameNode[rootMaster sbin]# ④ 这里我们可以使用 ssh Slave1 (或ssh Slave2)进入Slave1容器然后使用指令 jps 查看datanode是否启动此时会出现
-bash: jps: command not found 错误如图 [rootMaster sbin]# ssh Slave1[rootSlave1 ]# jps-bash: jps: command not found 这时我们需要配置 /etc/profile文件每个容器(包括Master、Slave1、Slave2)都需要配置这个文件使用指令 vim /etc/profile末尾添加代码
export JAVA_HOME/usr/local/jdk1.8.0_162 export HADOOP_HOME/usr/local/hadoop-2.7.5 export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出后执行生效刚才的 /etc/profile 文件即使用指令 source /etc/profile 如图所示 [rootMaster local]# vim /etc/profile....进入之后末尾添加下列代码(根据自己的实际配置填写比如java版本可能每个人都不一样)export JAVA_HOME/usr/local/jdk1.8.0_162export HADOOP_HOME/usr/local/hadoop-2.7.5export PATH$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin.....保存退出后 [rootMaster local]# source /etc/profile 每个容器都配置结束后我们再通过ssh进入其他容器便可以使用 jps 或 hadoop fs xx 指令了。
⑤ 我们可以使用指令 hadoop dfsadmin -report 查看其他容器有没有启动 [rootMaster sbin]# hadoop dfsadmin -reportDEPRECATED: Use of this script to execute hdfs command is deprecated.Instead use the hdfs command for it. Configured Capacity: 982232104960 (914.77 GB)Present Capacity: 901762801664 (839.83 GB)DFS Remaining: 901762752512 (839.83 GB)DFS Used: 49152 (48 KB)DFS Used%: 0.00%Under replicated blocks: 0Blocks with corrupt replicas: 0Missing blocks: 0Missing blocks (with replication factor 1): 0-------------------------------------------------Live datanodes (2):Name: 172.17.0.3:50010 (Slave1)Hostname: Slave1Decommission Status : NormalConfigured Capacity: 491116052480 (457.39 GB)DFS Used: 24576 (24 KB)Non DFS Used: 15263760384 (14.22 GB)DFS Remaining: 450881376256 (419.92 GB)DFS Used%: 0.00%DFS Remaining%: 91.81%Configured Cache Capacity: 0 (0 B)Cache Used: 0 (0 B)Cache Remaining: 0 (0 B)Cache Used%: 100.00%Cache Remaining%: 0.00%Xceivers: 1Last contact: Tue Sep 18 03:58:01 UTC 2018Name: 172.17.0.4:50010 (Slave2)Hostname: Slave2Decommission Status : NormalConfigured Capacity: 491116052480 (457.39 GB)DFS Used: 24576 (24 KB)Non DFS Used: 15263760384 (14.22 GB)DFS Remaining: 450881376256 (419.92 GB)DFS Used%: 0.00%DFS Remaining%: 91.81%Configured Cache Capacity: 0 (0 B)Cache Used: 0 (0 B)Cache Remaining: 0 (0 B)Cache Used%: 100.00%Cache Remaining%: 0.00%Xceivers: 1Last contact: Tue Sep 18 03:58:01 UTC 2018[rootMaster sbin]# 到此我们的docker环境下的hadoop集群已经搭建成功
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后我想奉上在搭建过程中用到的命令 0. 重启docker服务sudo service docker restart1.查看所有容器的ipdocker inspect -f {{.Name}} - {{.NetworkSettings.IPAddress }} $(docker ps -aq2. 拉取一个镜像docker pull 镜像名称3. 查看所有镜像docker images5. 查看正在运行的容器docker ps6. 查看所有容器(包括正在运行和不在运行的容器)docker ps -a7. 在镜像里创建一个容器并以前台交互模式启动它docker run -it --name 容器名 -h 容器名 镜像名字 /bin/bash8. 退出容器但不关闭它(关闭之后还得启动并且设置的/etc/hosts内容都没有了)CtrlPQ9. 再次进入容器 docker attach 容器名10. 在容器内下载插件(使用yum)yum -y install 插件名11. 在容器内删除插件(使用yum)yum remove 插件名12. 查找文件的路径find / -name 文件名13. 进入文件cd 文件路径14. 容器内编辑文件(使用vim)vim 文件路径 -----打开文件i -----切换到编辑模式Esc -----切换到命令模式$ -----移到本行的最后/关键字 -----查找字符dd -----删除光标所在行:q -----不保存退出:wq -----保存退出 本文参考链接还有https://blog.csdn.net/Leafage_M/article/details/72633408 https://www.jianshu.com/p/3d5cc7165c15 https://blog.csdn.net/u013548453/article/details/80936027