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

集群简单维护

查看日志

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

fc9cdaf3be4d2fa53010f37b07ea1374.png3495bd00df191f54b649f6b58e886893.png

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

35952f0bd85f41e2698feac31ddffbf7.png

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

5d760f466a40dbbab89d8ff03f4302ca.png

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

b44bc9430bcb06caf3afefa68539ebdc.png

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

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

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

952139569da67ab3b32325da01276bc6.png

如上图:

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

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

51f8287cd679b32d86ba2a534b841382.png

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

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

83ee7ae732d233a561217f1f4aaf1b6a.png

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

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

a61f0418946248b519f39c575bbd6ed8.png

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

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

98be80faff06bc60907c0a3307bfde8e.png

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

ab1741d093743e9685b2eda6e4f1d743.png

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

e198b79f657b9192ba3caf590706a351.png

最终查看页面:

3a9023ad569c19489d1f07518a3dfd5a.png

6ed6341649df397703511b1a88254b82.png

成功解决问题!真嗨森~

接着讲通信机制

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

d913a5d6b5726bd19c6919effa6c2832.png

854731db1a47602053bbb3810bc96279.png

可以查看hdfs下所有的文件

hdfs dfs /

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

hdfs dfs -mkdir tom /

ed061e7423e2e467ff9b6d0c8fd10467.png

在页面上查看

afbee3ed3cbd6e8ab21dbe38c709a308.png

其他一些命令:

47f87a455c726cf34b9cad81c7f5f719.png

一键启停

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

de661630415bc961fc59db26806107da.png

在启停脚本中声明用户   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

22c2d940cb192e8e3995cac1311923ef.png

47d5e908fc87942fb7d8c2d2dbe5bace.png

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

935b72ca80de0767d730bcb59cf62e21.png

7b62967f5c59911044118df6f3b0cee2.png

22d37d1b53dfce880b1cf65bcc593eb2.png

ac9858e8121298910f03e99448222ed4.png

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

bcd7cfda4a1b42217eb19158655d3ec0.png

a1db349419363b8878636f22004c2646.png

0b7452b76ac0ee0b5b564cacea78d5d1.png

bc5da4bae1ad40266669868ec33dfe2f.png

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();    }}

查看网页上文件

bd65a45c18e94b144663eb7ab562b906.png

读取文件代码:

测试类:

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"        );    }}

测试结果:

93f156e8a9f903d2bf9ef44c4e637bdb.png

代码解析:

1)创建配置文件的对象

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

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

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

e4e661e0a9ae4be26cf0b35a8537ad2e.png

代码中设置如下:

4ff04868bdf00306e999db5978b6d947.png

2)获取HDFS文件系统对象

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

3)操作方法  

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

等等等等。。。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ 函数返回空_Python all() 函数

all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。元素除了是 0、空、None、False 外都算 True。语法all(iterable) # iterable -- 元组或列表。示例>>> all([a, b, c, d]) # 列表li…

kali2020识别不到网卡_WIN10环境下台式机找不到RealTek HD管理器解决耳塞式耳机外放问题...

最近想在工作休息闲暇时开个音乐播放器或者小游戏放松一下,需要戴上耳塞式耳机,但是最近这个耳机在公司台式电脑突然识别不到了,如果是自己的笔记本电脑在控制面板 - 硬件和声音里是可以找到“RealTek高清晰音频管理器”选项的,然…

韵乐x5效果器ktv最佳参数_家庭ktv(卡拉ok)家庭影院ktv选购推荐攻略

