知识点
相关文章
更多最近更新
更多Hadoop系列-fs包之代码实现
2019-03-28 14:11|来源: 网络
在此包中,最重要的是FileSystem抽象类。它定义了文件系统中涉及的一些基本操作,如:create,rename,delete...另外包括 一些分布式文件系统具有的操作:copyFromLocalFile,copyToLocalFile,...类似于Ftp中put和get操作。 LocalFileSystem和DistributedFileSystem,继承于此类,分别实现了本地文件系统和分布式文件系统。
了解了最重要的类之后,看一看它的一系列stream类:
FSOutputStream在原有OutputStream基础之上添加了获得文件指针偏移量的getPos方法。可以通过FileSystem的 createRaw获得它的实例。这里存在一个疑问,这个扩展的getPos方法在fs包中没有被使用。如果在其余包中同样没有被使用,那么扩展就显得多 余。
FSInputStream在原有InputStream基础之上同样添加了getPos方法,同时可以通过seek方法定位指定的偏移量处。可以通过 FileSystem的openRaw获得它的实例。新添加的getPos和seek方法在FSDataInputStream类中被使用。
FSDataOutputStream继承于DataOutputStream,包装了FSOutputStream。与DataOutputStream相比,不同之处在于:
添加了getPos方法,它是利用PositonCache记录当前的position
通过Buffer内类对输出进行缓存处理,改进性能
可以构建具有checksum的流,保证数据的正确性
FSDataInputStram继承于DataInputStream,包装了FSInputStream。与DataInputStream相比,不同之处在于:
添加了seek和getPos方法
通过Buffer内类对输入进行缓存处理,改进性能
可以构建具有checksum的流,保证数据的正确性
另外,为了屏蔽Windows和Unix、Linux在路径处理上存在的差异,实现了Path类,提供了统一的处理方式。
相关问答
更多-
为什么 我执行 hadoop fs -test 没有值返回???[2023-05-21]
shell命令的返回值用 $? 表示;你执行 echo $?; 查看 -
hadoop fs -mkdir input hadoop:未找到命令[2023-05-07]
path里没配hadoop的bin的路径 -
hadoop fs -put ~/inputDemo in 出错[2021-04-15]
貌似权限有问题啊,你切换到root账户下登陆hadoop,修改rwxr-xr-x==>rwxrwxr-x,祝你好运。 -
org/apache/hadoop/fs/path是什么包[2023-12-31]
今天好好找了一下,这是我找到的 有关配置的conf方面在 hadoop/common/hadoop-commom-2.2.0.jar (org.apache.hadoop.conf.Configuration -
hadoop fs -put和hadoop fs -copyFromLocal之间的区别(Difference between hadoop fs -put and hadoop fs -copyFromLocal)[2023-09-15]
copyFromLocal类似于put命令,除了源被限制为本地文件引用。 所以,基本上你可以用put来做,所有这些都用copyFromLocal ,但是反之亦然。 同样的, copyToLocal类似于get命令,除了目标被限制在本地文件引用之外。 因此,您可以使用get而不是copyToLocal ,但不能相反。 参考 : Hadoop的文档 。 更新 :截至2015年10月的最新消息,请看下面的答案。 copyFromLocal is similar to put command, except tha ... -
我会说这更多的是效率 - 通过linux头命令管理hadoop fs -cat的输出可以轻松地复制一个头。 hadoop fs -cat /path/to/file | head 这是有效的,因为在输出所需数量的行之后,头将关闭底层流 以这种方式使用尾巴的效率要低得多 - 因为您必须流过整个文件(所有HDFS块)才能找到最终的x行数。 hadoop fs -cat /path/to/file | tail hadoop fs -tail命令可以在最后一个千字节的hadoop上有效地找到最后一个块,并跳到 ...
-
使用MAPRFS运行`hadoop fs`时如何启用其他日志记录?(How to enable additional logging when running `hadoop fs` with MAPRFS?)[2022-11-09]
您也可以直接使用该选项 hadoop mfs -Dfs.mapr.trace=DEBUG -ls maprfs://maprfs.example.com/tmp/1GB.img You can also use the option directly hadoop mfs -Dfs.mapr.trace=DEBUG -ls maprfs://maprfs.example.com/tmp/1GB.img -
可以通过shell访问hadoop fs,但不能通过java main访问(Can access hadoop fs through shell, but not through java main)[2021-12-17]
你有一个版本不匹配 - 你的问题注意到NameNode运行版本0.20.1 + 169.89(我认为是来自Cloudera发行版CDH2 - http://archive.cloudera.com/cdh/2/ ),并在IntelliJ你正在使用Apache hadoop 2.2.0版。 更新IntelliJ类路径以使用与群集版本兼容的jar - 即: hadoop-0.20.1+169.89-core.jar You have a version mismatch - your questions not ... -
这是我们如何做到的。 刚写了一个快速的shell脚本。 LOCAL_DIR=/tmp/txt mkdir $LOCAL_DIR for F in `hadoop fs -fs hdfs://namenode.mycluster -lsr / | grep '/*.txt$' | awk '{print $NF}'; do hadoop fs -fs hdfs://namenode.mycluster -copyToLocal $F $LOCAL_DIR done` Here's how we ...
-
当您希望将数据从一个HDFS位置复制到另一个HDFS位置时使用cp 。 但是您打算将数据从本地FS复制到HDFS。 要将数据从本地FS复制到HDFS,您可以使用put或copyFromLocal 。 如果你真的想用cp来做,那么你必须指定完整的路径和方案。 说, hadoop fs -cp file:///Users/miqbal1/date.txt / 默认情况下, cp假定该方案为hdfs:// 但是,为什么你会这样做,当你把它放置并复制到本地 ? HTH cp is used when you wi ...