大数据开发一 Hadoop3.2.1 集群搭建与启动

目录

1. 简述

2. 集群搭建与启动

? ?2.1基本环境准备与安装选择

? ?2.2 hadoop的配置文件设置 (重点)

? ?2.3 启动

3. 踩坑记录

4. 结语



1. 简述

作为一名后端工程师,一直对大数据开发有浓厚的兴趣。自主学习已半年有余,特此总结Hadoop3.2.1 在虚拟机(centos6.7)环境下的集群搭建启动流程(从无到有),希望能帮到同在踩坑中的读者。

2. 集群搭建与启动

2.1基本环境准备与安装选择

基础环境不过多赘述,本人情况如下:

1. 三台虚拟机(centos6.7,最好是6以上),hosts配置域名

2. jdk1.8(最好别用openjdk,源码不完整),hadoop3.x只能兼容jdk1.8及以上版本;

3.三台虚拟机上都**创建hadoop的专属用户,全程使用该用户执行操作。**一是为了养成层次化地进行服务器管理操作的习惯,二是避免后续频繁更换操作用户发生权限问题,浪费精力排查。创建hadoop用户可参考https://www.cnblogs.com/dongxiucai/p/9472508.html

4. 主节点的hadoop用户到所有机器(包括自己)ssh免密,当然也可以等部署完启动时发现权限问题再来添加,能加深理解。

ssh-keygen
ssh-copy-id siqi01
ssh-copy-id siqi02
ssh-copy-id siqi03

5. hadoop包通过官网下载,https://hadoop.apache.org/releases.html。有源码source包与二进制binary包,源码包的编译需要各种环境配置,所以建议初学者选binary包下载即可,解压路径自己安排(我是在~/apps/下)。

2.2 hadoop的配置文件设置 (重点)

hadoop解压缩后,在 ~/apps/hadoop-3.2.1下可以看到hadoop的基本结构。

首先就需要对其中的etc/hadoop/下的某些配置文件进行启动前配置。

因机器、系统各不相同,配置不能照搬,需要理解每个参数作用是什么,默认值是什么,为什么需要手动设置。所以要有查阅官方配置文档的习惯,文档在官网https://hadoop.apache.org/docs/stable/最底下。

当然此处我会给出我的配置信息(尽量简化),并做一个简单解释。

1. hadoop-env.sh中的JAVA_HOME参数,请指向自己系统的jdk路径。该参数是hadoop运行时读取环境变量的路径。(整个脚本就这一行,其他都是注释掉的)

2. core-site.xml (公共配置)

