集群简单维护

查看日志

上篇我们搭建了集群,并且完成了hdfs的搭建,但在我的linux02和linux03上,发现一个问题,我启动了datanode之后,开始进程还在,一会就自己消失了,这是为什么呢?(如下图)

查看页面显示,也只有一个datanode节点(linux01)上的。

为了查看哪里出现了问题,我们可以查看一下机器上datanode的启动日志,日志的位置在hadoop下的logs里面,里面存放着日志相关的内容,我们以linux02上的为例:

查看一下datanode的日志    tail -100  xxxxxxx-datanode-linux02.log

快速浏览一下,留心异常关键词  err、error、exception、not  defined、not  exists  、not  之类的

可以看到,如上图:确实出现了问题,通过问题处,我又发现了关键词:clusterID、UUID等,很明显是我们的注册环节出现了问题

这里简单的阐述一下 datanode和namenode的通信机制吧,这样更好理解,而且其中也涉及到了clusterID和UUID

如上图:

1)当有进的节点需要加入到集群当中时(比如HDFS的存储空间不够,需要加入新的机器,新的dn),首先会向nn注册,主动向nn汇报自己机器上的资源情况

2)nn接收汇报,看一下你够不够格,你要是还剩下100M的容量,我要你何用?还浪费我nn的管理资源;如果可以,将返回给dn 我们集群的ID :clusterID 和存储数据块池ID  block-id(如下图)

在/opt/hdpdata/name/current/VERSION  存储着namenode的核心数据  可以看到 集群id和数据块池id  (linux01)机器

接着我们再看看data下的数据   /opt/hdpdata/data/current/VERSION

可以看到集群id和数据块池id  ,还有一个uuid  是其唯一标识

接着去查看linux02 机器上datanode相关标识

可以看到uuid确实不一样,但是BPid和集群id怎么也不一样呢,很明显都不是一个集群的了

所以删掉data文件,在linux02上重新开启生成注册

这下子发现果真好了,去页面上查看一下:

同理,linux03上采用同样的方法:

最终查看页面:

成功解决问题!真嗨森~

接着讲通信机制

3)新注册的dn收到了nn老大派来的集群id clusterID(你以后就跟我们一起混了!)还有数据块池id BP-ID (你以后存数据  就放这个里面了,听到了吗!),然后dn屁颠屁颠很开心,并且生成自己的一个唯一标识uuid

4)dn定期会进行心跳机制,以此来证明自己还活着。。还能正常通信和工作  通常是3s发送一次心跳

5)如若有一天,某个dn不再发送心跳了;nn这个时候并不会立马把这个逆子或者叛徒给剔除掉,会在5min中之后进行尝试连接  ping 通信;如若还是没有成功,会再过5min种尝试ping,多次ping还是没有成功,这个时候,可以认定这个dn已经gg了,就把他剔除了

6)dn还会定期向nn汇报自己的工作情况

7)如若dn上某个数据块备份丢失,会在nn上任务队列中产生任务,在dn向nn发送心跳的时候,如果有任务,就会领取,比如副本复制的任务

设置一键启停任务及HDFS命令

配置环境变量

vi  /etc/profile

export  JAVA_HOME=/opt/apps/jdk1.8.0_141
export  HADOOP_HOME=/opt/apps/hadoop-3.1.1
export  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source  /etc/profile

可以查看hdfs下所有的文件

hdfs dfs /

在hdfs根目录下创建一个tom的文件夹

hdfs dfs -mkdir tom /

在页面上查看

其他一些命令:

一键启停

在  etc/hadoop/workers 配置 需要启动DataNode的机器名

在启停脚本中声明用户   sbin/start-dfs.sh sbin/stop-dfs.sh

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

一键启动  在sbin 下  ./start-dfs.sh

一键关闭    在sbin 下  ./stop-dfs.sh

JAVA客户端操作HDFS

java客户端操作集群HDFS 分四步走战略

1)创建配置文件的对象

2)获取HDFS文件系统的对象

3)操作文件系统

4)关闭流资源

上传文件代码:

package cn.doit19.hadoop.hdfs;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import java.net.URI;public class Demo01 {    public static void main(String[] args) throws Exception {        //获取配置文件的对象  不设置则为默认值        Configuration conf = new Configuration();        //获取HDFS文件系统的对象        FileSystem fs = FileSystem.newInstance(new URI("hdfs://linux01:8020"), conf, "root");        //操作文件系统        fs.copyFromLocalFile(new Path("E://count.txt"), new Path("/"));        //关闭流资源        fs.close();    }}

查看网页上文件

读取文件代码:

测试类:

package cn.doit19.hadoop.hdfs;import cn.doit19.hadoop.util.Util;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class TestHDFS {    public static void main(String[] args) throws Exception {        FileSystem fs = Util.getFs();        readFile(fs);    }    private static void readFile(FileSystem fs) throws IOException {        FSDataInputStream open = fs.open(new Path("/count.txt"));        BufferedReader br = new BufferedReader(new InputStreamReader(open));        String line = null;        while ((line = br.readLine()) != null) {            System.out.println(line);        }    }}

工具类:

package cn.doit19.hadoop.util;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import java.net.URI;public class Util {    public static FileSystem getFs() throws Exception {        Configuration conf = new Configuration();        return FileSystem.newInstance(                new URI("hdfs://linux01:8020"),                conf,                "root"        );    }}

测试结果:

代码解析:

1)创建配置文件的对象

这个是配置对象,配置一些文件的属性,比如上传文件时备份的数量,还有切块的大小等。【默认备份数量为3,切块大小为128M】下篇内容会讲

有三种配置方式   1.默认配置 (就是什么都不写,什么都不做)  2.读取配置文件   3.代码中直接设置   从左到右 优先级依次增高

配置文件写在resources中,xml格式  严格的配置文件

代码中设置如下:

2)获取HDFS文件系统对象

