6 个步骤,教你在Ubuntu虚拟机环境下,用Docker自带的DNS配置Hadoop | 附代码

作者 | tianyouououou

责编 | Carol

来源 | CSDN 博客

封图 | CSDN付费下载于视觉中国

最近,作者整理了一套Hadoop搭建方案。最后的镜像大小1.4G多,使用docker子网,容器重新启动不需要重新配置/etc/hosts文件。

配置过程中参考了如下博客,有些细节问题这些博客里面解释的更加详细。

ssh配置部分:

https://blog.csdn.net/weixin_42051109/article/details/82744993

wordcount部分:

https://blog.csdn.net/alexwym/article/details/82497582

虽然配置完了,但是有些地方并不完全懂,后续有机会还会做一些补充解释。

* 环境:Ubuntu16.04虚拟机

准备工作

  1. 下载解压jdk1.8文件夹

  2. 下载解压Hadoop2.8.5文件夹

  3. docker pull centos7基础镜像

  4. 建mydocker文件夹

  5. 将jdk1.8文件夹和Hadoop文件夹移动到mydocker文件夹(这里为了简洁将Hadoop2.8.5文件夹重命名为Hadoop)

  6. 编辑Hadoop文件夹内的文件(避免创建镜像后要修改三遍)

首先进入Hadoop/etc/Hadoop文件夹后修改hadoop.env.sh

tianyou@ubuntu:~/mydocker/Hadoop/etc/Hadoop$ vim hadoop-env.sh

将JAVA_HOME修改为如下路径

export JAVA_HOME= /usr/local/jdk1.8

修改core-site.xml如下

tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim core-site.xml
<!-- Put site-specific property overrides in this file. -->
<configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop0:9000</value></property><property><name>io.file.buffer.size</name><value>131072</value></property><property><name>hadoop.tmp.dir</name><value>/usr/local/hadoop/tmp</value></property>
</configuration>

修改yarn-site.xml

tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim yarn-site.xml
<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.resourcemanager.address</name><value>hadoop0:8032</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>hadoop0:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>hadoop0:8031</value></property><property><name>yarn.resourcemanager.admin.address</name><value>hadoop0:8033</value></property><property><name>yarn.resourcemanager.webapp.address</name><value>hadoop0:8088</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property>
</configuration>          

修改mapred-site.xml,我这里是mapred-site.xml.template

tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim mapred-site.xml.template
<!-- Put site-specific property overrides in this file. -->
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

修改hdfs-site.xml(按照datanode配置)

tianyou@ubuntu:~/mydocker/hadoop/etc/hadoop$ vim hdfs-site.xml
<configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/hdfs/data</value></property>
</configuration>

这里修改hadoop配置文件是为了构建镜像时直接将hadoop文件夹COPY到镜像中,再用镜像创建三个容器后不需要在三个容器中分别进行重复的配置工作。

使用Dockerfile构建镜像

1、编辑Dockefile,基于准备好的centos:7基础镜像构建

FROM centos:7
# 选择一个已有的os镜像作为基a础  
# 镜像的作者  
MAINTAINER tianyou
# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no  
RUN yum install -y openssh-server sudo \&& sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config \
#安装openssh-clients&& yum  install -y openssh-clients \&& yum install -y vim \&& yum install -y which \# 添加测试用户root,密码root,并且将此用户添加到sudoers里  && echo "root:root" | chpasswd \&& echo "root   ALL=(ALL)       ALL" >> /etc/sudoers \
# 下面这两句比较特殊,在centos6上必须要有,否则创建出来的容器sshd不能登录  && ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key \&& ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key \&& mkdir /var/run/sshdCOPY jdk1.8  /usr/local/jdk1.8/
COPY hadoop /usr/local/hadoop/
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

2、在mydocker文件夹下执行构建命令(因为需要文件访问权限要加sudo,命令最后的,不要丢)

tianyou@ubuntu:~/mydocker$ sudo docker build -t tianyou/centos-java-hadoop .

创建容器

1、创建子网 Hadoopnetwork

tianyou@ubuntu:~/mydocker$ docker network create --subnet=172.19.0.0/16 hadoopnetwork

2、创建容器并指定子网和ip

创建Hadoop0容器

tianyou@ubuntu:~/mydocker$ docker run -it -d --net hadoopnetwork --ip 172.19.0.2 --name hadoop0 -h hadoop0 tianyou/centos-java-hadoop

创建hadoop1容器

tianyou@ubuntu:~/mydocker$ docker run -it -d --net hadoopnetwork --ip 172.19.0.3 --name hadoop1 -h hadoop1 tianyou/centos-java-hadoop

创建Hadoop2容器

