0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将Hadoop部署在低廉的硬件上

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-09-27 09:40 次阅读

一、概述

Hadoop 是 Apache 软件基金会下一个开源分布式计算平台,以 HDFS(Hadoop Distributed File System)、MapReduce(Hadoop2.0 加入了 YARN,Yarn 是资源调度框架,能够细粒度的管理和调度任务,还能够支持其他的计算框架,比如 spark)为核心的 Hadoop 为用户提供了系统底层细节透明的分布式基础架构。hdfs 的高容错性、高伸缩性、高效性等优点让用户可以将 Hadoop 部署在低廉的硬件上,形成分布式系统。

a0425924-3daf-11ed-9e49-dac502259ad0.pngHDFS a07397b4-3daf-11ed-9e49-dac502259ad0.pngYARN

二、开始部署

1)添加源

地址:

https://artifacthub.io/packages/helm/apache-hadoop-helm/hadoop

helmrepoaddapache-hadoop-helmhttps://pfisterer.github.io/apache-hadoop-helm/
helmpullapache-hadoop-helm/hadoop--version1.2.0
tar-xfhadoop-1.2.0.tgz

2)构建镜像 Dockerfile

FROMmyharbor.com/bigdata/centos:7.9.2009

RUNrm-f/etc/localtime&&ln-sv/usr/share/zoneinfo/Asia/Shanghai/etc/localtime&&echo"Asia/Shanghai">/etc/timezone

RUNexportLANG=zh_CN.UTF-8

#创建用户和用户组,跟yaml编排里的spec.template.spec.containers.securityContext.runAsUser:9999
RUNgroupadd--system--gid=9999admin&&useradd--system--home-dir/home/admin--uid=9999--gid=adminadmin

#安装sudo
RUNyum-yinstallsudo;chmod640/etc/sudoers

#给admin添加sudo权限
RUNecho"adminALL=(ALL)NOPASSWD:ALL">>/etc/sudoers

RUNyum-yinstallinstallnet-toolstelnetwget

RUNmkdir/opt/apache/

ADDjdk-8u212-linux-x64.tar.gz/opt/apache/

ENVJAVA_HOME=/opt/apache/jdk1.8.0_212
ENVPATH=$JAVA_HOME/bin:$PATH

ENVHADOOP_VERSION3.3.2
ENVHADOOP_HOME=/opt/apache/hadoop

ENVHADOOP_COMMON_HOME=${HADOOP_HOME}
HADOOP_HDFS_HOME=${HADOOP_HOME}
HADOOP_MAPRED_HOME=${HADOOP_HOME}
HADOOP_YARN_HOME=${HADOOP_HOME}
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
PATH=${PATH}:${HADOOP_HOME}/bin

#RUNcurl--silent--output/tmp/hadoop.tgzhttps://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.apache.org/dist/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz&&tar--directory/opt/apache-xzf/tmp/hadoop.tgz&&rm/tmp/hadoop.tgz
ADDhadoop-${HADOOP_VERSION}.tar.gz/opt/apache
RUNln-s/opt/apache/hadoop-${HADOOP_VERSION}${HADOOP_HOME}

RUNchown-Radmin:admin/opt/apache

WORKDIR$HADOOP_HOME

#Hdfsports
EXPOSE500105002050070500755009080209000

#Mapredports
EXPOSE19888

#Yarnports
EXPOSE8030803180328033804080428088

#Otherports
EXPOSE497072122

开始构建镜像

dockerbuild-tmyharbor.com/bigdata/hadoop:3.3.2.--no-cache

###参数解释
#-t:指定镜像名称
# . :当前目录Dockerfile
#-f:指定Dockerfile路径
#--no-cache:不缓存

推送到镜像仓库

dockerpushmyharbor.com/bigdata/hadoop:3.3.2

调整目录结构

mkdirhadoop/templates/hdfshadoop/templates/yarn
mvhadoop/templates/hdfs-*hadoop/templates/hdfs/
mvhadoop/templates/yarn-*hadoop/templates/yarn/

2)修改配置

hadoop/values.yaml

image:
repository:myharbor.com/bigdata/hadoop
tag:3.3.2
pullPolicy:IfNotPresent