<property>
    <!-- 必须设置:默认文件系统(存储层和运算层解耦 -->
    <!-- 此处值为uri结构: 使用内置的hdfs系统 端口号一般都是9000 -->
    <name>fs.defaultFS</name>
    <value>hdfs://siqi01:9000</value>
</property>
<property>
    <!-- 必须设置:hadoop在本地的工作目录,用于放hadoop进程的临时数据,可以自己指定 -->
    <name>hadoop.tmp.dir</name>
    <value>/home/hadoop/tmp</value>
</property>

以上两个参数都是必须配置的,因为文档中默认值是无效的:

3. hdfs-site.xml(hdfs配置)

<!-- hdfs存储数据的副本数量(避免一台宕机),可以不设置,默认值是3-->
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>

<!--hdfs 监听namenode的web的地址,默认就是9870端口,如果不改端口也可以不设置 -->
<property>
    <name>dfs.namenode.http-address</name>
    <value>siqi01:9870</value>
</property>
        
<!-- hdfs保存datanode当前数据的路径,默认值需要配环境变量,建议使用自己创建的路径,方便管理-->
<property>
    <name>dfs.datanode.data.dir</name>
    <value>/home/hadoop/hdfs/data</value>
</property>

<!-- hdfs保存namenode当前数据的路径,默认值需要配环境变量,建议使用自己创建的路径,方便管理-->
<property>
    <name>dfs.namenode.name.dir</name>
    <value>/home/hadoop/hdfs/name</value>
</property>

这几个参数均建议配置好,虽然不配置也不影响启动,但方便后续排查问题与监控管理。

4. mapred-site.xml

<!-- 必须设置,mapreduce程序使用的资源调度平台,默认值是local,若不改就只能单机运行,不会到集群上了 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

<!-- 这是3.2以上版本需要增加配置的,不配置运行mapreduce任务可能会有问题,记得使用自己的路径 -->
<property>
    <name>mapreduce.application.classpath</name>
    <value>
        /home/hadoop/apps/hadoop-3.2.1/etc/hadoop,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/common/*,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/common/lib/*,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/hdfs/*,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/hdfs/lib/*,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/mapreduce/*,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/mapreduce/lib/*,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/yarn/*,
        /home/hadoop/apps/hadoop-3.2.1/share/hadoop/yarn/lib/*
    </value>
</property>

5. yarn-site.xml

<!-- 必须配置 指定YARN的老大(ResourceManager)在哪一台主机 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>siqi01</value>
</property>

<!-- 必须配置 提供mapreduce程序获取数据的方式 默认为空 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

6.workers

该文件是hdfs启动的datanode节点,默认只有localhost,配置所有datanode节点后,省去手动启动其他datanode。

配置完成后,将整个配置好的hadoop完整复制到其他节点即可。

scp -r ~/appssiqi02:/home/hadoop/

scp -r ~/apps siqi03:/home/hadoop/

2.3 启动

2.3.1. 当然首先最好将hadoop配置到系统环境变量中,方便后续快速启动 。修改/etc/profile 。

export JAVA_HOME=/opt/app/jdk1.8.0_11
export HADOOP_HOME=/home/hadoop/apps/hadoop-3.2.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

修改后记得 source /etc/profile。

2.3.2. 因为hdfs是借助于操作系统抽象文件系统,主节点在启动之前需要先格式化namenode,生成初始目录。

hadoop namenode -format 有如下提示即成功。

注意:一半只要不修改配置文件中的name data目录,格式化一次即可。

2.3.3.一步启动主节点:hadoop的sbin目录下 执行 start-all.sh

(后续学习中官方不推荐这个命令,可以用start-dfs.sh + start-yarn.sh)

这一步命令执行完后,执行jps命令能看到如下进程,访问相关页面即说明执行成功,少了任意一个,说明都有报错,没能成功启动,问题排查往后翻。

a.进入8088端口,能看到集群管理页面(没启动yarn则没有)

b. 进入9870端口,能监控到hdfs的namenode的状态 ;

c. 特别说明下,进入secondary namenode端口 9868 页面会报错:

排查后发现是二进制版hadoop包的问题,如果是自己编译版的启动不会出现。这个页面暂时用不上,忽略即可。

d. 进入9870页面的datanodes栏能监控到datanode的状态

2.3.4. 问题排查

其实排查问题最好的方式是查看日志。有的错误在启动时会提示,有的则没有。

日志目录在hadoop的logs下

jps下看哪个进程未能启动,查看该进程最新的.log文件即可,下面会列举几种本人有遇到的错误及解决办法。

3. 踩坑记录

1. 权限问题:全程操作使用的是hadoop用户,如果搭建过程中误使用过root用户或其他用户创建了非hadoop所属的目录,或者hadoop的未配置免密,在启动时都会因为权限问题报错。

java.io.FileNotFoundException: /home/hadoop/hdfs/name/in_use.lock (权限不够);

解决: 类似某文件无法写入,无法读取的问题,根据情况选择如下三条命令即可:

sudo chmod -R 775 filename; // 修改读写权限
sudo chgrp -R hadoop filename; // 修改所属组
sudo chown -R hadoop filename;// 修改所有者

Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

解决:当前用户没有配置ssh免密,两条命令解决:

ssh-keygen -t rsa // 生成公钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys //授权公钥

2. 端口占用诸如:Problem binding to [0.0.0.0:9866] java.net.BindException: 地址已在使用;

解决:一般的虚拟机不会占用到hadoop这些端口,可能是之前启动的hadoop进程未能正常退出,所以找到端口号下的进程,杀掉即可。

sudo netstat -lnp | grep 9866 //查看进程号? ? 
sudo kill -9 ****(进程号) //杀掉进程

3.Incompatible clusterIDs in /home/hadoop/hdfs/data: namenode clusterID = CID-871dad8c-cd01-484d-9913-87d72fff9193; datanode clusterID = CID-d7db344c-6d37-402a-843a-09d8209aaf91

解决:name的clusterID和data的ClusterId不一致:这个可能是由于namenode多次格式化导致的。所以将/home/hadoop/hdfs/name/current/VERSION中的clusterID 覆盖到/home/hadoop/hdfs/data/current/VERSION的clusterID即可。

4. 结语

以上便是自己在hadoop3.2.1集群搭建部署过程中的归纳与总结,如有错误与其他见解,请不吝纠正,感激不尽。

如果读者有遇到其他无法启动的问题,欢迎评论沟通,一起学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值