tianyou@ubuntu:~/mydocker$ docker run -it -d --net hadoopnetwork --ip 172.19.0.4 --name hadoop2 -h hadoop2 tianyou/centos-java-hadoop

配置ssh

1.进入Hadoop0

tianyou@ubuntu:~/mydocker$ docker exec -it hadoop0 /bin/bash

2.配置ssh密钥

[root@hadoop0 /]# /usr/sbin/sshd && /usr/sbin/sshd-keygen -A && /usr/sbin/sshd

制作密钥,输入ssh-keygen -t rsa,然后敲三次Enter键

[root@hadoop0 /]# ssh-keygen -t rsa

生成的密钥存在 /root/.ssh/id_rsa.pub 文件中,执行指令把密钥存储在 /root/.ssh/authorized_keys 文件中

修改sshd_config配置使提示更简洁,合并指令如下:

[root@hadoop0 /]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && vim /etc/ssh/sshd_config

将配置文件中对应行 修改为如下所示:

Port 22
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
PrintLastLog no

Esc进入命令模式,:wq保存
修改ssh_config文件中 StrictHostKeyChecking ask改成no

[root@Master local]# vim /etc/ssh/ssh_config
StrictHostKeyChecking no

Ctrl+P+Q退出Hadoop0容器

进入Hadoop1和Hadoop2容器,进行同样的操作生成ssh密钥和配置

3、将容器的秘钥互相添加

每个容器的 /root/.ssh/authorized_keys 文件都需要填入所有容器的密钥

以上操作结束后在Hadoop2容器中,查看文件,复制出haoop2密钥

[root@hadoop2 /]#  vim  /root/.ssh/authorized_keys

ctrl+P+Q退出,同样复制出Hadoop1和Hadoop0秘钥,将三个秘钥全部复制到三个容器的/root/.ssh/authorized_keys文件中。

复制完成后在每个容器中都执行一次 /usr/sbin/sshd命令。

[root@Master local]# /usr/sbin/sshd

至此,通过ssh可以互相访问,测试一下

[root@hadoop0 /]# ssh hadoop1

ctrl+D返回

完善Hadoop配置

进入Hadoop0,修改hdfs-site.xml 文件如下:

[root@hadoop0 /]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

因为在COPY进容器时按照datanode配置,所以要修改为namenode配置,只需要将三处data修改为name。

<!-- Put site-specific property overrides in this file. --><configuration>    <property>      <name>dfs.replication</name>      <value>2</value>    </property>    <property>      <name>dfs.namenode.name.dir</name>      <value>file:/usr/local/hadoop/hdfs/name</value>    </property></configuration>

通过ssh进入Hadoop1,删除重建hdfs文件

[root@hadoop0 /]# ssh hadoop1[root@hadoop1 ~]# rm -rf /usr/local/hadoop/hdfs && mkdir -p /usr/local/hadoop/hdfs/data

ctrl+D退出,同样进入Hadoop2,删除重建hdfs文件
ctrl+D退出,回到Hadoop0,删除重建hdfs文件,注意这里是name。

[root@hadoop0 /]# rm -rf /usr/local/hadoop/hdfs && mkdir -p /usr/local/hadoop/hdfs/name

修改slaves文件

[root@hadoop0 local]# vim /usr/local/hadoop/etc/hadoop/slaves

填入Hadoop1,Hadoop2

localhosthadoop1hadoop2

格式化hdfs(这里当时报了一个错,找不到JAVA_HOME,因为Hadoop-env.sh中JAVA_HOME=后面多敲了一个空格,删掉后成功运行)

[root@hadoop0 /]# hdfs namenode -format

修改/etc/profile文件 ,修改后可以使用jps 或 Hadoop fs xx 指令

[root@hadoop0 local]# vim /etc/profile

将下面的代码添加到文件末尾,保存退出

export JAVA_HOME=/usr/local/jdk1.8export HADOOP_HOME=/usr/local/hadoopexport PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source使配置生效

[root@hadoop1 ~]# source /etc/profile

ssh进入Hadoop1和hadoop2做同样修改。
回到Hadoop0进入Hadoop/sbin,执行start-all命令启动

[root@hadoop0 local]# cd /usr/local/hadoop/sbin/[root@hadoop0 sbin]# ./start-all.sh

可以运行如下命令查看节点情况

[root@hadoop0 sbin]# hadoop dfsadmin -report

测试wordcount程序

启动Hadoop之后(一定要先启动),可以运行自带的wordcount程序来测试一下

进入Hadoop文件夹 在hdfs建立input文件夹

[root@hadoop0 hadoop]# bin/hdfs dfs -mkdir -p /data/input

在容器中创建my_wordcount.txt文件,编辑一些单词 ,Esc :wq保存

