【大数据】二、HDFS 入门演示

大数据

要了解大数据,我们就要先了解什么是数据?

数据就是指人们的行为,人们的某个行为都被称为是一项数据,这些数据可以用来对生活中各种各样的事物进行分析,而我们进行分析所需要的技术就是我们所学的大数据的一系列的技术栈

所谓大数据,就是指将现在的数据进行处理,并得出一定结果的技术

其中,大数据的核心工作就是从海量的高增长、多类别、低信息密度的数据中发掘出高质量的结果

由此延伸而出的大数据核心工作就是:数据存储、数据计算、数据传输

大数据框架

数据存储:

Hadoop中的HDFS

Hbase是最为广泛的NoSQL技术、

Apache KUDU 也是类似于Hadoop的分布式存储技术

数据计算:

Apache中的MapReduce,以及基于MapReduce的Hive

也包括Apache Spark (内存计算)以及 Apache Flink(实时计算)

数据传输:

Apache Kafka(分布式消息系统)、Apache Pulsar(分布式消息系统)、Apache Flume(流式数据采集工具、从很多数据源中获取数据)、Apache Sqoop

Hadoop

在广泛意义上、Hadoop是指一个技术框架,其内部的三个核心技术分别是:HDFS(分布式存储)、MapReduce(分布式计算)、YARN(分布式资源调度)

HDFS

HDFS是一个分布式存储框架。

为什么我们需要分布式存储框架呢 ---- 因为我们的大数据项目数据量太大,单机的存储是有极限的,另一方面,分布式存储中,存储效率、网络传输,磁盘读写方面也能有很高的性能提升,故我们有一个分布式存储系统是十分必要的

Hadoop框架下的分布式框架是典型的中心化模式的存储框架,另外还有去中心化的分布式框架(区块链)

HDFS的基础架构:

NameNode(主角色)(负责管理整个HDFS存储系统、以及Datanode)

Datanode(从角色)(多个)(主要负责数据的存储)

SecondaryNameNode(主角色的辅助)(处理元数据)

在我们的分布式机器上部署HDFS的过程:

在hadoop官网上下载hadoop3.3.4版本的hadoop

Hadoop部署

部署规划

我们在 node1 (4G内存,中心节点)机器上部署 Namenode、Datanode、Secondarynamenode

在 node2 (2G内存,从节点)和 node3 (2G内存,从节点)机器上部署 Datanode 信息

部署流程

将下载的hadoop.tar.gz上传到 用户目录下,再解压到 /export/server 目录中

tar -zxvf hadoop-3.3.4.tar.gz -C /export/server

之后我们进到/export/server应该可以看到一个名为hadoop的文件夹

之后为了寻找方便,给这个文件夹创建一个软连接

 ln -s hadoop-3.3.6 hadoop

之后我们进入到hadoop-3.3.4文件夹内:

bin  存放hadoop的各种命令(重要)
etc  存放hadoop的配置文件(重要)
include  存放C语言的一些头文件
lib  存放linux系统的动态链接库
libexec  存放hadoop系统的脚本文件
licenses-binary  存放许可证文件
sbin  管理员程序(重要)
share  存放二进制源码(jar包)

文件配置

配置 workers 文件,这个文件在 hadoop-3.3.4/etc/hadoop 文件夹下,这个文件标注了我们的Datanode机器节点都有哪些,这里我们添加为:

node1
node2
node3

注意我们打开workers文件时,其可能会有一定的内容:我们删除 workers 文件中自带的 localhost 内容,再进行上面的添加操作

配置 hadoop-env.sh 文件,该文件标识了我们的 JAVA 环境的地址、hadoop 环境的地址、hadoop 配置文件的地址、hadoop 日志文件的地址:

export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

配置core-site.xml文件,在该文件中配置了HDFS文件系统的网络通讯路径以及io操作文件的缓冲区大小:

其中fs.defaultFS指定了namenode,也就意味着我们后面在使用的时候都必须启动Namenode

<configuration><property><name>fs.defaultFS</name><value>hdfs://node1:8020</value></property><property><name>io.file.buffer.size</name><value>131072</value></property>

配置 hdfs-site.xml 该文件中标注了:

dfs.datenode.data.dir.perm:新建文件的权限,我们配置为 700 代表着文件具有 rwx------- 的权限:

dfs.namenode.name.dir:NameNode 元数据的存储位置

dfs.namenode.hosts:该NameNode 所允许的datanode 是哪些

