- Access 教程
- 关于 Microsoft Access - Access 教程
- Access 创建数据库 - Access 教程
- Access 创建表 - Access 教程
- Access 设计视图 - Access 教程
- Access 添加数据 - Access 教程
- Access 创建表单 - Access 教程
- Access 修改表单 - Access 教程
- Access 创建查询 - Access 教程
- Access 修改查询 - Access 教程
- Access 创建关联关系 - Access 教程
- Access SQL 视图 - Access 教程
- Access 创建宏 - Access 教程
- Access 数据库导出到 excel - Access 教程
- DB2 教程
- DB2 服务器安装 - DB2 教程
- DB2 实例 - DB2 教程
- DB2 数据库 - DB2 教程
- DB2 缓冲池 - DB2 教程
- DB2 表空间 - DB2 教程
- DB2 存储组 - DB2 教程
- DB2 模式 - DB2 教程
- DB2 数据类型 - DB2 教程
- DB2 表 - DB2 教程
- DB2 别名/alias - DB2 教程
- DB2 约束 - DB2 教程
- DB2 索引 - DB2 教程
- DB2 触发器 - DB2 教程
- DB2 序列 - DB2 教程
- DB2 视图 - DB2 教程
- DB2 与 XML - DB2 教程
- DB2 备份和恢复 - DB2 教程
- DB2 数据库安全 - DB2 教程
- DB2 角色 - DB2 教程
- DB2 LDAP - DB2 教程
- Hadoop 教程
- Hadoop 大数据解决方案 - Hadoop 教程
- Hadoop 介绍快速入门 - Hadoop 教程
- Hadoop 安装 - Hadoop 教程
- Hadoop HDFS 入门 - Hadoop 教程
- MapReduce 简介和入门 - Hadoop 教程
- Hadoop 程序入门实践 - Hadoop 教程
- HBase 教程
- HBase 架构 - HBase 教程
- HBase 安装 - HBase 教程
- HBase Shell - HBase 教程
- HBase 常用命令 - HBase 教程
- HBase Admin API - HBase 教程
- HBase 创建表 - HBase 教程
- HBase 列出表 - HBase 教程
- HBase 禁用表 - HBase 教程
- HBase 启用表 - HBase 教程
- HBase 表描述和修改 - HBase 教程
- HBase Exists - HBase 教程
- HBase 删除表 - HBase 教程
- HBase 关闭 - HBase 教程
- HBase 客户端 API - HBase 教程
- HBase 创建数据 - HBase 教程
- HBase 更新数据 - HBase 教程
- HBase 读取数据 - HBase 教程
- HBase 删除数据 - HBase 教程
- HBase 扫描 - HBase 教程
- HBase 计数和截断 - HBase 教程
- HBase 安全 - HBase 教程
- Hive 教程
- Hive 安装 - Hive 教程
- Hive 数据类型 - Hive 教程
- Hive 创建数据库 - Hive 教程
- Hive 删除数据库 - Hive 教程
- Hive 创建表 - Hive 教程
- Hive 修改表 - Hive 教程
- Hive 删除表 - Hive 教程
- Hive 分区 - Hive 教程
- Hive 内置运算符 - Hive 教程
- Hive 内置函数 - Hive 教程
- Hive 视图和索引 - Hive 教程
- HiveQL Select Where - Hive 教程
- HiveQL Select Order By - Hive 教程
- HiveQL Select Group By - Hive 教程
- HiveQL Select Join - Hive 教程
- Memcached 教程
- Memcached 入门
- Memcached 简介
- Memcached 安装
- Memcached 连接
- Memcached 存储命令
- Memcached set 命令
- Memcached add 命令
- Memcached replace 命令
- Memcached append 命令
- Memcached prepend 命令
- Memcached CAS 命令
- Memcached 查找命令
- Memcached get 命令
- Memcached gets 命令
- Memcached delete 命令
- Memcached incr 与 decr 命令
- Memcached 统计命令
- Memcached stats 命令
- Memcached stats items 命令
- Memcached stats slabs 命令
- Memcached stats sizes 命令
- Memcached flush_all 命令
- Memcached 实例
- Java 连接 Memcached 服务
- PHP 连接 Memcached 服务
- MongoDB 教程
- NoSQL 简介
- 什么是 MongoDB ?
- window 平台安装 MongoDB
- Linux 平台安装 MongoDB
- MongoDB 数据库,对象,集合
- MongoDB - 连接
- PHP 安装 MongoDB 扩展驱动
- MongoDB 数据插入
- MongoDB 使用 update() 函数更新数据
- MongoDB 使用- remove() 函数删除数据
- MongoDB 查询
- MongoDB 条件操作符
- MongoDB 条件操作符 - $type
- MongoDB Limit 与 Skip 方法
- MongoDB 排序
- MongoDB 索引
- MongoDB 聚合
- MongoDB 复制(副本集)
- MongoDB 分片
- MongoDB 备份(mongodump) 与恢复(mongorerstore)
- MongoDB 监控
- MongoDB Java
- MongoDB PHP
- MongoDB 关系
- MongoDB 数据库引用
- MongoDB 覆盖索引查询
- MongoDB 查询分析
- MongoDB 原子操作
- MongoDB 高级索引
- MongoDB 索引限制
- MongoDB ObjectId
- MongoDB Map Reduce
- MongoDB 全文检索
- MongoDB 正则表达式
- MongoDB 管理工具: Rockmongo
- MongoDB GridFS
- MongoDB 固定集合(Capped Collections)
- MongoDB 自动增长
- MySQL 教程
- MySQL 教程
- MySQL 安装
- MySQL 管理
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- MySQL 排序
- Mysql Join 的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER 命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- MySQL 元数据
- MySQL 序列使用
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- PL/SQL 教程
- PL/SQL 环境安装设置 - PL/SQL 教程
- PL/SQL 基本语法 - PL/SQL 教程
- PL/SQL 数据类型 - PL/SQL 教程
- PL/SQL 变量 - PL/SQL 教程
- PL/SQL 常量和文字 - PL/SQL 教程
- PL/SQL 运算符 - PL/SQL 教程
- PL/SQL 条件控制 - PL/SQL 教程
- PL/SQL 循环 - PL/SQL 教程
- PL/SQL 字符串 - PL/SQL 教程
- PL/SQL 数组 - PL/SQL 教程
- PL/SQL 过程 - PL/SQL 教程
- PL/SQL 函数 - PL/SQL 教程
- PL/SQL 游标 - PL/SQL 教程
- PL/SQL 记录 - PL/SQL 教程
- PL/SQL 异常 - PL/SQL 教程
- PL/SQL 触发器 - PL/SQL 教程
- PL/SQL 包 - PL/SQL 教程
- PL/SQL 集合 - PL/SQL 教程
- PL/SQL 事务 - PL/SQL 教程
- PL/SQL 日期及时间 - PL/SQL 教程
- PL/SQL DBMS 输出 - PL/SQL 教程
- PL/SQL 面向对象 - PL/SQL 教程
- Redis 教程
- Redis 简介
- Redis 安装
- Redis 配置
- Redis 数据类型
- Redis 命令
- Redis 数据备份与恢复
- Redis 安全
- Redis 性能测试
- Redis 客户端连接
- Redis 管道技术
- Redis 分区
- Java 使用 Redis
- PHP 使用 Redis
- Redis 命令参考
- Key(键)
- DEL
- DUMP
- EXISTS
- EXPIRE
- EXPIREAT
- KEYS
- MIGRATE
- MOVE
- OBJECT
- PERSIST
- PEXPIRE
- PEXPIREAT
- PTTL
- RANDOMKEY
- RENAME
- RENAMENX
- RESTORE
- SORT
- TTL
- TYPE
- SCAN
- String(字符串)
- APPEND
- BITCOUNT
- BITOP
- DECR
- DECRBY
- GET
- GETBIT
- GETRANGE
- GETSET
- INCR
- INCRBY
- INCRBYFLOAT
- MGET
- MSET
- MSETNX
- PSETEX
- SET
- SETBIT
- SETEX
- SETNX
- SETRANGE
- STRLEN
- Hash(哈希表)
- HDEL
- HEXISTS
- HGET
- HGETALL
- HINCRBY
- HINCRBYFLOAT
- HKEYS
- HLEN
- HMGET
- HMSET
- HSET
- HSETNX
- HVALS
- HSCAN
- List(列表)
- BLPOP
- BRPOP
- BRPOPLPUSH
- LINDEX
- LINSERT
- LLEN
- LPOP
- LPUSH
- LRANGE
- LREM
- LSET
- LTRIM
- RPOP
- RPOPLPUSH
- RPUSH
- RPUSHX
- Set(集合)
- SADD
- SCARD
- SDIFF
- SDIFFSTORE
- SINTER
- SINTER
- SINTERSTORE
- SISMEMBER
- SMEMBERS
- SMOVE
- SPOP
- SRANDMEMBER
- SREM
- SUNION
- SUNIONSTORE
- SSCAN
- SortedSet(有序集合)
- ZADD
- ZCARD
- ZCOUNT
- ZINCRBY
- ZRANGE
- ZRANGEBYSCORE
- ZRANK
- ZREM
- ZREMRANGEBYRANK
- ZREMRANGEBYSCORE
- ZREVRANGE
- ZREVRANGEBYSCORE
- ZREVRANK
- ZSCORE
- ZUNIONSTORE
- ZINTERSTORE
- ZSCAN
- Pub/Sub(发布/订阅)
- PSUBSCRIBE
- PUBLISH
- PUBSUB
- PUNSUBSCRIBE
- SUBSCRIBE
- UNSUBSCRIBE
- Transaction(事务)
- DISCARD
- EXEC
- MULTI
- UNWATCH
- WATCH
- Script(脚本)
- EVAL
- EVALSHA
- SCRIPT EXISTS
- SCRIPT FLUSH
- SCRIPT KILL
- SCRIPT LOAD
- Connection(连接)
- AUTH
- ECHO
- PING
- QUIT
- SELECT
- Server(服务器)
- BGREWRITEAOF
- BGSAVE
- CLIENT GETNAME
- CLIENT KILL
- CLIENT LIST
- CLIENT SETNAME
- CONFIG GET
- CONFIG RESETSTAT
- CONFIG REWRITE
- CONFIG SET
- DBSIZE
- DEBUG OBJECT
- DEBUG SEGFAULT
- FLUSHALL
- FLUSHDB
- INFO
- LASTSAVE
- MONITOR
- PSYNC
- SAVE
- SHUTDOWN
- SLAVEOF
- SLOWLOG
- SYNC
- TIME
- SQL 教程
- SQL 基础
- SQL 简介
- SQL 语法
- SQL SELECT 语句
- SQL SELECT DISTINCT 语句
- SQL WHERE 子句
- SQL AND & OR 运算符
- SQL ORDER BY 子句
- SQL INSERT INTO 语句
- SQL UPDATE 语句
- SQL DELETE 语句
- SQL 高级
- SQL TOP 子句
- SQL LIKE 操作符
- SQL 通配符
- SQL IN 操作符
- SQL BETWEEN 操作符
- SQL Alias(别名)
- SQL JOIN
- SQL INNER JOIN 关键字
- SQL LEFT JOIN 关键字
- SQL RIGHT JOIN 关键字
- SQL FULL JOIN 关键字
- SQL UNION 和 UNION ALL 操作符
- SQL SELECT INTO 语句
- SQL CREATE DATABASE 语句
- SQL CREATE TABLE 语句
- SQL 约束 (Constraints)
- SQL NOT NULL 约束
- SQL UNIQUE 约束
- SQL PRIMARY KEY 约束
- SQL FOREIGN KEY 约束
- SQL CHECK 约束
- SQL DEFAULT 约束
- SQL CREATE INDEX 语句
- SQL 撤销索引、表以及数据库
- SQL ALTER TABLE 语句
- SQL AUTO INCREMENT 字段
- SQL VIEW(视图)
- SQL 函数
- SQL Date 函数
- SQL NULL 值
- SQL NULL 函数
- SQL 数据类型
- SQL 服务器 - RDBMS
- SQL 函数
- SQL AVG 函数
- SQL COUNT() 函数
- SQL FIRST() 函数
- SQL LAST() 函数
- SQL MAX() 函数
- SQL MIN() 函数
- SQL SUM() 函数
- SQL GROUP BY 语句
- SQL HAVING 子句
- SQL UCASE() 函数
- SQL LCASE() 函数
- SQL MID() 函数
- SQL LEN() 函数
- SQL ROUND() 函数
- SQL NOW() 函数
- SQL FORMAT() 函数
- SQL 快速参考
- SQLite 教程
- SQLite 基础
- SQLite 简介
- SQLite 安装
- SQLite 命令
- SQLite 语法
- SQLite 数据类型
- SQLite 创建数据库
- SQLite 附加数据库
- SQLite 分离数据库
- SQLite 创建表
- SQLite 删除表
- SQLite Insert 语句
- SQLite Select 语句
- SQLite 运算符
- SQLite 表达式
- SQLite Where 子句
- SQLite AND/OR 运算符
- SQLite Update 语句
- SQLite Delete 语句
- SQLite Like 子句
- SQLite Glob 子句
- SQLite Limit 子句
- SQLite Order By
- SQLite Group By
- SQLite Having 子句
- SQLite Distinct 关键字
- SQLite 高级
- SQLite PRAGMA
- SQLite 约束
- SQLite Joins
- SQLite Unions 子句
- SQLite NULL 值
- SQLite 别名
- SQLite 触发器(Trigger)
- SQLite 索引(Index)
- SQLite Indexed By
- SQLite Alter 命令
- SQLite Truncate Table
- SQLite 视图(View)
- SQLite 事务(Transaction)
- SQLite 子查询
- SQLite Autoincrement(自动递增)
- SQLite 注入
- SQLite Explain(解释)
- SQLite Vacuum
- SQLite 日期 & 时间
- SQLite 常用函数
- SQLite 接口
- SQLite - C/C++
- SQLite - Java
- SQLite - PHP
- SQLite - Perl
- SQLite - Python
- SQL Server 教程
- 关于 Microsoft SQL Server - SQL Server 教程
- SQL Server 2014 版 - SQL Server 教程
- SQL Server 安装 - SQL Server 教程
- Windows2012 R2 上安装.NET3.5 框架 - SQL Server 教程
- SQL Server 管理套件(SSMS) - SQL Server 教程
- SQL Server 创建数据库 - SQL Server 教程
- SQL Server 创建表 - SQL Server 教程
- SQL Server 添加数据 - SQL Server 教程
- SQL Server SQL 脚本 - SQL Server 教程
- SQL Server 查询设计器 - SQL Server 教程
- SQL Server 视图 - SQL Server 教程
- SQL Server 存储过程 - SQL Server 教程
- SQL Server 服务器角色 - SQL Server 教程
- SQL Server 数据库模式 - SQL Server 教程
- SQL Server 链接服务器 - SQL Server 教程
Hadoop HDFS 入门 - Hadoop 教程
Hadoop 附带了一个名为 HDFS(Hadoop 分布式文件系统) 的分布式文件系统,基于 Hadoop 的应用程序使用 HDFS 。HDFS 是专为存储超大数据文件,运行在集群的商品硬件上。它是容错的,可伸缩的,并且非常易于扩展。 你知道吗? 当数据超过一个单个物理机器上存储的容量,除以跨独立机器数。管理跨越机器的网络存储特定操作被称为分布式文件系统。
HDFS 集群主要由 NameNode 管理文件系统 Metadata 和 DataNodes 存储的实际数据。
- NameNode: NameNode 可以被认为是系统的主站。它维护所有系统中存在的文件和目录的文件系统树和元数据 。 两个文件:“命名空间映像“和”编辑日志“是用来存储元数据信息。Namenode 有所有包含数据块为一个给定的文件中的数据节点的知识,但是不存储块的位置持续。从数据节点在系统每次启动时信息重构一次。
- DataNode : DataNodes 作为从机,每台机器位于一个集群中,并提供实际的存储. 它负责为客户读写请求服务。
HDFS 中的读/写操作运行在块级。HDFS 数据文件被分成块大小的块,这是作为独立的单元存储。默认块大小为 64 MB。
HDFS 操作上是数据复制的概念,其中在数据块的多个副本被创建,分布在整个节点的群集以使在节点故障的情况下数据的高可用性。
注: 在 HDFS 的文件,比单个块小,不占用块的全部存储。
在 HDFS 读操作
数据读取请求将由 HDFS,NameNode 和 DataNode 来服务。让我们把读取器叫 “客户”。下图描绘了文件的读取操作在 Hadoop 中。
- 客户端启动通过调用文件系统对象的 open() 方法读取请求; 它是 DistributedFileSystem 类型的对象。
- 此对象使用 RPC 连接到 namenode 并获取的元数据信息,如该文件的块的位置。 请注意,这些地址是文件的前几个块。
- 响应该元数据请求,具有该块副本的 DataNodes 地址被返回。
- 一旦接收到 DataNodes 的地址,FSDataInputStream 类型的一个对象被返回到客户端。 FSDataInputStream 包含 DFSInputStream 这需要处理交互 DataNode 和 NameNode。在上图所示的步骤 4,客户端调用 read() 方法,这将导致 DFSInputStream 建立与第一个 DataNode 文件的第一个块连接。
- 以数据流的形式读取数据,其中客户端多次调用 “read() ” 方法。 read() 操作这个过程一直持续,直到它到达块结束位置。
- 一旦到模块的结尾,DFSInputStream 关闭连接,移动定位到下一个 DataNode 的下一个块
- 一旦客户端已读取完成后,它会调用 close() 方法。
HDFS 写操作
在本节中,我们将了解如何通过的文件将数据写入到 HDFS。
- 客户端通过调用 DistributedFileSystem 对象的 create() 方法创建一个新的文件,并开始写操作 - 在上面的图中的步骤 1
- DistributedFileSystem 对象使用 RPC 调用连接到 NameNode,并启动新的文件创建。但是,此文件创建操作不与文件任何块相关联。NameNode 的责任是验证文件(其正被创建的) 不存在,并且客户端具有正确权限来创建新文件。如果文件已经存在,或者客户端不具有足够的权限来创建一个新的文件,则抛出 IOException 到客户端。否则操作成功,并且该文件新的记录是由 NameNode 创建。
- 一旦 NameNode 创建一条新的记录,返回 FSDataOutputStream 类型的一个对象到客户端。客户端使用它来写入数据到 HDFS。数据写入方法被调用(图中的步骤 3)。
- FSDataOutputStream 包含 DFSOutputStream 对象,它使用 DataNodes 和 NameNode 通信后查找。当客户机继续写入数据,DFSOutputStream 继续创建这个数据包。这些数据包连接排队到一个队列被称为 DataQueue
- 还有一个名为 DataStreamer 组件,用于消耗 DataQueue。DataStreamer 也要求 NameNode 分配新的块,拣选 DataNodes 用于复制。
- 现在,复制过程始于使用 DataNodes 创建一个管道。 在我们的例子中,选择了复制水平 3,因此有 3 个 DataNodes 管道。
- 所述 DataStreamer 注入包分成到第一个 DataNode 的管道中。
- 在每个 DataNode 的管道中存储数据包接收并同样转发在第二个 DataNode 的管道中。
- 另一个队列,“Ack Queue”是由 DFSOutputStream 保持存储,它们是 DataNodes 等待确认的数据包。
- 一旦确认在队列中的分组从所有 DataNodes 已接收在管道,它从 'Ack Queue' 删除。在任何 DataNode 发生故障时,从队列中的包重新用于操作。
- 在客户端的数据写入完成后,它会调用 close() 方法(第 9 步图中),调用 close() 结果进入到清理缓存剩余数据包到管道之后等待确认。
- 一旦收到最终确认,NameNode 连接告诉它该文件的写操作完成。
使用 JAVA API 访问 HDFS
在本节中,我们来了解 Java 接口并用它们来访问 Hadoop 的文件系统。
为了使用编程方式与 Hadoop 文件系统进行交互,Hadoop 提供多种 Java 类。 org.apache.hadoop.fs 包中包含操纵 Hadoop 文件系统中的文件类工具。这些操作包括,打开,读取,写入,和关闭。实际上,对于 Hadoop 文件 API 是通用的,可以扩展到 HDFS 的其他文件系统交互。
编程从 HDFS 读取文件 java.net.URL 对象是用于读取文件的内容。首先,我们需要让 Java 识别 Hadoop 的 HDFS URL 架构。这是通过调用 URL 对象的 setURLStreamHandlerFactory 方法和 FsUrlStreamHandlerFactory 的一个实例琮传递给它。此方法只需要执行一次在每个 JVM,因此,它被封闭在一个静态块中。
示例代码
publicclassURLCat {
static{
URL.setURLStreamHandlerFactory(newFsUrlStreamHandlerFactory());
}
publicstaticvoidmain(String[] args) throwsException {
InputStream in = null;
try{
in = newURL(args[0]).openStream();
IOUtils.copyBytes(in, System.out, 4096, false);
}
finally{
IOUtils.closeStream(in);
}
}
}
这段代码用于打开和读取文件的内容。HDFS 文件的路径作为命令行参数传递给该程序。
使用命令行界面访问 HDFS
这是与 HDFS 交互的最简单的方法之一。 命令行接口支持对文件系统操作,例如:如读取文件,创建目录,移动文件,删除数据,并列出目录。
可以执行 '$HADOOPHOME/bin/hdfs dfs -help' 来获得每一个命令的详细帮助。这里, 'dfs' HDFS 是一个 shell 命令,它支持多个子命令。首先要启动 Haddop 服务(使用 hduser用户),执行命令如下:
hduser_@ubuntu:~$ su hduser_
hduser_@ubuntu:~$ $HADOOP_HOME/sbin/start-dfs.sh
hduser_@ubuntu:~$ $HADOOP_HOME/sbin/start-yarn.sh
一些广泛使用的命令的列表如下
1. 从本地文件系统复制文件到 HDFS
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -copyFromLocal temp.txt /
此命令将文件从本地文件系统拷贝 temp.txt 文件到 HDFS。
2. 我们可以通过以下命令列出一个目录下存在的文件 -ls
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -ls /
我们可以看到一个文件 'temp.txt“(之前复制) 被列在”/“目录。
3. 以下命令将文件从 HDFS 拷贝到本地文件系统
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -copyToLocal /temp.txt
我们可以看到 temp.txt 已经复制到本地文件系统。
4. 以下命令用来创建新的目录
hduser_@ubuntu:~$ $HADOOP_HOME/bin/hdfs dfs -mkdir /mydirectory
接下来检查是否已经建立了目录。现在,应该知道怎么做了吧?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论