HDFS上的文件不支持直接修改,是因为HDFS只支持一次写入,如果想要修改HDFS上的文件则需要将HDFS的文件下载到本地(hdfs dfs -get hdfs路径 本地路径),从本地进行修改,然后再上传到HDFS上(hdfs dfs -put 本地路径 hdfs路径)
但是HDFS支持通过appendToFile追加:hdfs dfs -appendToFile 追加内容的文件 HDFS中要被追加的文件
HDFS和MapReduce对比
HDFS
1,hdfs 和 mapreduce都是主从关系,分布式架构。
2,hdfs有一个主节点NameNode和多个从节点DataNode。
3,NameNode含有存储文件信息的元数据信息。在运行过程中把数据加载到内存。
4,当NameNode里的全部元数据无法加载到内存时,集群就要扩展。
5,小文件(1M,2M)的存储,造成NameNode的存储所占内存压力增大。
6,hdfs两个NameNode共存,组成类似主备架构,实现HA(需要Zookeeper集群)。
MapReduce
7,mapreduce有一个主节点JobTracker和多个从节点TaskTracker。
8,JobTracker管理用户提交的任务和分配资源。
9,mapreduce支持批量数据的离线计算,实时性不如storm,spark
fastdfs 和hdfs的区别
主要是定位和应用场合不一样。
hadoop的文件系统HDFS主要解决并行计算中分布式存储数据的问题。其单个数据文件通常很大,采用了分块(切分)存储的方式;
FastDFS主要用于大中网站,为文件上传和下载提供在线服务。所以在负载均衡、动态扩容等方面都支持得比较好,FastDFS不会对文件进行分快(切分)存储。
1、 FastDFS客户端底层连接服务端使用的是Socket,本身速度就要快很多。
2、 HDFS在做删除测试时,明显较慢的地方是在创建到服务端的连接上,实际删除文件的速度很快。由于每次测试都需要先创建到服务端的连接,HDFS在这块消耗较大,在实际场景下,差距应该没有这么大。
3、 两者的适用场景确有不同,FastDFS更适合小文件的高效存取,而HDFS更适合超大文件上传后使用Mapreduce去做大数据处理。