...

persistence:
nameNode:
enabled:true
storageClass:"hadoop-nn-local-storage"
accessMode:ReadWriteOnce
size:10Gi
local:
-name:hadoop-nn-0
host:"local-168-182-110"
path:"/opt/bigdata/servers/hadoop/nn/data/data1"

dataNode:
enabled:true
storageClass:"hadoop-dn-local-storage"
accessMode:ReadWriteOnce
size:20Gi
local:
-name:hadoop-dn-0
host:"local-168-182-110"
path:"/opt/bigdata/servers/hadoop/dn/data/data1"
-name:hadoop-dn-1
host:"local-168-182-110"
path:"/opt/bigdata/servers/hadoop/dn/data/data2"
-name:hadoop-dn-2
host:"local-168-182-110"
path:"/opt/bigdata/servers/hadoop/dn/data/data3"
-name:hadoop-dn-3
host:"local-168-182-111"
path:"/opt/bigdata/servers/hadoop/dn/data/data1"
-name:hadoop-dn-4
host:"local-168-182-111"
path:"/opt/bigdata/servers/hadoop/dn/data/data2"
-name:hadoop-dn-5
host:"local-168-182-111"
path:"/opt/bigdata/servers/hadoop/dn/data/data3"
-name:hadoop-dn-6
host:"local-168-182-112"
path:"/opt/bigdata/servers/hadoop/dn/data/data1"
-name:hadoop-dn-7
host:"local-168-182-112"
path:"/opt/bigdata/servers/hadoop/dn/data/data2"
-name:hadoop-dn-8
host:"local-168-182-112"
path:"/opt/bigdata/servers/hadoop/dn/data/data3"

...

service:
nameNode:
type:NodePort
ports:
dfs:9000
webhdfs:9870
nodePorts:
dfs:30900
webhdfs:30870
dataNode:
type:NodePort
ports:
dfs:9000
webhdfs:9864
nodePorts:
dfs:30901
webhdfs:30864
resourceManager:
type:NodePort
ports:
web:8088
nodePorts:
web:30088
...

securityContext:
runAsUser:9999
privileged:true

hadoop/templates/hdfs/hdfs-nn-pv.yaml

{{-range.Values.persistence.nameNode.local}}
---
apiVersion:v1
kind:PersistentVolume
metadata:
name:{{.name}}
labels:
name:{{.name}}
spec:
storageClassName:{{$.Values.persistence.nameNode.storageClass}}
capacity:
storage:{{$.Values.persistence.nameNode.size}}
accessModes:
-ReadWriteOnce
local:
path:{{.path}}
nodeAffinity:
required:
nodeSelectorTerms:
-matchExpressions:
-key:kubernetes.io/hostname
operator:In
values:
-{{.host}}
---
{{-end}}

hadoop/templates/hdfs/hdfs-dn-pv.yaml

{{-range.Values.persistence.dataNode.local}}
---
apiVersion:v1
kind:PersistentVolume
metadata:
name:{{.name}}
labels:
name:{{.name}}
spec:
storageClassName:{{$.Values.persistence.dataNode.storageClass}}
capacity:
storage:{{$.Values.persistence.dataNode.size}}
accessModes:
-ReadWriteOnce
local:
path:{{.path}}
nodeAffinity:
required:
nodeSelectorTerms:
-matchExpressions:
-key:kubernetes.io/hostname
operator:In
values:
-{{.host}}
---
{{-end}}

修改 hdfs service

mvhadoop/templates/hdfs/hdfs-nn-svc.yamlhadoop/templates/hdfs/hdfs-nn-svc-headless.yaml
mvhadoop/templates/hdfs/hdfs-dn-svc.yamlhadoop/templates/hdfs/hdfs-dn-svc-headless.yaml
#注意修改名称,不要重复

hadoop/templates/hdfs/hdfs-nn-svc.yaml