dfs.blocksize:hdfs的默认块大小

dfs.namenode.handler.count:100 能够处理的并发线程数(由于我们在本地虚拟机上运行,其CPU性能太低,这个值设置高了也没有意义)

dfs.datanode.data.dir:/data/dn 机器作为datanode,其数据存储的位置

 </property><property><name>dfs.namenode.name.dir</name><value>/data/nn</value></property><property><name>dfs.namenode.hosts</name><value>node1,node2,node3</value></property><property><name>dfs.blocksize</name><value>268435456</value></property><property><name>dfs.namenode.handler.count</name><value>100</value></property><property><name>dfs.datanode.data.dir</name><value>/data/dn</value></property>
</configuration>

注意这里,我们配置了Namenode数据的存储位置和node1作为 Datandoe 的存储位置,故我们必须创建对应的文件夹,下面是绝对路径:

mkdir -p /data/nn
mkdir -p /data/dn

我们在node2 和 node3中要配置的是 dn 目录的路径:

mkdir -p /data/dn

之后,我们将 hadoop-3.3.4 目录复制到 node2 和 node3 同样的目录下:

scp -r hadoop-3.3.6 node2:`pwd`/
scp -r hadoop-3.3.6 node3:`pwd`/

这之后,Hadoop就在我们的三台机器上全部安装并配置完成了,最后我们还需要再配置一下环境变量

我们在/etc/profile文件中最下面配置(三台机器都得配):

export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

之后:

source /etc/profile

使环境变量文件配置生效

最后,我们为了让hadoop用户也可以使用hadoop环境,我们要修改hadoop目录以及dn和nn文件的权限:

将 /data 目录、/export 目录全部都配置给 hadoop 用户

三台机器都需要修改

chown -R hadoop:hadoop /data
chown -R hadoop:hadoop /export

其中 -R 的意思是 将目录与其子目录都进行修改

此时,我们的前期安装配置工作就全部完成了

进一步的前期准备

格式化存储空间

hadoop namenode -format

格式化之后,若 /data/nn 目录中存有文件的话,则证明我们格式化成功了

我们可以通过一键启动来尝试判断我们的启动是否成功:

start-dfs.sh

之后使用 jps 命令来查看运行中的 Java 环境,我们看到 namenode、datanode、secondarynamenode 时,启动就成功了,我们的子节点存在 datanode 一个进程

之后我们在浏览器里使用:

node1:9870

地址来访问 hadoop 的 Web UI 界面

我们通过下面的命令一键停止hadoop服务

stop-df.sh

一些另外的操作

我们可以进入logs文件夹下,使用tail -100 日志名 命令查看最后100行的日志情况

HDFS集群环境部署

HDFS 启停命令:

sbin/start-dfs.sh 文件一键启动HDFS集群
执行原理:
在哪个机器上执行这个脚本,HDFS就会将哪个机器当做 SecrondaryNamenode
之后HDFS会在机器上读取core-site.xml文件的内容(确定fs.defaultFS项),确认NameNode所在的机器并启动Namenode
之后HDFS会读取workers内容,确认DataNode所在的机器,并启动所有的DataNode同样的,我们的关闭命令:
sbin/stop-dfs.sh 也会以同样的顺序读取相同的文件并对应的关闭对应的SecondaryNamenode、Namenode、Datanode

除了一键部署,这里还有单独部署的操作:

我们使用下面的命令可以只单独设置某一台机器的启停:

sbin/hadoop-deamon.sh	控制当前所在机器的启停
hadoop-deamon.sh (start|status|stop) (namenode|secondarynamenode|datanode)bin/hdfs  此程序也用于单独控制当前机器的启停
hdfs --deamon (start|status|stop) (namenode|secondarynamenode|datanode)

Linux 中,文件系统的协议头是:file:// 我们以根路径选择文件的写法:file:/// , 最后一个 / 代表根路径

HDFS的协议:hdfs://namenode:port/ 以这个开始

假设我们有一个文件:hello.txt 在下面这个路径
Linux: file:///usr/local/hello.txt
HDFS: hdfs://node1:8020/usr/local/hello.txt

但一般情况下,我们是不需要写这两个文件头的,因为HDFS会自动帮我们写上这个

HDFS 文件操作命令:

HDFS 文件操作命令分为:

  • hadoop fs
  • hadoop dfs