FileSystem fs = FileSystem.newInstance(new URI("hdfs://linux01:8020"), conf, "root");

3)操作方法

copyFromLocalFile  从 本地 复制文件到 HDFS 即上传文件
copyToLocalFile  复制文件到本地  即从HDFS上下载文件
open(Path path)  打开一个流  用以读取 HDFS 上的指定路径的文件

等等等等。。。

更多学习、面试资料尽在微信公众号:Hadoop大数据开发

hadoop fs命令无法使用_Hadoop从入门到入土(三)HDFS集群简单维护及JAVA客户端连接HDFS...相关推荐

  1. hadoop fs命令无法使用_「大数据」「Hadoop」HDFS的配置与管理

    HDFS(Hadoop Distributed File System)是Hadoop三个基础组件之一,为另外的组件以及大数据生态中的其他组件提供了最基本的存储功能,具有高容错.高可靠.可扩展.高吞吐 ...

  2. Hadoop之hadoop fs命令

    一.hadoop fs命令简介   调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式. 所有的的FS shell命令使用URI路径作为参数.URI格 ...

  3. Hadoop基础-HDFS集群中大数据开发常用的命令总结

    Hadoop基础-HDFS集群中大数据开发常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本盘博客仅仅列出了我们在实际生成环境中常用的hdfs命令,如果想要了解更多, ...

  4. hadoop java访问_Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群

    上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat xxx ...

  5. Hadoop的HA机制原理解析,与HA高可用集群环境搭建

    2019独角兽企业重金招聘Python工程师标准>>> Hadoop的HA工作机制示意图 下面我们开始搭建这一套高可用集群环境 hadoop2.0已经发布了稳定版本了,增加了很多特性 ...

  6. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    阅读目录(Content) 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 1.2.数据块(data block)简介 1.3.对分布式文件系统中的块进行抽象会带来很多好处 二.Jav ...

  7. Hadoop 3.x搭建基础HDFS集群

    与Hadoop 2.x相比,它有一些新的特性如下: 基于JDK 1.8 HDFS可擦除编码 MR Native Task优化 基于Cgroup的内存隔离和IO Disk隔离 更改分配容器资源Conta ...

  8. Hadoop集群启动后利用Web界面管理HDFS

    Hadoop集群启动后,可以通过自带的浏览器Web界面查看HDFS集群的状态信息,访问IP为NameNode所在服务器的IP地址,hadoop版本为3.0以前访问端口默认为9870,hadoop版本为 ...

  9. 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】

    视频地址:[尚硅谷]大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01[Zookeeper(入门.本地安装.集群操作)] ...

最新文章

  1. React源码分析与实现(一):组件的初始化与渲染
  2. 听说你有病,我这儿可有对症的药
  3. Visual Paradigm 教程[UML]:如何在序列图中应用消息编号?
  4. r语言多重共线性_R语言与计量经济学(二)多重共线性
  5. 中国人工智能学会通讯——意识科学研究进展 1.5 多种脑机交互方式的实现
  6. 32 六角oled驱动_Alienware下半年开售55英寸OLED显示器,4K120Hz、95%DCI-P3
  7. C语言函数题-取子串 (10分)
  8. Unity-Find-Script-References 查找脚本的引用
  9. HttpClient api-连接池
  10. C++轻量级微服务_微服务技术栈:API网关中心,落地实现方案
  11. centos 打包RPM包 ntopng
  12. 安卓模拟器安装教程_[教程]安卓手机如何安装百度输入法五笔字根皮肤[教程]...
  13. React Native--移动端开发的救星
  14. 【面试分享】奇安信渗透测试工程师,通过!
  15. gin:通过dockerfile部署
  16. 批量导出qq群的成员列表
  17. Java学习笔记 第一天
  18. Pixelmator Pro为您抓住照片的质感,适合每个人的专业编辑图像工具
  19. Python利用pptx模块三步将图片插入特定PPT模板
  20. Vue ElementUI el-tree 修改节点收缩 icon

热门文章

  1. c语言中 d 1是啥意思,空开D/C是什么意思?终于有人把它说清楚了!
  2. python程序运行原理_谈谈 Python 程序的运行原理
  3. oracle中where中使用函数,Oracle 尽量避免在 SQL语句的WHERE子句中使用函数
  4. vs怎么更改编译的堆空间_再见吧 buildSrc, 拥抱 Composing builds 提升 Android 编译速度...
  5. linux重定向文件被修改后,Linux服务器修改.htaccess文件实现301重定向
  6. matlab中now函数_now()方法以及JavaScript中的示例
  7. java数据类型_JAVA基础篇(数据类型)
  8. eclipse配置python开发环境_eclipse怎样搭建Python开发环境
  9. 面试官 | 什么是递归算法?它有什么用?
  10. 经典面试题|ConcurrentHashMap 读操作为什么不需要加锁?