hadoop 2.10.0 以docker的方式进行集群安装

一、基本结构要求

hadoop有三种安装方式,本机、伪集群和集群方式,考虑到还是想在本机进行集群方式的程序运行,那么最佳方式只能是通过docker来模拟几台独立主机了。

三台主机,通过运行三个docker实例, 主机名和ip分别规划如下:

master : 172.18.0.3

slave1  : 172.18.0.4

slave2 : 172.18.0.5

其中master作为hadoop集群的主节点,同时有两个工作节点运行DataNode和NodeManager。在两个节点上存储hdfs数据和进行mapreduce运算。 

另外,就是注意,主机名不能带下划线和中划线等特殊字符,否则会出现莫名其妙的错误。

二、软件相关需求:

在官网上hadoop已经有3.0,但考虑到2.x版本的相关学习资料较多,现存的项目多以2.x为主,可以通过先学习2.x 再升级学习3.x的方式,相关docker的安装和镜像中ubuntu系统安装的步骤就不再详细讲述,网路上相关的文章比较多了。


三、配置hadoop 2.10.0

1、运行容器实例:

主节点:

docker run -ti -h master --name master --network=mynetwork --ip=172.18.0.3 ubuntu:18.04 /bin/bash

slave1:

docker run -ti -h slave1 --name slave1 --network=mynetwork --ip=172.18.0.4 ubuntu:18.04 /bin/bash

slave2:

docker run -ti -h slave2 --name slave2--network=mynetwork --ip=172.18.0.5 ubuntu:18.04 /bin/bash

其中mynetwork工作组需要提前创建。

2、安装一些工具软件:

hadoop进程控制相关: ssh、rsync

配置文件编辑:vim

测试网路联通等工具包:net-tools、inetutils-ping

可以在主机内部通过apt install 依次来安装;

3、配置java环境和环境变量

jdk的配置就比较通俗了,不再陈述, 环境变量JAVA_HOME、CLASS_PATH和PATH等更新,可写入~/.bashrc中进行export,配置完成后source ~/.bashrc进行生效,可运行java命令进行验证。

在bashrc编辑的同时,可将开机启动sshd服务的配置同时写入,这样可保障ssh服务开机既可登录。免得每次手动启动,具体操作为:在.bashrc尾部加入 service ssh start

4、将hadoop文件拷贝至镜像内:

docker cp ~/下载/hadoop-2.10.0 master:/usr/local/

在.bashrc中继续增加:export HADOOP_HOME=/usr/local/hadoop-2.10.0

同时在PATH中增加$HADOOP_HOME/bin和$HADOOP_HOME/sbin(sbin中存放操作常用操作脚本)

5、修改hosts文件

修改几台主机的hosts文件,目的就是让几台主机能够通过主机名来互相知道具体的ip地址,当然也包括自己,这样上述我们在hadoop配置文件中写入的主机名才能真正得到正确执行。在master主机修改完毕后,将hosts文件拷贝至其他slave1、slave2。增加内容如下:

master    172.18.0.3

slave1    172.18.0.4

slave2    172.18.0.5

6、配置hadoop具体参数

整个 hadoop的配置文件都放置hadoop 根目录下etc/hadoop内,包含一系列.xml和.sh文件,这些就是我们要具体配置的目标。

a、配置hdfs的namenode的服务地址:修改/usr/local/hadoop-2.10.0/etc/hadoop/core-site.xml

增加节点, fs.defaultFS, 服务器配置为master,schame为hdfs, 如不指定端口、默认为8020,具体:

<property>

<name>fs.defaultFS</name>

<value>hdfs://master:9000</value>

</property>

b、配置hdfs数据存储的副本个数:修改/usr/local/hadoop-2.10.0/etc/hadoop/hdfs-site.xml

增加dfs.replication节点,值为2,目前有两个slave,如果配置3,超过当前的slave数量,是无效的。

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

c、配置secondaryNamenode: 修改/usr/local/hadoop-2.10.0/etc/hadoop/hdfs-site.xml

增加dfs.namenode.secondary.http-address节点, 值为 master:50090,注意,虽然节点名字是配置的http监控的地址,但该配置项为多用,通过httpaddress的配置, 也同时让hadoop服务确认了secondaryNameNode的主机名字

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>master:50090</value>

</property>

d、配置将mapreduce提交给yarn进行管理,修改/usr/local/hadoop-2.10.0/etc/hadoop/mapred-site.xml

(将mapred-site.xml.template  重命名 mapred-site.xml)

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

e、配置NodeManager上运行的附加服务,将其设置为mapreduce_shuffle,注意不是mapreduce.shuffle;这样才可以在nodemanager节点上正常运行mapreduce计算;修改/usr/local/hadoop-2.10.0/etc/hadoop/yarn-site.xml

增加

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

f、设置resourceManager的主机名,这样让服务启动时能确定在哪台机器上启动ResourceManager;修改/usr/local/hadoop-2.10.0/etc/hadoop/yarn-site.xml