[root@hadoop0 hadoop]# vim my_wordcount.txt

将本地的文件上传到hdfs

[root@hadoop0 hadoop]# bin/hdfs dfs -put my_wordcount.txt /data/input

启动wordcount程序,指定输入文件和输出文件(版本号需要改)

[root@hadoop0 hadoop]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar wordcount /data/input/my_wordcount.txt /data/out/my_wordcount

查看运行结果

[root@hadoop0 hadoop]# bin/hdfs dfs -cat /data/out/my_wordcount/part-r-00000

你学会了吗?如果你对本文有什么想法或意见,欢迎评论区告诉我们!

在全民抗疫的特殊时期下,在人员复杂、流动量大地方的出入口处都设置了无接触式无感红外人体测温系统。

在这次疫情防控中,无感人体测温系统发挥了怎样的作用?高精准的无感人体测温系统的核心技术武器是什么?对于开发者们来说,大家应该了解哪些技术?

今晚 8点《多场景疫情防控:解读云边端联动下的全栈 AI 技术应用》

推荐阅读:必看!Spark 进阶之路之「SparkSQL」入门概述 | 博文精选
如果你觉得 Git 很迷惑人,那么这份小抄正是为你准备的!
开辟 Dart 到 Native 的超级通道,饿了么跨平台的最佳实践
比特币归谁所有?有人通过分析区块链数据集找到答案
为什么说Transformer就是图神经网络?
脱单?撒狗粮?加班?女神节这么过 | 程序员有话说
真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发函数计算的正确姿势——支持 ES6 语法和 webpack 压缩

首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;: 函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计算资源&#xff…

邮件格式转换html,HTML邮件模板 - lenglingx的个人页面 - OSCHINA - 中文开源技术交流社区...

邮件要求兼容 outlook 等邮箱软件&#xff0c;发现很多样式都不生效。找到的模板如下&#xff1a;尊敬的开发者&#xff1a;                         “xxx”在此次的‘网络友好度测试’评级&#xff1a;4颗星(最高5颗星)。注意点不支持头部style、外…

Apache Cassandra 数据存储模型

我们在《Apache Cassandra 简介》文章中介绍了 Cassandra 的数据模型类似于 Google 的 Bigtable&#xff0c;对应的开源实现为 Apache HBase&#xff0c;而且我们在 《HBase基本知识介绍及典型案例分析》 文章中简单介绍了 Apache HBase 的数据模型。按照这个思路&#xff0c;A…

解决Navicat 出错:1130-host . is not allowed to connect to this MySql server,MySQL

use mysql; select host,user from user; update user set host% where userroot; flush privileges;

Knative Eventing 中 Channel 如何注入默认 Provisioner

场景 通常的在创建Broker时&#xff0c;我们需要通过 spec.ChannelTemplate 指定使用某个具体的 Channel Provisioner。例如这样的Broker: apiVersion: eventing.knative.dev/v1alpha1 kind: Broker metadata:name: pubsub-channel spec:channelTemplate:provisioner:apiVers…

删库跑路事件发生,SaaS云服务如何守护数据安全

作者 | 蒋敏峰责编 | Carol封图 | CSDN付费下载于视觉中国近日&#xff0c;某SaaS服务商/微盟遭遇员工删库跑路&#xff0c;服务器出现大面积故障&#xff0c;一时间让平台上的几百万家商户生意基本停摆。这一事件发生后&#xff0c;不管是厂商还是平台上的用户&#xff0c;都在…

express模板引擎 html,Express使用html模板的代码分析

&#xfeff;express默认使用jade模板&#xff0c;可以配置让其支持使用ejs或html模板。1.安装ejs在项目根目录安装ejs.npminstallejs2、引入ejsvarejsrequire(ejs);//我是新引入的ejs插件3、设置html引擎app.engine(html,ejs.__express);设置视图引擎app.set(viewengine,html)…

记一次吐血的ping: unknown host

背景&#xff1a; 某客户的ECS&#xff0c;ping域名提示unknown host&#xff0c;ping ip则可以通&#xff0c;ping的时候抓包没有解析的包出去&#xff0c;是解析的问题吗&#xff1f;1&#xff0c;测试ping域名以及抓包发现没有dns的解析包出去 # ping www.baidu.com -c 1 p…

Nacos Committer 张龙:Nacos Sync 的设计原理和规划

与你同行&#xff0c;抬头便是星空。 本文整理自Nacos Committer 张龙的现场分享&#xff0c;阿里巴巴中间件受权发布。 随着 Nacos 1.0.0 稳定版的发布&#xff0c;越来越多的企业开始在测试/预演/生产环境中逐步部署 Nacos。目前&#xff0c;除了部分企业已处于转型分布式架…

