hadoop安装配置,报错与解决,理论,待整理

Index of /dist/hadoop/common/hadoop-3.1.3 (apache.org)

1. 安装与配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# 环境准备
# IP与HOSTNAME映射
# 本机免密
ssh root@master01 : 若需要输入密码,则免密未达成
ssh-keygen -t rsa : 生成密钥
ssh-copy-id root@master01 : 拷贝密钥 authorized_keys
# 安装 jdk 1.8.*

# ip & hostname 映射
vim /etc/hosts
--------------------
192.168.83.130 single01
--------------------

# 解压
tar -zxf hadoop-3.1.3.tar.gz -C /opt/software/
# 环境变量
vim /etc/profile.d/myenv.sh
-------------------------------------------------------------------------
export HADOOP_HOME=/opt/software/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_ZKFC_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
-------------------------------------------------------------------------
source /etc/profile

# hadoop 内部配置
cd /opt/software/hadoop-3.1.3/etc/hadoop
vim hadoop-env.sh
--------------------------------------------------
export JAVA_HOME=/opt/software/jdk1.8.0_171
--------------------------------------------------

vim core-site.xml
--------------------------------------------------
<property>
<name>fs.defaultFS</name>
<value>hdfs://single01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop/single01</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>1048576</value>
</property>
--------------------------------------------------

vim hdfs-site.xml
--------------------------------------------------
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>128M</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/software/hadoop-3.1.3/data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/software/hadoop-3.1.3/data/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>single01:9869</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
--------------------------------------------------