增加

<property>

<name>yarn.resourcemanager.hostname</name>

<value>master</value>

</property>

注:此属性会在 yarn.resourcemanager.http-adress没有设置的情况下,替换其默认值的主机名,默认端口不变;一旦设定了yarn.resourcemanager.http-address,会覆盖hostname项目的主机值。所以除非有对各个子项目端口的特殊需求,否则按上述直接指定resourcemanager的hostname即可了。

g、修改hadoop-env.sh、mapred-env.sh、yarn-env.sh,修改套路一致,就是修改其中具体的export JAVA_HOME的具体路径;使其能找到java sdk的正确路径,注意不要以为只设定环境变量就无问题。

h、注册所有的slave工作节点, 供主节点在服务启动时知道都在哪些主机上启datanode服务或nodeManager服务;修改etc/hadoop/slaves文件,去掉local,按照 一行一个主机的形式写入,例如我们的内容既是:

slave1

slave2

通过以上abcdefgh几个步骤,hadoop本身的设定基本完成了,将hadoop-2.10.0拷贝至 slave1和slave2两个主机,目录位置要求一致,当然那两台主机也必须配置了java sdk,目录等保持和master一致。

五、配置ssh无密码登录

因为在master节点启动服务时,主节点会通过ssh的方式,按照我们在slaves文件中的主机列表,逐一ssh登录,并启动datanode或者NodeManager服务,所以我们最好配置ssh的自动无密码登录。具体方式如下:

a、在master节点执行 ssh-keygen -t rsa -P '' -t ~/.ssh/id_rsa,这样会在.ssh目录下同时生成id_rsa.pub公钥。

b、将公钥复制到需要信任的slave1、slave2和master自己;针对三个主机名分别执行:ssh-copy-id slave1 、ssh-copy-id slave2、ssh-copy-id master 将公钥加入。

c、因为docker的默认用户是root,并且没有密码,ssh默认是不允许root登录的,我们可以修三台镜像主机的/etc/ssh/sshd_config文件,将PermitRootLogin 设定为yes, 将PermitEmptyPasswords设定为yes;

d、为root增加密码 passwd root

如果ab两步不能执行,那么可在c、d两步骤完成后,可以在再次进行a、b两步骤。

e、配置修改完后,记得重启sshd服务 : service ssh restart


六、格式化namenode的数据

在运行hadoop服务前,需要在master上对namenode的数据存储进行格式化

在 master主机控制台上运行:hdfs namenode -format


七、以上配置完毕后,启动hadoop服务

在master主机的控制台输入start-all.sh 

完成后可输入jps来判定服务是否正常,如正常有如下进程

NameNode

SecondaryNameNode

ResourceManager

登入slave1或者slave2,运行jps,如正常应有如下进程

DataNode

NodeManager

stop-all.sh 停止hadoop各项服务。

八、综述

hadoop的整个配置,并无太大难度,但确实是比较繁琐,涉及方面和配置项较多,容易遗漏某个细节导致运行出错。但如结合理解hadoop 服务在运行时的流程和分工,  其配置也就并无难度而易于理解了。


九、附表

FROM ubuntu:latest

COPY sources.list /etc/apt

COPY hadoop-2.10.1.tar.gz jdk1.8.0_191.zip scala-2.13.5.tgz sshd_config hadoop_conf/* /usr/local/

RUN apt update \

&& apt -y install unzip \

&& apt -y install ssh \

&& apt -y install rsync \

&& apt -y install vim \

&& apt -y install inetutils-ping \

&& apt -y install net-tools \

&& echo "service ssh start" >> /root/.bashrc \

&& tar xvf /usr/local/hadoop-2.10.1.tar.gz -C /usr/local \

&& tar xvf /usr/local/scala-2.13.5.tgz -C /usr/local \

&& unzip -d /usr/local /usr/local/jdk1.8.0_191.zip \

&& ln -s /usr/local/hadoop-2.10.1 /usr/local/hadoop \

&& ln -s /usr/local/jdk1.8.0_191 /usr/local/jdk \

&& ln -s /usr/local/scala-2.13.5 /usr/local/scala \

&& rm -f /usr/local/jdk1.8.0_191.zip \

&& rm -f /usr/local/hadoop-2.10.1.tar.gz \

&& rm -f /usr/local/scala-2.13.5.tgz \

&& mv /usr/local/*.sh /usr/local/hadoop/etc/hadoop/ \

&& mv /usr/local/*.xml /usr/local/hadoop/etc/hadoop/ \

&& mv /usr/local/slaves /usr/local/hadoop/etc/hadoop/ \

&& mv /usr/local/sshd_config /etc/ssh/ \

&& passwd -d root

ENV JAVA_HOME=/usr/local/jdk HADOOP_HOME=/usr/local/hadoop SCALA_HOME=/usr/local/scala

ENV PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin

CMD /bin/bash

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270