这样两套命令体系,前者为老版本的命令体系,两者对于文件操作系统的用法完全一致,只有在某些特殊方法时会有所不同

创建文件夹:

hdfs dfs -mkdir -p /home/hadoop/qinghe

查看目录内容:

hdfs dfs -ls /...
hdfs dfs -ls -R /...		查看指定目录的内容及其子目录的所有内容
hdfs dfs -ls -h /...		查看文件内容并查看大小

将文件从Linux中上传到hdfs中:

hdfs dfs -put /... /...		前一个路径是文件在Linux中存放的位置,后一个路径是上传到HDFS中的位置
hdfs dfs -put -f /... /...	若目标文件夹已有同名文件则对其进行覆盖
hdfs dfs -put -p /... /...	保留访问和修改的时间与权限信息

查看上传的文件:

hdfs dfs -cat /... 			查看文件内容
hdfs dfs -cat /... | more	以翻页的形式查看文件内容

下载HDFS中的文件到Linux:

hdfs dfs /... /...			将hdfs中的文件下载到Linux中的指定为止
hdfs dfs -f /... /...		下载hdfs中的文件,如果发生冲突则直接覆盖
hdfs dfs -p /... /...		保留访问和修改的时间与权限信息

复制操作:

hdfs dfs -cp /... /...			这两个路径都是hdfs中的路径,其会将第一个路径位置的文件复制到第二个文件,若指明了文件的名字,则其也具有重命名的效果

在HDFS中,我们对文件的修改操作只支持追加和删除!!!!不支持一点点修改!!!!!

追加操作,将Linux中的文件信息追加到Hdfs的文件中:

hdfs dfs -appendToFile /... /...		前一个文件必须存储在Linux中,第二个文件是HDFS中的文件,该指令会将Linux中的文件的内容添加到HDFS中

文件的移动:

hdfs dfs -mv /... /...		将前一个文件移动到后一个文件目录中,同样的,若指明了文件的名字,则其也具有重命名的效果

文件的删除:

hdfs dfs -rm -r /...		删除指定目录及其子目录中的所有内容
hdfs dfs -rm /...			删除指定文件,该命令不能删除文件夹

再删除中需要注意:HDFS是具有回收站功能的,但是HDFS中默认是不开启回收站机制的,我们可以通过如下配置来配置HDFS的回收站功能:

编辑如下路径的配置文件:/export/server/hadoop/etc/hadoop/core-site.xml

  <property><name>fs.trash.interval</name><value>1440</value></property><property><name>fs.trash.checkpoint.interval</name><value>120</value></property>

这两个配置配置完成之后我们就开启了回收站机制

第一个配置1440指的是回收站会存储的数据存储一天,超过一天会自动清除

第二个配置指的是我们每2小时对回收站进行检查,清除超过存储时间的数据

该配置即时生效,无需重启,但配置只在对应的node节点机器上生效

如果我们配置了回收站,我们在删除文件时,就会将其移动到回收站中,回收站的位置是HDFS系统中的:

/user/hadoop/.Trash/Current

若我们在回收站开启的时候不希望将文件放到回收站中,而希望将文件直接删除,则我们需要添加 -skipTrash 参数:

hdfs dfs -rm -r -skipTrash /...

另外的操作

使用下面命令单点启动 hdfs

hdfs --daemon start datanode

关闭:

hdfs --daemon stop datanode

一键开启所有结点:

注意该命令不可以在 root 下运行

start-dfs.sh
stop-dfs.sh

新建:/opt/bin/jps-cluster.sh 创建一个可以快速查看多个节点信息的脚本:

#!/bin/bashHOSTS=( node1 node2 node3 )for HOST in ${HOSTS[*]}
doecho "---------- $HOST ----------"ssh -T $HOST << DELIMITERjps | grep -iv jpsexit
DELIMITER
done

之后将这个脚本软连接到 /usr/bin 目录下,由于这个目录是被配置在环境变量中的,故我们将存储的软连接存放在这个目录时,就可以让这个让这个脚本直接被调用:

注意这里必须写绝对路径

ln -s /opt/bin/jps-cluster.sh /usr/bin

之后调用脚本就可以看见各机器上的 jps 情况了:

---------- node1 ----------
30980 NameNode
31676 SecondaryNameNode
31197 DataNode
---------- node2 ----------
22151 DataNode
---------- node3 ----------
21291 DataNode

Hadoop 在运行时会输出日志,这个日志被生成在 hadoop 根目录下