#AheadlessservicetocreateDNSrecords
apiVersion:v1
kind:Service
metadata:
name:{{include"hadoop.fullname".}}-hdfs-nn
labels:
app.kubernetes.io/name:{{include"hadoop.name".}}
helm.sh/chart:{{include"hadoop.chart".}}
app.kubernetes.io/instance:{{.Release.Name}}
app.kubernetes.io/component:hdfs-nn
spec:
ports:
-name:dfs
port:{{.Values.service.nameNode.ports.dfs}}
protocol:TCP
nodePort:{{.Values.service.nameNode.nodePorts.dfs}}
-name:webhdfs
port:{{.Values.service.nameNode.ports.webhdfs}}
nodePort:{{.Values.service.nameNode.nodePorts.webhdfs}}
type:{{.Values.service.nameNode.type}}
selector:
app.kubernetes.io/name:{{include"hadoop.name".}}
app.kubernetes.io/instance:{{.Release.Name}}
app.kubernetes.io/component:hdfs-nn

hadoop/templates/hdfs/hdfs-dn-svc.yaml

#AheadlessservicetocreateDNSrecords
apiVersion:v1
kind:Service
metadata:
name:{{include"hadoop.fullname".}}-hdfs-dn
labels:
app.kubernetes.io/name:{{include"hadoop.name".}}
helm.sh/chart:{{include"hadoop.chart".}}
app.kubernetes.io/instance:{{.Release.Name}}
app.kubernetes.io/component:hdfs-nn
spec:
ports:
-name:dfs
port:{{.Values.service.dataNode.ports.dfs}}
protocol:TCP
nodePort:{{.Values.service.dataNode.nodePorts.dfs}}
-name:webhdfs
port:{{.Values.service.dataNode.ports.webhdfs}}
nodePort:{{.Values.service.dataNode.nodePorts.webhdfs}}
type:{{.Values.service.dataNode.type}}
selector:
app.kubernetes.io/name:{{include"hadoop.name".}}
app.kubernetes.io/instance:{{.Release.Name}}
app.kubernetes.io/component:hdfs-dn

修改 yarn service

mvhadoop/templates/yarn/yarn-nm-svc.yamlhadoop/templates/yarn/yarn-nm-svc-headless.yaml
mvhadoop/templates/yarn/yarn-rm-svc.yamlhadoop/templates/yarn/yarn-rm-svc-headless.yaml
mvhadoop/templates/yarn/yarn-ui-svc.yamlhadoop/templates/yarn/yarn-rm-svc.yaml
#注意修改名称,不要重复

hadoop/templates/yarn/yarn-rm-svc.yaml

#Servicetoaccesstheyarnwebui
apiVersion:v1
kind:Service
metadata:
name:{{include"hadoop.fullname".}}-yarn-rm
labels:
app.kubernetes.io/name:{{include"hadoop.name".}}
helm.sh/chart:{{include"hadoop.chart".}}
app.kubernetes.io/instance:{{.Release.Name}}
app.kubernetes.io/component:yarn-rm
spec:
ports:
-port:{{.Values.service.resourceManager.ports.web}}
name:web
nodePort:{{.Values.service.resourceManager.nodePorts.web}}
type:{{.Values.service.resourceManager.type}}
selector:
app.kubernetes.io/name:{{include"hadoop.name".}}
app.kubernetes.io/instance:{{.Release.Name}}
app.kubernetes.io/component:yarn-rm

修改控制器

在所有控制中新增如下内容:

containers:
...
securityContext:
runAsUser:{{.Values.securityContext.runAsUser}}
privileged:{{.Values.securityContext.privileged}}

hadoop/templates/hadoop-configmap.yaml

###1、将/root换成/opt/apache
###2、TMP_URL="http://{{include"hadoop.fullname".}}-yarn-rm-headless:8088/ws/v1/cluster/info"

3)开始安装

#创建存储目录
mkdir-p/opt/bigdata/servers/hadoop/{nn,dn}/data/data{1..3}

helminstallhadoop./hadoop-nhadoop--create-namespace

NOTES

NAME:hadoop
LASTDEPLOYED:SatSep2417552022
NAMESPACE:hadoop
STATUS:deployed
REVISION:1
TESTSUITE:None
NOTES:
1.YoucancheckthestatusofHDFSbyrunningthiscommand:
kubectlexec-nhadoop-ithadoop-hadoop-hdfs-nn-0--/opt/hadoop/bin/hdfsdfsadmin-report

