个人博客服务器没在续,在这里开始第一遍
1、hadoop集群
1.1、基于yarn的hdfs安装
前言:yarn服务需要每个节点之间通过host进行通信,hdfs的name node也需要知道data node的host
1、基于docker-compose启动可以使用link来获取其他容器host
2、基于k8s的搭建,难点则在host的同步
本次搭建基于四台机器的集群测试搭建,基于yarn的hdfs部署,由于本次记录是为了k8s集群搭建,主要记录搭建步骤,文件的详细配置、其他安装方式如local、standalone可以参考其他文章,环境如下:
master:192.168.81.232
slave1: 192.168.81.231
slave2: 192.168.81.227
slave3: 192.168.81.228
master | slave1 | slave2 | slave3 | |
---|---|---|---|---|
hdfs | name node, data node | data node | data node,secondarynamenode | data node |
yarn | node manager | resource manager,node manager | node manager | node manager |
hive | hive | |||
spark | spark file | spark file | spark file | spark file |
1、hadoop文件配置(括号中配置主要是地址配置):
- 每台机器部署jdk安装(1.8版本)
- core-site.xml文件配置(存储目录、name node地址)
- hdfs-site.xml文件配置(副本数量、secondarynamenode地址)
- yarn-env.sh文件配置jdk路径
- yarn-site.xml文件配置resourcemanager地址
- mapred-env.sh配置jdk路径
- mapred-site.xml配置mr运行在yarn 上
2、配置好的hadoop文件夹分发到4台机器上
3、在namenode上执行hdfs namenode -format
4、启动集群(没有用yarn的启动文件,所以不需要设置免密登陆,为了用k8s的启动命令):
(nohup 命令 &) :以子进程后台启动
# master:
(nohup hdfs namenode &)
(nohup hdfs datanode -regular &)
(nohup yarn nodemanager -regular &)
# slave1:
(nohup hdfs datanode -regular &)
(nohup yarn nodemanager &)
(nohup yarn resourcemanager &)
# slave2:
(nohup hdfs datanode -regular &)
(nohup yarn nodemanager &)
(nohup hdfs secondarynamenode &)
# slave3:
(nohup hdfs datanode -regular &)
(nohup yarn nodemanager &)
至此hdfs集群就已经安装成功了,如需启动name node的HA,可以启动zookeeper的k8s集群,并在hadoop的:hdfs-site.xml配置ha的name node地址及数据一致性的方式等,core-site.xml配置zookeeper的地址
1.2、使用hive
hive只需要启动一台机器,并且并不需要一定在刚刚的集群上安装,只需要机器上有刚刚配置好的hadoop文件夹就行
1、hive文件配置
- hive-env.sh配置hadoop的目录地址,jdk地址
- hive-site.xml配置存储目录、hdfs地址、mysql地址、metastore、hiveserver2配置
- lib目录上传mysql的jdbc连接包
# hive
# 第一次启动进行初始化
(nohup schematool -initSchema -dbType mysql &)
(nohup hive --service metastore &)
hive --service hiveserver2
# debug信息测试用
#hive --service hiveserver2 -hiveconf hive.root.logger=debug,console
2、启动服务
2、spark集群
2.1 基于yarn的spark集群
spark基于yarn的集群部署,只需要在yarn集群每台机器上配置spark的文件(运行节点),spark在任意一台机器上都可以spark submit到yarn上(不在yarn的集群上submit也可以,只要下面对应配置目录做好)
1、安装jdk
2、安装scala
3、文件配置
- spark-env.sh配置jdk、scala、yarn(hadoop)目录、spark运行参数、spark配置目录
- 基于yarn的spark,不需要配置slaves文件(没有主从之分,stanalone需要配置)
4、任务运行
# 会根据配置的yarn目录,寻找到yarn 的rm节点提交,rm分配置资源运行
spark-submit --master yarn --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples*.jar
# mster woker方式提交,指定master节点()stannalone模式
spark-submit --master spark://192.168.80.235:7077 --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples*.jar
#Local 调试
spark-submit --master local --class demo /Users/gumkk/IdeaProjects/myFirstProject/out/artifacts/myFirstProject_jar/myFirstProject.jar
2.2 yarn资源调度流程
这边主要是自己的一个记录,Yarn主要由四个重要角色组成:
-
ResourceManager:资源管理器
-
NodeManager:节点管理器
-
ApplicaitonMaster:用户提交的每个program都会对应一个ApplicationMaster,ApplicationMaster向ResourceManager申请资源,请求NodeManager启动task
-
Container:容器是资源调度的单位,Application Master会给task分配Container,分配流程为Resource Manager ->Application Master -> task
总结:
基于k8s的hadoop集群部署,难点在于各个组件的master和node通过hosts进行通信,阅读其他技术文章,有如下两种思路:1、固定每个pod的ip和hosts,然后通过公司的dns做一个解析,这样只要在配置文件里配置好各组件的地址、hosts的文件,启动方式和宿主机一样;2、通过zookeeper或etcd的一些服务发现组件,在各服务节点启动时进行注册、并更新本地hosts文件。
后面会进行具体实施的结果对比,不过CDH其实挺香,考虑基于CDH的容器化部署。