输出的日志是 .out 文件,但 .out 文件最后会被集成在 .log 文件下,所以我们只需要查看 .log 文件就可以了

经典案例 wordcount

词频统计经典案例:

统计文件中单词的出现次数

创建文件夹 /test_file/input 并进行输入:

echo "hello world hadoop linux hadoop" >> file1
echo "hadoop linux hadoop linux hello" >> file1
echo "hadoop linux mysql linux hadoop" >> file1
echo "hadoop linux hadoop linux hello" >> file1
echo "linux hadoop good programmer" >> file2
echo "good programmer qianfeng good" >> file2

将文件上传到 hdfs 根目录

 hdfs dfs -put /test_file/input/ /hdfs dfs ls -R /

之后我们调用下面的语句:

hadoop jar /export/server/hadoop-3.3.6/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output

之后我们调用下面的命令就可以查看具体的内容了

hdfs dfs -cat /output/*

注意在生成的这条命令中,/output 文件夹必须是没有被创建的

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

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

相关文章

phpcms头像上传漏洞引发的故事

目录 关键代码 第一次防御 第一次绕过 第二次防御 第二次绕过 第三次防御 第三次绕过 如何构造一个出错的压缩包 第四次防御 第四次绕过 本篇文章是参考某位大佬与开发人员对于文件包含漏洞的较量记录下的故事&#xff0c;因为要学习文件包含漏洞&#xff0c;就将大佬…

什么是 HTTPS?它是如何解决安全性问题的?

什么是 HTTPS&#xff1f; HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是一种安全的通信协议&#xff0c;用于在计算机网络上安全地传输超文本&#xff08;如网页、图像、视频等&#xff09;和其他数据。它是 HTTP 协议的安全版本&#xff0c;通过使用加…

Java开发从入门到精通(九):Java的面向对象OOP:成员变量、成员方法、类变量、类方法、代码块、单例设计模式

Java大数据开发和安全开发 &#xff08;一)Java的变量和方法1.1 成员变量1.2 成员方法1.3 static关键字1.3.1 static修饰成员变量1.3.1 static修饰成员变量的应用场景1.3.1 static修饰成员方法1.3.1 static修饰成员方法的应用场景1.3.1 static的注意事项1.3.1 static的应用知识…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-中

文章目录 一、DSL查询文档1.1 简单查询1.2 复合查询 二、搜索结果处理三、RestClient演示 查询与结果分析四、案例4.1 问题解析4.2 代码4.2.1 实体bean4.2.2 控制层4.2.3 业务service4.2.4 启动类 一、DSL查询文档 1.1 简单查询 # 1. DSL查询 # 1.1 查询所有GET /hotel/_searc…

JavaScript 进阶(一)

一、作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问。 作用域分为&#xff1a; 局部作用域 、全局作用域。 1.1局部作用域 局部作用域分为函数作用域和块作用域。 1. 函数作用域&#xff1a; 在函数…

LINUX磁盘挂载(centos磁盘挂载)

1、查看磁盘情况: [root@xus ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.9G 0 7.9G 0% /dev/shm tmpfs 7.9G 17M 7.8G 1% /run tmpfs 7.9G 0 7.9G 0…

分布式系统常见负载均衡实现模式

分布式系统常见负载均衡实现模式 1. 4层负载均衡1.1. 负载均衡的常见需求1.2. 负载均衡的实现模式1.2.1 DR模式1.2.2 TUN模式1.2.3 NAT模式1.2.4 FULLNAT模式1.2.5 4种模式的差异 1.3. 负载均衡的均衡算法1.3.1 静态负载均衡1.3.2 轮询法1.3.3 加权循环法1.3.4 IP 哈希法1.3.5 …

Vue前端开发记录(一)

本篇文章中的图片均为深色背景&#xff0c;请于深色模式下观看 说明&#xff1a;本篇文章的内容为vue前端的开发记录&#xff0c;作者在这方面的底蕴有限&#xff0c;所以仅作为参考 文章目录 一、安装配置nodejs,vue二、vue项目目录结构三、前期注意事项0、组件1、数不清的报…

【Nuxt3】项目pages目录的用法介绍

简言 记录下nux3pages目录文件的使用方法。 pages pages目录是存放项目页面文件的地方&#xff0c;Nuxt 3提供基于文件的路由功能&#xff0c;可在网络应用程序中创建路由。 pages/ 目录中的每个页面文件都代表不同的路由&#xff0c;显示其内容。 建议将其他的业务组件vue文…

首个ChatGPT机器人- Figure 01;李开复旗下零一万物推出Yi系列AI大模型API

&#x1f989; AI新闻 &#x1f680; 首个ChatGPT机器人- Figure 01 摘要&#xff1a;Figure 01是一个由初创公司Figure联合OpenAI开发的人形机器人。它展示了与人类和环境互动的能力&#xff0c;可以说话、看东西&#xff0c;并且可以执行各种任务&#xff0c;如递食物、捡垃…

QT中dumpcpp以及dumpdoc使用

qt中调用COM的方式方法有四种&#xff0c;参考解释在 Qt 中使用 ActiveX 控件和 COM (runebook.dev) 介绍dumpcpp的使用方法Qt - dumpcpp 工具 (ActiveQt) (runebook.dev)&#xff1a; 在安装好了的qt电脑上&#xff0c;通过powershell窗口来实现&#xff0c;powershell比cmd要…

【微信小程序】原生组件的分层渲染 和 同层渲染

微信小程序的原生组件指的是&#xff0c;微信小程序语法中自带的 video 等标签。【这里的原生指的是微信小程序而不是 js】 微信小程序的页面是基于 webview 的&#xff0c;其他的原生组件是独立于 webview 的。 分层渲染就是&#xff0c;小程序原生组件是独立于 webview 的。…

登录态数据抓取:Python爬虫携带Cookie与Session的应用技巧

概述 在进行网络数据抓取时&#xff0c;有些数据需要用户处于登录状态才能获取。这时就需要使用Cookie和Session来维持登录态。Cookie是服务器发给浏览器的小数据片段&#xff0c;存储在用户计算机中&#xff0c;用于在用户请求时辨识用户身份。Session则是存储在服务器端的用…

算法的基本概念和复杂度

目录 一. 算法的基本概念1.1 什么是算法1.2 算法的五个特性1.3 怎么才算好的算法 二. 算法的时间复杂度三. 算法的空间复杂度 \quad 一. 算法的基本概念 \quad \quad 1.1 什么是算法 算法可以用自然语言来描述, 也可以用伪代码和代码来描述 \quad 1.2 算法的五个特性 有穷性, 一…

【C#动态加载数据】“防界面卡死”

废话不多说&#xff0c;直接开始 添加引用 using System.ComponentModel 完整代码 using System; using System.ComponentModel; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; // 引入SqlClient命名空间以使用ADO.NET public part…

Flink 流处理框架核心性能

Apache Flink 是一款先进的开源分布式数据处理框架&#xff0c;其核心特性体现了对大规模数据处理的高度适应性和灵活性&#xff0c;尤其在实时流处理领域展现出了卓越的技术优势&#xff1a; 1 高性能实时处理 Flink 引擎设计注重高吞吐量与低延迟的完美结合&#xff0c;可轻…

ASP.NET-Server.HtmlEncode

目录 背景: 1.转义特殊字符&#xff1a; 2.防止跨站脚本攻击&#xff08;XSS&#xff09;&#xff1a; 3.确保输出安全性&#xff1a; 4.保留原始文本形式&#xff1a; 5.与用户输入交互安全&#xff1a; 实例说明: 不用Server.HtmlEncode 效果展示: 用Server.HtmlEnc…

SpringMVC重点记录

目录 1.学习重点2.回顾MVC3.回顾servlet4.初始SpringMVC4.1.为什么要学SpringMVC?4.2.SpringMVC的中重点DispatcherServlet4.3.SpringMVC项目的搭建4.4.MVC框架要做哪些事情?4.5.可能会遇到的问题 5.SpringMVC的执行原理6.使用注解开发SpringMVC7.Controller控制总结8.RestF…

VSCode ARM CortexM 开发

VSCode ARM CortexM 开发: http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_开发/ 文章目录 VSCode ARM CortexM 开发: <http://coffeelatte.vip.cpolar.top/post/software/applications/vscode/vscode_arm_cortexm_%E5%BC%80%E5%…

低代码与数智制造:引领软件开发的革新之旅

在当今快速发展的数字化时代&#xff0c;软件开发已经渗透到各行各业&#xff0c;成为推动社会进步的重要力量。随着技术的不断进步&#xff0c;低代码开发与数智制造正逐渐崭露头角&#xff0c;成为引领软件开发领域革新的两大关键要素。本文将深入探讨低代码与数智制造的内涵…