HDFS

HDFS(分布式文件存储)

解决海量分布式存储问题。
分布式文件系统在计算机集群中由多个节点构成,分为以下两类节点

  1. 主节点:名称节点(NameNode)在内存中存储元数据,数据目录,保存数据块与数据节点的映射关系
  2. 从节点:数据节点(DataNode)存储具体数据到磁盘

HDFS不满足实时读写的需求,只允许追加,不允许随意读写。

一个文件被分为很多数据块,以块作为数据存储单位。每个块都将做冗余备份。

读过程

客户端输入流询问名称节点离客户机最近的数据节点,读取数据,再询问名称节点后续数据依次反复。

写过程

客户端输出流询问名称节点要写入到哪些数据节点,进行流水线复制,数据包由客户端传到第一个数据节点再传到第二个数据节点…发确认包确认收到返回客户端。

JavaAPI读写

						try {
								//加载配置
                                Configuration conf = new Configuration();  
                                conf.set("fs.defaultFS","hdfs://localhost:9000");
                               conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
                               //FileSystem内容封装的是DistrubitFileSystem
                                FileSystem fs = FileSystem.get(conf);
                                byte[] buff = "Hello world".getBytes(); // 要写入的内容
                                String filename = "test"; //要写入的文件名
                                //FSDataOutputStream内部封装DFSDataOutputStream
                                FSDataOutputStream os = fs.create(new Path(filename));
                                os.write(buff,0,buff.length);
                                System.out.println("Create:"+ filename);
                                os.close();
                                fs.close();
                        } catch (Exception e) {  
                                e.printStackTrace();  
                        }  

  						try {
                                    String filename = "test";
                                    Configuration conf = new Configuration();
                                    conf.set("fs.defaultFS","hdfs://localhost:9000");
                                    conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
                                    FileSystem fs = FileSystem.get(conf);
                                    if(fs.exists(new Path(filename))){
                                            System.out.println("文件存在");
                                    }else{
                                            System.out.println("文件不存在");
                                    }
                                    fs.close();
                        } catch (Exception e) {
                                e.printStackTrace();
                        }

Hadoop平台运行jar包

./bin/hadoop jar jar包名

几个常用的shell命令

目录操作
./bin/hdfs dfs -mkdir -p /user/hadoop 创建目录/user/hadoop多级目录加上-p
./bin/hdfs dfs -ls 查看目录
./bin/hdfs dfs –rm –r /input 删除根目录下的input目录
文件操作
./bin/hdfs dfs -put source dst 上传文件到HDFS
./bin/hdfs dfs –cat dst 查看文件
./bin/hdfs dfs -get source dst 从HDFS下载到本地
./bin/hdfs dfs -cp input/myLocalFile.txt /input 将相对路径下的myLocalFile拷贝到根目录下,在HDFS间拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值