因为陆陆续续的给小区的邻居有推荐安装家庭KTV设备,根据他们的使用反馈和选购前遇到的问题,我做了汇总并整理了这篇文章. (不写复杂的参数,不堆积商品推荐,只推荐几款不同价位,真正性能优质、价格美丽的家庭…

cat3 utp是不是网线_小科普 | 网线也有高低?聊聊网线的差别

好电脑、好主板、好网卡、好运营商、好套餐,是不是就意味着有了极好的网络体验呢?对,但也未必。因为还少算了最后一道关卡——网线。▌线材网线这个东西,看着还真都差不多,插上就能用这能有什么差别呢?首先…

redis续期_面试官:Redis分布式锁如何解决锁超时问题的?

一、前言关于redis分布式锁, 查了很多资料, 发现很多只是实现了最基础的功能, 但是, 并没有解决当锁已超时而业务逻辑还未执行完的问题, 这样会导致: A线程超时时间设为10s(为了解决死锁问题), 但代码执行时间可能需要30s, 然后redis服务端10s后将锁删除, 此时, B线程恰好申请锁…

markdown如何设置图片大小_不会吧,还不会用markdown排版吗

请使用 Chrome 浏览器。请阅读下方文本熟悉工具使用方法,本文可直接拷贝到微信中预览。1 Markdown Nice 简介支持自定义样式的 Markdown 编辑器支持微信公众号、知乎和稀土掘金欢迎扫码回复「排版」加入用户群2 主题https://preview.mdnice.com/themes/欢迎提交主题…

此次边路调整系统推荐射手走哪路_王者荣耀地图重大对称改动,终于能射手对射手,上单对上单了...

兄弟萌,一直困扰大家的地图问题终于要改了,王者峡谷将在今年的周年庆版本,迎来一次玩法体验的大升级!调整介绍我们将尝试改造边路的地形&资源,促进更合理的同职业分路对线。以往通过职业、英雄的调整确实很难实质改…

二阶振荡环节的谐振频率_困惑了很久的串联/并联谐振电路详解

在含有电阻、电感和电容的交流电路中,电路两端电压与其电流一般是不同相的,若调节电路参数或电源频率使电流与电源电压同相,电路呈电阻性,称这时电路的工作状态为谐振。谐振现象是正弦交流电路的一种特定现象,它在电子…

安装不成功_iOS12.4.1 安装失败?教你百分百不掉签

说重点:近日,苹果频繁封杀证书,导致企业证书很缺,补上又封,想越狱又不能安装,实在困扰了很久,今天就分享百分百安装成功的方法,安装后配合自动续签插件,简直完美。接下来…

指定的参数已超出有效值的范围_整流二极管的特性和重要参数

一、 二极管的半导体原理略二、 二极管的特性曲线研究电路也有两种方法,一个是从它的内部工作原理去分析,另一个是从它表现出的外部特征去分析,把电路看成一个黑匣子,不管它内部什么结构什么原理,只研究它表现出来的特…

count返回0_MySQL实战 | 14 为什么count(*)越来越慢?

select count(*) 应该是一个比较常用的语句,用来统计记录行数。但是,慢慢地你会发现,这个语句越来越慢了,为什么呢?count(*) 的实现方式首先,我们来看下它的实现方式。MySQL 中,不同的存储引擎&…

sql管理:索引超出范围必须为非负值并小于集合大小_java面试基础知识-数据库基础知识(数据库索引部分)...

1.1数据库架构:如何设计一个关系型数据库?存储模块(文件系统)用块或者页作为存储单位 程序实例:存储管理缓存机制 不宜过大,要有淘汰机制SQL解析日志管理权限划分容灾机制索引管理锁管理1.2 索引为什么要使用索引&…

编译原理语法分析_斯坦福大学《编译原理》学习记录 - 第二章:语法分析器

05-01: Introduction to Parsing 语法分析parser的作用:05-02: Context Free Grammars 上下文无关文法CFG(上下文无关文法)回答了一个字符串是否属于某语言:CFG的组成:终止符非终止符开始符生成式生成式production &am…

mysql永远不用utf8_永远不要在 MySQL 中使用「utf8」

题图:by apple from Instagram本文出自极客邦「聊聊架构」公众号的编译。我自己当年也被这个问题坑过,当时并没有如此详细的分析文章。我觉得有责任再次分享一下,让更多人知道这个事情。程序员不帮助程序员,还能指望谁呢&#xff…

sqoop mysql parquet_Sqoop抽取Hive Parquet表数据到MySQL异常分析

温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。Fayson的github:https://github.com/fayson/cdhproject1.问题描述在CDH集群中我们需要将Hive表的数据导入到RDBMS数据库中,使用Sqoop工具可以方便的将Hive表数据抽取…

mysql架设_主从mysql架设

主从mysql架设二进制安装mysqltar xvf mysql-5.1.46-linux-i686-glibc23.tar -C /usr/localcd /usr/localln -sv mysql-5.1.46-linux-i686-glibc23.tar mysqlcd mysqlgroupadd mysqluseradd -g mysql -s /sbin/nologin -M -r mysqlmkdir /mysql/datachown -R mysql.mysql /mysq…

日志文件和mysql同步到kafka_logstash_output_kafka:Mysql 同步 Kafka 深入详解

0、题记实际业务场景中,会遇到基础数据存在 Mysql 中,实时写入数据量比较大的情景。迁移至kafka是一种比较好的业务选型方案。而mysql写入kafka的选型方案有:方案一:logstash_output_kafka 插件。方案二:kafka_connect…

java 命令行参数 _java命令行参数

原标题:java命令行参数命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了。这个就是程序的入口点。如图7.4所示:图…

java 最小生成树_图的最小生成树(java实现)

1.图的最小生成树(贪心算法)我两个算法的输出都是数组表示的,当前的索引值和当前索引对应的数据就是通路,比如parent[2] 5;即2和5之间有一个通路,第二个可能比较好理解,第一个有点混乱是什么?将一个有权图中的 所有顶…

java 自定义注解 生成json_用自定义注解实现fastjson序列化的扩展

这篇文章起源于项目中一个特殊的需求。由于目前的开发方式是前后端分离的,基本上是通过接口提供各个服务。而前两天前端fe在开发中遇到了一些问题:他们在处理字符串类型的时间时会出现精度丢失的情况,所以希望后台是以时间戳的形式返回给前端…