2.Youcanlisttheyarnnodesbyrunningthiscommand:
kubectlexec-nhadoop-ithadoop-hadoop-yarn-rm-0--/opt/hadoop/bin/yarnnode-list

3.Createaport-forwardtotheyarnresourcemanagerUI:
kubectlport-forward-nhadoophadoop-hadoop-yarn-rm-08088:8088

Thenopentheuiinyourbrowser:

openhttp://localhost:8088

4.Youcanrunincludedhadooptestslikethis:
kubectlexec-nhadoop-ithadoop-hadoop-yarn-nm-0--/opt/hadoop/bin/hadoopjar/opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.2-tests.jarTestDFSIO-write-nrFiles5-fileSize128MB-resFile/tmp/TestDFSIOwrite.txt

5.Youcanlistthemapreducejobslikethis:
kubectlexec-nhadoop-ithadoop-hadoop-yarn-rm-0--/opt/hadoop/bin/mapredjob-list

6.Thischartcanalsobeusedwiththezeppelinchart
helminstall--namespacehadoop--sethadoop.useConfigMap=true,hadoop.configMapName=hadoop-hadoopstable/zeppelin

7.Youcanscalethenumberofyarnnodeslikethis:
helmupgradehadoop--setyarn.nodeManager.replicas=4stable/hadoop

Makesuretoupdatethevalues.yamlifyouwanttomakethispermanent.

a08eac48-3daf-11ed-9e49-dac502259ad0.png查看

kubectlgetpods,svc-nhadoop-owide
a0bac5bc-3daf-11ed-9e49-dac502259ad0.png

hdfs web:

http://192.168.182.110:30870/

a0f35468-3daf-11ed-9e49-dac502259ad0.png

yarn web:

http://192.168.182.110:30088/

a11c3342-3daf-11ed-9e49-dac502259ad0.png

5)测试验证

HDFS 测试验证