hadoop classpath
--------------------------------------------------
/opt/software/hadoop-3.1.3/etc/hadoop:/opt/software/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/common/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn:/opt/software/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn/*
--------------------------------------------------

vim mapred-site.xml
--------------------------------------------------
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>/opt/software/hadoop-3.1.3/etc/hadoop:/opt/software/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/common/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn:/opt/software/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn/*</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>single01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>single01:19888</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>256</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>512</value>
</property>
--------------------------------------------------

vim yarn-site.xml
--------------------------------------------------
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>10000</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property>
<name>yarn.nodemanager.localizer.address</name>
<value>single01:8040</value>
</property>
<property>
<name>yarn.nodemanager.address</name>
<value>single01:8050</value>
</property>
<property>
<name>yarn.nodemanager.webapp.address</name>
<value>single01:8042</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/tmp/hadoop/yarn/local</value>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/tmp/hadoop/yarn/log</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.application.classpath</name>
<value>/opt/software/hadoop-3.1.3/etc/hadoop:/opt/software/hadoop-3.1.3/share/hadoop/common/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/common/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/hdfs/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/mapreduce/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn:/opt/software/hadoop-3.1.3/share/hadoop/yarn/lib/*:/opt/software/hadoop-3.1.3/share/hadoop/yarn/*</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
--------------------------------------------------

# 启动服务
# 首次启动
# 格式化 namenode
hdfs namenode -format #需要等待命令执行成功
# 启动服务
start-all.sh

# 确认集群启动后的状态
# 检查进程
jps
--------------------------
9476 DataNode
9989 ResourceManager
10136 NodeManager
9337 NameNode
9710 SecondaryNameNode
-------------------------

#如果进程正常启动,可以通过web页面查看
http://192.168.83.130:9870

Hadoop Distributed File System (HDFS) 是一个设计用于大规模数据存储和处理的分布式文件系统。以下是 HDFS 的存储原理的关键点:

1. 架构概述

HDFS 采用主从架构,由一个 NameNode 和多个 DataNode 组成:

  • NameNode:负责管理文件系统的元数据,例如文件名、目录结构、权限和每个文件的块位置。它是 HDFS 的中央控制节点。
  • DataNode:负责实际存储数据块。每个 DataNode 在本地文件系统上管理存储的块,并周期性地向 NameNode 报告其存储的块信息。

2. 数据存储

HDFS 将文件拆分成多个块(默认块大小为 128MB),每个块被存储在不同的 DataNode 上:

  • 块(Block):文件被分割成大小相等的数据块。块大小可以在 HDFS 配置中设置(通常为 128MB 或 256MB)。
  • 副本(Replication):每个数据块会被复制到多个 DataNode 上(默认副本数为 3)。这种数据冗余提供了容错性和高可用性。

3. 写入数据

当客户端向 HDFS 写入文件时:

  1. 客户端向 NameNode 请求写操作。
  2. NameNode 创建文件条目,并返回可用的 DataNode 列表给客户端。
  3. 客户端将数据分成块,并将每个块写入到第一个 DataNode。
  4. 第一个 DataNode 将块复制到第二个 DataNode,第二个 DataNode 再复制到第三个 DataNode,依此类推,直到达到副本因子。
  5. 每个 DataNode 在成功存储块后,向 NameNode 发送报告。

4. 读取数据

当客户端从 HDFS 读取文件时:

  1. 客户端向 NameNode 请求读取操作。
    1. NameNode 返回文件块的位置(DataNode 列表)。
  2. 客户端直接从 DataNode 读取数据块。

5. 容错机制

HDFS 具有强大的容错机制:

  • 数据冗余:通过块复制来提供容错性。即使一个 DataNode 失效,其他 DataNode 上的副本仍然可用。
  • 心跳机制:DataNode 周期性地向 NameNode 发送心跳信号和块报告。NameNode 通过心跳信号监控 DataNode 的状态。
  • 数据恢复:如果某个 DataNode 失效,NameNode 会检测到并启动块恢复操作,将缺失的块复制到其他健康的 DataNode 上。

6. 数据完整性

HDFS 通过使用校验和来保证数据的完整性:

  • 每个数据块在写入时会生成校验和,保存在元数据中。
  • 读取时,DataNode 会验证数据块的校验和,以确保数据未被损坏。

7. 扩展性

HDFS 可以轻松扩展:

  • 通过增加更多的 DataNode 可以增加存储容量和处理能力。
  • NameNode 可以通过高可用性配置(如主备 NameNode)来避免单点故障。

8. 安全性

HDFS 支持多种安全性机制:

  • 通过 Kerberos 认证进行身份验证。
  • 支持文件和目录的访问控制列表(ACL)和权限设置。

9. 架构图示

2. 报错与解决

Couldn‘t preview the file.

HDFS报错:Couldn‘t preview the file._hdfs文件预览_鸡哥爱技术的博客-CSDN博客

1.在hdfs-site.xml配置如下依赖

1
2
3
4
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

2.修改windows下的C:\Windows\System32\drivers\etc\hosts 文件与linux下的etc/hosts下的hadoop 映射地址保持一致

1
2
C:\Windows\System32\drivers\etc\hosts
/etc/hosts

3. 理论

1、hadoop的核心组件

  1. Hadoop分布式文件系统(HDFS): HDFS是Hadoop的主要存储组件,它是一个分布式文件系统,用于存储大规模数据。数据被分成块并复制到多个节点,以提高容错性和可用性。
  2. Hadoop YARN(Yet Another Resource Negotiator): Hadoop YARN是Hadoop的资源管理器,负责集群上的资源分配和作业调度。它允许不同的应用程序共享集群资源,并有效地运行MapReduce等计算框架。
  3. MapReduce: MapReduce是Hadoop的计算模型,用于处理和分析大规模数据集。它包括两个主要步骤:Map阶段(数据分片和处理)和Reduce阶段(数据聚合和结果生成)。开发人员可以编写MapReduce作业来处理数据。
  4. Hadoop Common: Hadoop Common包含了Hadoop框架的共享工具和库,包括文件系统操作、网络通信、安全认证和其他核心功能。它是所有Hadoop组件所依赖的基础。
  5. Hadoop HBase: HBase是Hadoop生态系统中的分布式NoSQL数据库,专注于大数据的实时读写操作。它适用于需要快速随机访问和高度可伸缩性的应用。
  6. Hadoop Hive: Hive是一个数据仓库工具,它提供了一种SQL样式的查询语言(HiveQL)来查询和分析存储在HDFS中的数据。它使非技术用户能够进行数据分析。
  7. Hadoop Pig: Pig是一个用于大规模数据分析的高级脚本语言平台。它允许用户编写数据转换和分析脚本,这些脚本编译成MapReduce作业运行在Hadoop集群上。
  8. Hadoop ZooKeeper: ZooKeeper是Hadoop的分布式协调服务,用于协调和管理Hadoop集群中的各种组件和任务。它提供了分布式锁、配置管理和命名服务等功能。

2、namenode和datanode的心跳机制

在Hadoop HDFS(分布式文件系统)中,Namenode和Datanode之间的心跳机制是用于维护集群健康状态和检测故障的关键组件。以下是Namendoe和Datanode之间的心跳机制的工作方式:

  1. Namenode
    • Namenode是HDFS的主要管理节点,负责维护文件系统的命名空间和元数据信息。
    • Namenode周期性地期望从每个Datanode接收心跳信号,以确认Datanodes的健康状况。
  2. Datanode
    • Datanodes是HDFS中存储实际数据块的节点,它们周期性地向Namenode发送心跳信号,并报告它们所存储的数据块信息。
    • 此外,Datanodes还向Namenode发送块报告,其中包含它们所存储的块的列表。

心跳机制的工作方式如下:

  • 每个Datanode都会定期(通常是每3秒)向Namenode发送一个心跳信号。
  • 这个心跳信号包括了Datanode的基本信息以及它所存储的块的汇报。
  • Namenode接收到心跳信号后,会确认Datanode的状态,并检查是否收到了期望的块报告。如果某个Datanode在一定时间内没有发送心跳信号,Namenode会认为该Datanode已经故障,将其标记为不可用。
  • 如果Datanode检测到自己发送的心跳信号没有得到正确的响应,它会尝试重新连接或采取其他故障恢复措施。

这个心跳机制的目的是保持集群的健康状态,及时检测故障的Datanodes,并确保数据的可靠性。当Namenode发现某个Datanode故障时,它会更新数据块的复制位置信息,以确保数据块的复制因子(通常是3)仍然得到满足,从而确保数据的可用性。这是HDFS高可用性和容错性的关键机制之一。

3、safemode(hdfs dfsadmin -safemode get enter leave)

  1. 进入SafeMode
    • 当Namenode启动或在某些情况下重新启动时,它将进入SafeMode。
    • 还可以手动触发进入SafeMode,以进行维护操作或检查数据完整性。
  2. 退出SafeMode
    • 当Namenode检查到足够数量的数据块已经被复制(满足数据复制因子)时,或者当Namenode完成数据完整性检查后,它将退出SafeMode。
    • SafeMode还可以手动离开,这通常在完成维护操作后执行。
  3. 查看SafeMode状态
    • 使用hdfs dfsadmin -safemode get命令可以查看当前HDFS集群的SafeMode状态。
    • 如果输出显示Namenode正在SafeMode中,那么HDFS的某些功能可能会受到限制。

SafeMode的主要目的是确保数据的可靠性和一致性。在SafeMode下,Namenode会等待足够数量的数据块被复制,以防止数据丢失。同时,它还允许进行数据完整性检查,以查找可能存在的数据损坏或丢失情况。

手动进入和退出SafeMode通常是由Hadoop管理员执行的,以执行维护任务或确保数据一致性。进入SafeMode后,文件系统中的某些操作将受到限制,这是为了防止进一步的数据写入,直到数据复制因子满足要求或数据完整性检查完成。

注意:SafeMode在HDFS的早期版本中更为重要,因为它有助于确保数据的可靠性。随着Hadoop的演进,某些版本中已经减少了SafeMode的限制,以提高系统的可用性。不同版本的Hadoop可能会在SafeMode方面有一些差异。

4、hadooop启动流程

  1. 启动HDFS
    • 首先,启动HDFS。HDFS包括Namenode和Datanode两个主要组件。
    • Namenode是HDFS的主要管理节点,负责维护文件系统的命名空间和元数据信息。管理员通常手动启动Namenode。
    • Datanodes是存储数据块的节点,它们会自动启动并向Namenode注册。
  2. 启动YARN
    • YARN(Yet Another Resource Negotiator)是Hadoop的资源管理系统,负责集群资源的分配和作业调度。
    • ResourceManager(RM)是YARN的主要组件,通常由管理员手动启动。ResourceManager负责接受作业提交请求,为作业分配资源,并监控资源的使用。
    • NodeManager(NM)是在每个集群节点上运行的YARN组件,用于管理该节点上的资源。
  3. 启动其他Hadoop生态系统组件
    • 根据需要,启动其他Hadoop生态系统组件,例如HBase、Hive、Pig等。
  4. 提交MapReduce作业
    • 用户可以通过MapReduce或其他计算框架提交作业。作业通常包括Map任务和Reduce任务。
    • ResourceManager将分配适当数量的容器(包含Map或Reduce任务)给作业,以便执行。
  5. 任务执行
    • TaskTracker进程在NodeManager上运行,负责执行Map和Reduce任务。
    • 每个任务会读取数据块,执行计算,然后将结果写回HDFS。
  6. 监控和管理
    • Hadoop集群会持续监控各个组件的健康状态,包括Namenode、Datanode、ResourceManager、NodeManager等。
    • 如果某个组件发生故障,集群管理系统将采取适当的措施来处理,例如,重新启动故障的Namenode。
  7. 完成作业
    • 一旦作业完成,结果将存储在HDFS中,供用户查询和分析。

这是Hadoop的一般启动流程的概览。整个流程可以根据集群配置和需求进行调整。管理员通常负责启动和管理Hadoop集群中的各个组件,以确保高可用性和性能。用户则可以使用Hadoop生态系统中的工具和API来提交和管理作业。

5、hadoop启动后的服务(单击|集群|高可用集群)

  1. 单节点(Single Node)
    • 在单节点Hadoop部署中,整个Hadoop集群运行在单个物理或虚拟机上。这种部署通常用于开发和测试环境。
    • 单节点部署包括一个Namenode,一个Datanode,一个ResourceManager,一个NodeManager以及其他Hadoop组件。
    • 服务包括HDFS、YARN(MapReduce)、以及可能的其他组件,例如Hive、Pig等。
  2. 普通集群(Standard Cluster)
    • 普通Hadoop集群通常由多个物理或虚拟机节点组成,用于处理大规模数据集。
    • 普通集群包括多个Datanodes,一个Namenode,一个ResourceManager,多个NodeManagers以及其他Hadoop组件。
    • 服务包括HDFS、YARN、以及可能的其他组件,例如Hive、HBase、Pig、Sqoop等。
  3. 高可用集群(High Availability Cluster)
    • 高可用Hadoop集群旨在确保系统的高可用性,通常包括多个主要组件的冗余部署。
    • 在高可用集群中,有两个Namenodes:一个活动Namenode和一个备用Namenode。这确保了即使一个Namenode发生故障,系统仍然可用。
    • ResourceManager也可以配置为高可用,以防止单点故障。
    • 服务包括HDFS、YARN、以及其他Hadoop生态系统组件,如Hive、HBase、Pig等。

无论部署类型,Hadoop集群的核心服务通常包括以下内容:

  • HDFS(Hadoop分布式文件系统):用于存储大规模数据集的分布式文件系统,包括Namenode和Datanode。
  • YARN(Yet Another Resource Negotiator):用于资源管理和作业调度的框架,包括ResourceManager和NodeManager。
  • MapReduce:用于数据处理和分析的计算框架。
  • Namenode:管理HDFS文件系统的元数据信息。
  • Datanode:存储数据块的节点。
  • ResourceManager:管理资源分配和作业调度。
  • NodeManager:在每个节点上运行,负责管理节点上的资源。
  • 其他Hadoop生态系统组件:根据需要,可以部署和启动其他Hadoop生态系统组件,如Hive、HBase、Pig、Sqoop、Spark等,以执行各种数据处理和分析任务。

总的来说,Hadoop集群的服务取决于部署的规模和需求,但核心服务通常包括HDFS和YARN,同时可能还包括其他Hadoop生态系统组件。高可用集群会引入冗余以提高系统的可用性。

6、客户端读取hdfs文件内容的流程

  1. 创建Hadoop配置: 客户端首先需要创建一个Hadoop配置对象,通常称为Configuration。配置对象包括HDFS的配置信息,例如Namenode的地址、用户身份验证等。

  2. 获取HDFS文件系统: 客户端使用配置对象获取到HDFS文件系统的引用。这通过FileSystem类实现,通常会使用FileSystem.get(configuration)方法。

  3. 打开HDFS文件: 客户端使用文件系统引用打开要读取的HDFS文件,可以使用open方法指定文件路径。这将返回一个FSDataInputStream对象,用于读取文件内容。

  4. 读取文件内容: 使用FSDataInputStream对象可以逐行或逐块读取HDFS文件内容。客户端可以使用类似Java的输入流方式来读取数据。

    1
    2
    3
    4
    5
    6
    7
    8
    javaCopy codeFSDataInputStream inputStream = fileSystem.open(new Path("/path/to/your/file"));
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    String line;
    while ((line = reader.readLine()) != null) {
    // 处理文件内容
    }
    reader.close();
    inputStream.close();
  5. 关闭文件: 客户端读取文件后,需要关闭文件以释放资源,关闭FSDataInputStream对象。

  6. 关闭文件系统: 最后,客户端需要关闭HDFS文件系统以释放资源。

整个流程是一个标准的读取文件的过程,客户端与HDFS之间通过Hadoop的Java API进行交互。注意,如果需要处理大规模数据集,通常使用分布式计算框架(如MapReduce、Spark)可以更高效地读取和处理数据。

7、客户端向hdfs写内容的流程

  1. 创建Hadoop配置: 客户端首先需要创建一个Hadoop配置对象,通常称为 Configuration。配置对象包括HDFS的配置信息,例如Namenode的地址、用户身份验证等。

  2. 获取HDFS文件系统: 客户端使用配置对象获取到HDFS文件系统的引用。这通过 FileSystem 类实现,通常会使用 FileSystem.get(configuration) 方法。

  3. 打开HDFS文件: 客户端使用文件系统引用创建或打开要写入内容的HDFS文件,可以使用 create 方法指定文件路径。这将返回一个 FSDataOutputStream 对象,用于写入文件内容。

    1
    FSDataOutputStream outputStream = fileSystem.create(new Path("/path/to/your/file"));
  4. 写入文件内容: 使用 FSDataOutputStream 对象可以写入数据到HDFS文件。客户端可以使用类似Java的输出流方式来写入数据。

    1
    2
    byte[] data = "This is the content you want to write to the file".getBytes();
    outputStream.write(data);
  5. 关闭文件: 客户端在完成写入操作后,需要关闭文件以确保数据被刷新到HDFS。

    1
    outputStream.close();
  6. 关闭文件系统: 最后,客户端需要关闭HDFS文件系统以释放资源。

整个流程是一个标准的写入文件的过程,客户端通过Hadoop的Java API与HDFS进行交互。如果需要处理大规模数据集,通常使用分布式计算框架(如MapReduce、Spark)可以更高效地写入和处理数据。如果需要确保数据的完整性,HDFS会自动复制数据块,并提供容错性和高可用性。


hadoop安装配置,报错与解决,理论,待整理
https://leaf-domain.gitee.io/2023/10/14/hadoop/
作者
叶域
发布于
2023年10月14日
许可协议