Linux 会成为主流桌面操作系统吗?

整理 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;2020 年 1 月 14 日&#xff0c;微软正式停止了 Windows 7 系统的扩展支持&#xff0c;这意味着服役十年的 Windows 7&#xff0c;属于它的时代真的终结了&#xff0c;说不出的再见&#xff0c;只能怀恋。…

阿里搜索推荐系统又双叒叕升级了?!

搜索导购产品作为搜索的流量入口&#xff0c;承载了为用户导购推荐、搜索流量分流的重要功能。主要产品包括&#xff1a;首页底纹、下拉推荐、搜索发现、导航、历史搜索等。经过几年的探索和积累&#xff0c;各个产品越发地成熟&#xff0c;机器学习算法广泛地应用于导购产品中…

处理网络超时问题的最佳实践

对于云上的用户来说&#xff0c;业务日志里面报超时问题处理起来往往比价棘手&#xff0c;因为1) 问题点可能在云基础设施层&#xff0c;也有可能在业务软件层&#xff0c;需要排查的范围非常广&#xff1b;2) 这类问题往往是不可复现问题&#xff0c;抓到现场比较难。在本文里…

BZip2Codec压缩、Map端压缩控制、Reduce端压缩控制……都在这份Hadoop整合压缩知识点里了!...

作者 | Tai_Park责编 | Carol来源 | CSDN 博客封图 | CSDN付费下载于东方 IC今天来聊聊 Hadoop 的压缩。压缩&#xff1a;原始数据通过压缩手段产生目标数据&#xff0c;要求输入和输出的内容是一样的&#xff08;大部分&#xff09;&#xff0c;但体积是不一样的。对于单机用户…

WAF+SLB负载不均衡案例分享

问题演变过程 时间点1&#xff1a;高防WAFSLB2台ECS 时间点2&#xff1a;高防WAFSLB4台ECS 问题描述 在时间点1时&#xff0c;没有发现明显的负载不均衡的情况。在时间点2时&#xff0c;出现大部分请求都打到了其中一台ECS上。需要定位问题原因 问题梳理 问题链路 是SLB后…

架构整洁之道, 看这一篇就够了!

程序的世界飞速发展&#xff0c;今天所掌握的技能可能明年就过时了&#xff0c;但有些知识历久弥新&#xff0c;掌握了它们&#xff0c;你在程序的海洋中就不会迷路&#xff0c;架构思想就是这样的知识。 本文是《架构整洁之道》的读书心得&#xff0c;作者将书中内容拆解后再组…

2019年度CSDN博客之星TOP10榜单揭晓,你上榜了吗?

培根说&#xff0c;『读书造成充实的人&#xff0c;会议造成未能觉悟的人&#xff0c;写作造成正确的人』。在短信短视频快速迭代的快时代&#xff0c;更深度的思考、更正确的实践&#xff0c;更成体系的写作与分享&#xff0c;尤显可贵。这里&#xff0c;每一篇博文都是开发者…

(进阶篇_01)Oracle数据同步3种场景

文章目录一、场景分析二、实战2.1. 创建原表表结构初始化数据2.2. 创建目标表表结构2.3. 同步前效果图2.4. 连接串2.5. 执行同步2.6.执行后效果图2.7.操作记录三、实战场景2&#xff08;第1种&#xff09;3.1. 原表表结构初始化数据3.2. 目标表表结构3.3. 连接字符串3.4. 数据同…

html背景图片横屏,CSS背景颜色 背景图片 居中 重复 固定样式background经验篇

我们使用CSS Background样式属性&#xff0c;可以设置网页背景单一颜色、网页背景为图片、网页背景图片居中于网页、网页背景图片网页固定位置、网页背景图片中网页中重复平铺等css背景样式介绍与案例讲解。扩展阅读&#xff1a;CSS背景Background基础&#xff1a;http://www.d…

借助混沌工程工具 ChaosBlade 构建高可用的分布式系统

在分布式架构环境下&#xff0c;服务间的依赖日益复杂&#xff0c;可能没有人能说清单个故障对整个系统的影响&#xff0c;构建一个高可用的分布式系统面临着很大挑战。在可控范围或环境下&#xff0c;使用 ChaosBlade 工具&#xff0c;对系统注入各种故障&#xff0c;持续提升…

etcd 在超大规模数据场景下的性能优化

概述 etcd是一个开源的分布式的kv存储系统, 最近刚被cncf列为沙箱孵化项目。etcd的应用场景很广&#xff0c;很多地方都用到了它&#xff0c;例如kubernetes就用它作为集群内部存储元信息的账本。本篇文章首先介绍我们优化的背景&#xff0c;为什么我们要进行优化, 之后介绍et…