kubectlexec-ithadoop-hadoop-hdfs-nn-0-nhadoop--bash
[root@local-168-182-110hadoop]#kubectlexec-ithadoop-hadoop-hdfs-nn-0-nhadoop--bash
bash-4.2$
bash-4.2$
bash-4.2$hdfsdfs-mkdir/tmp
bash-4.2$hdfsdfs-ls/
Found1items
drwxr-xr-x-adminsupergroup02022-09-2417:56/tmp
bash-4.2$echo"testhadoop">test.txt
bash-4.2$hdfsdfs-puttest.txt/tmp/
bash-4.2$hdfsdfs-ls/tmp/
Found1items
-rw-r--r--3adminsupergroup122022-09-2417:57/tmp/test.txt
bash-4.2$hdfsdfs-cat/tmp/
cat:`/tmp':Isadirectory
bash-4.2$hdfsdfs-cat/tmp/test.txt
testhadoop
bash-4.2$

a141d174-3daf-11ed-9e49-dac502259ad0.png
Yarn 的测试验证等后面讲到 hive on k8s 再来测试验证。

6)卸载

helmuninstallhadoop-nhadoop

kubectldeletepod-nhadoop`kubectlgetpod-nhadoop|awk'NR>1{print$1}'`--force
kubectlpatchnshadoop-p'{"metadata":{"finalizers":null}}'
kubectldeletenshadoop--force

这里也提供 git 下载地址,有需要的小伙伴可以下载部署玩玩:

https://gitee.com/hadoop-bigdata/hadoop-on-k8s

在 k8s 集群中 yarn 会慢慢被弱化,直接使用 k8s 资源调度,而不再使用 yarn 去调度资源了,这里只是部署了单点,仅限于测试环境使用,下一篇文章会讲 Hadoop 高可用 on k8s 实现,请小伙伴耐心等待,有任何疑问欢迎给我留言~

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 硬件
    +关注

    关注

    11

    文章

    3324

    浏览量

    66216
  • Hadoop
    +关注

    关注

    1

    文章

    90

    浏览量

    15982
  • 计算框架
    +关注

    关注

    0

    文章

    4

    浏览量

    1932

原文标题:7 张图入门 Hadoop 在 K8S 环境中部署

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何将弄好的程序烧multisum的芯片呢?

    如何将弄好的程序烧multisum的芯片呢?
    发表于 02-13 15:51

    hadoop无法访问50070端口解决方案

    Hadoop50070是hdfs的web管理页面,搭建Hadoop集群环境时,有些大数据开发技术人员会遇到Hadoop 50070端口打不开的情况,引起该问题的原因很多,想要解决这个
    发表于 04-10 16:02

    Hadoop的集群环境部署说明

    步骤,那么多的指令肯定是会觉得很繁琐的。毕竟都是从菜鸟一步一步过来的,记得当初做hadoop集群环境搭建真的是很烦琐。目前国内的hadoop商业发行版虽然比较多,但是集群环境的搭建方面基本都很类似
    发表于 10-12 15:51

    hadoop和spark的区别

    学习hadoop已经有很长一段时间了,好像是二三月份的时候朋友给了一个国产Hadoop发行版下载地址,因为还是在学习阶段就下载了一个三节点的学习版玩一下。研究、学习hadoop的朋友
    发表于 11-30 15:51

    大数据hadoop入门之hadoop家族产品详解

    Spark和Strom数据存在内存中 Pig/Hive(Hadoop编程):角色描述Pig是一种高级编程语言,处理半结构化数据拥有非常高的性能,可以帮助我们缩短开发周期。Hive是数据分析查询工具,尤其
    发表于 12-26 15:02

    Hadoop新手篇:hadoop入门基础教程

    一起就算是hadoop新手入门的一个基础性教程吧(持续更新中)。 五篇文章讲什么?前两周时间写的五篇文章,其实都在讲一件事情——hadoop运行环境安装部署!可能口头描述几分钟就可以把整个过程说完了,但
    发表于 01-09 15:39

    hadoop集群的NameNod

    hadoop集群部署
    发表于 08-20 14:33

    Hadoop-260 HA部署步骤

    Hadoop-260 HA(高可用架构)部署(超详细)
    发表于 09-12 09:38

    如何将程序很好的部署

    我们要开启一个项目,如何将程序很好的部署关系到后续的代码移植和代码量增多之后的管理。本文就针对上述问题,提出一种合理的工程部署方法。我们基于cobemx的软件灵活性,确保每次编译之后否不改变系统
    发表于 08-24 07:40

    如何将AI模型部署到嵌入式系统中

    本期我们分享主题是如何将 AI 模型部署到嵌入式系统中,下一期介绍如何在 RT-Thread 操作系统运行 Mnist Demo(手写数字识别)。 嵌入式关联 AIAI落地一直是一
    发表于 12-14 07:55

    如何将外界温度显示1602LCD

    如何将外界温度显示1602LCD
    发表于 01-24 07:30

    如何将RF与数模威廉希尔官方网站 设计同一PCB

    如何将RF与数模威廉希尔官方网站 设计同一PCB
    发表于 01-12 21:59 17次下载

    浅析Hadoop集群硬件选择

    Hadoop远远不止HDFS和MapReduce/Spark,它是一个全面的数据平台。CDH平台包含了很多Hadoop生态圈的其他组件。我们在做群集规划的时候往往还需要考虑HBase,Impala和Solr等。它们都会运行在DataNode
    发表于 11-09 11:59 1691次阅读
    浅析<b class='flag-5'>Hadoop</b>集群<b class='flag-5'>硬件</b>选择

    基于Hadoop的I/O硬件压缩加速器

    ,因此使用硬件压缩加速器来替换软件压缩。Hadoop运行在Java虚拟机上,无法直接调用底层I/O硬件压缩加速器。通过实现Hadoop压缩器/解压缩器类和设计C++动态链接库来解决从
    发表于 11-27 10:49 0次下载
    基于<b class='flag-5'>Hadoop</b>的I/O<b class='flag-5'>硬件</b>压缩加速器

    idea如何将项目部署到tomcat服务器

    项目部署到Tomcat服务器是一个常见的操作,下面是一个详细的步骤指南,描述了如何将项目成功部署到Tomcat服务器
    的头像 发表于 12-03 15:25 1606次阅读