浏览hdfs文件的方法有哪些|如何从hdfs缓存中直接读取数据

|

A. hadoop怎么访问hdfs路径

先用hdfsGetPathInfo 得到一个hdfsFileInfo类型的结构体,get_real_path(dsh, s, real_path);hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);//这个结构体中有个kind属性,就是来区分是文件还是目录 typedef struct { tObjectKind mKind; /* file or directory */ char *mName; /* the name of the file */ tTime mLastMod; /* the last modification time for the file in seconds */ tOffset mSize; /* the size of the file in bytes */ short mReplication; /* the count of replicas */ tOffset mBlockSize; /* the block size for the file */ char *mOwner; /* the owner of the file */ char *mGroup; /* the group associated with the file */ short mPermissions; /* the permissions associated with the file */ tTime mLastAccess; /* the last access time for the file in seconds */ } hdfsFileInfo;

B. hadoop程序怎么访问hdfs路径

先用hdfsGetPathInfo 得到一个hdfsFileInfo类型的结构体, get_real_path(dsh, s, real_path); hdfsFileInfo * pt_hdfs_file_info = hdfsGetPathInfo(hdfs,real_path);// 这个结构体中有个kind属性,就是来区分是文件还是目录 typedef struct~如果你认可我的回答,请及时点击【采纳为满意回答】按钮~~手机提问的朋友在客户端右上角评价点【满意】即可。~你的采纳是我前进的动力~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。

C. 如何使用java API读写HDFS

HDFS是Hadoop生态系统的根基,也是Hadoop生态系统中的重要一员,大部分时候,我们都会使用Linuxshell命令来管理HDFS,包括一些文件的创建,删除,修改,上传等等,因为使用shell命令操作HDFS的方式,相对比较简单,方便,但是有时候,我们也需要通过编程的方式来实现对文件系统的管理。比如有如下的一个小需求,要求我们实现读取HDFS某个文件夹下所有日志,经过加工处理后在写入到HDFS上,或者存进Hbase里,或者存进其他一些存储系统。这时候使用shell的方式就有点麻烦了,所以这时候我们就可以使用编程的方式来完成这件事了,当然散仙在这里使用的是原生的Java语言的方式,其他的一些语言例如C++,PHP,Python都可以实现,散仙在这里不给出演示了,(其实散仙也不会那些语言,除了刚入门的Python)。下面,散仙给出代码,以供参考:viewsourceprint?packagecom.java.api.hdfs;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReaderimportorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileStatus;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;/***@author三劫散仙*JavaAPI操作HDFS*工具类****/publicclassOperaHDFS{publicstaticvoidmain(String[]args)throwsException{//System.out.println("aaa");//uploadFile();//createFileOnHDFS();//deleteFileOnHDFS();//createDirectoryOnHDFS();//deleteDirectoryOnHDFS();//renameFileOrDirectoryOnHDFS();readHDFSListAll();}/****加载配置文件***/staticConfigurationconf=newConfiguration();/***重名名一个文件夹或者文件()throwsException{FileSystemfs=FileSystem.get(conf);Pathp1=newPath("hdfs://10.2.143.5:9090/root/myfile/my.txt");fs.rename(p1,p2);System.out.println("重命名文件夹或文件成功..");}/*****读取HDFS某个文件夹的所有*文件,并打印****/()throwsException{//流读入和写入InputStreamin=null;//获取HDFS的conf//读取HDFS上的文件系统FileSystemhdfs=FileSystem.get(conf);//使用缓冲流,进行按行读取的功能BufferedReaderbuff=null;//获取日志文件的根目录Pathlistf=newPath("hdfs://10.2.143.5:9090/root/myfile/");//获取根目录下的所有2级子文件目录FileStatusstats[]=hdfs.listStatus(listf);//自定义j,方便查看插入信息intj=0;for(inti=0;i

D. 如何从hdfs缓存中直接读取数据

一、文件的打开1.1、客户端HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为:public FSDataInputStream open(Path f, int bufferSize) throws IOException { return new DFSClient.DFSDataInputStream( dfs.open(getPathName(f), bufferSize, verifyChecksum, statistics));}其中dfs为DistributedFileSystem的成员变量DFSClient,其open函数被调用,其中创建一个DFSInputStream(src, buffersize, verifyChecksum)并返回。synchronized void openInfo() throws IOException { LocatedBlocks newInfo = callGetBlockLocations(namenode, src, 0, prefetchSize); this.locatedBlocks = newInfo; this.currentNode = null;}private static LocatedBlocks callGetBlockLocations(ClientProtocol namenode, String src, long start, long length) throws IOException { return namenode.getBlockLocations(src, start, length);}在DFSInputStream的构造函数中,openInfo函数被调用,其主要从namenode中得到要打开的文件所对应的blocks的信息,实现如下:LocatedBlocks主要包含一个链表的List<LocatedBlock> blocks,其中每个LocatedBlock包含如下信息:· Block b:此block的信息· long offset:此block在文件中的偏移量· DatanodeInfo[] locs:此block位于哪些DataNode上上面namenode.getBlockLocations是一个RPC调用,最终调用NameNode类的getBlockLocations函数。1.2、NameNodeNameNode.getBlockLocations实现如下:

E. 用c++读取hdfs中的文件,使用libhdfs应该怎么配置

建立、关闭与HDFS连接:hdfsConnect()、hdfsConnectAsUser()、hdfsDisconnect()。hdfsConnect()实际上是直接调用hdfsConnectAsUser。

打开、关闭HDFS文件:hdfsOpenFile()、hdfsCloseFile()。当用hdfsOpenFile()创建文件时,可以指定replication和blocksize参数。写打开一个文件时,隐含O_TRUNC标志,文件会被截断,写入是从文件头开始的。

读HDFS文件:hdfsRead()、hdfsPread()。两个函数都有可能返回少于用户要求的字节数,此时可以再次调用这两个函数读入剩下的部分(类似APUE中的readn实现);只有在两个函数返回零时,我们才能断定到了文件末尾。

写HDFS文件:hdfsWrite()。HDFS不支持随机写,只能是从文件头顺序写入。

查询HDFS文件信息:hdfsGetPathInfo()

查询和设置HDFS文件读写偏移量:hdfsSeek()、hdfsTell()

查询数据块所在节点信息:hdfsGetHosts()。返回一个或多个数据块所在数据节点的信息,一个数据块可能存在多个数据节点上。

libhdfs中的函数是通过jni调用JAVA虚拟机,在虚拟机中构造对应的HDFS的JAVA类,然后反射调用该类的功能函数。总会发生JVM和程序之间内存拷贝的动作,性能方面值得注意。

HDFS不支持多个客户端同时写入的操作,无文件或是记录锁的概念。

建议只有超大文件才应该考虑放在HDFS上,而且最好对文件的访问是写一次,读多次。小文件不应该考虑放在HDFS上,得不偿失!

F. Hdfs怎么看副本数

解决方法如下:hdfs的默认副本数量是3个,配置在/etc/hadoop/conf/hdfs-site.xml中 dfs.replication。我们也可以通过hdfs dfs -ls /path/to/file 命令查看hdfs上的文件: 文件类型会在第二列显示副本数量。hdfs中副本数量没有达到配置的数量则会自动进行备份,此时datanode节点之间会大量复制文件,集群性能会暂时受到影响。

G. 如何快速从hdfs上检索需要的文本

A1.该索引叫FsImage, 但没有对外提供api, 参考 附录的链接1整个文件系统的名字空间,包括数据块到文件的映射、文件的属性等,都存储在一个称为FsImage的文件中,这个文件也是放在Namenode所在的本地文件系统上。A2. FS Shell, 详细请参考链接21)hadoop fs -ls 功能跟shell 的 ls 命令相同2)hadoop fs -lsr ls命令的递归版本。类似于Unix中的ls -R。如果要实现复杂的查找功能,可以考虑用下述方式hadoop fs -lsr / | awk/sed/grep …..

H. 如何查看hadoop hdfs文件系统

使用插件——Hadoop-Eclipse-Plugin此方法需要借助Eclipse,插件的安装及使用请参考博文。借助Eclipse只能进行简单的HDFS操作,如查看,删除,上传,下载。以下是操作界面:

I. 如何远程读取CDH的hadoop上的HDFS数据

需要在实例化出来的Configuration中加入HDFS的端口路径即可,其他的除了hadoop的jar包外,任何配置文件都不需要,核心代码如下: static Configuration conf=new Configuration(); static FileSystem fs=null; static{ try { //默认的hadoop的fs.defaultFS的端口号为8020,这里需要跟集群里面的配置一致 conf.set("fs.defaultFS","hdfs://dnode1:8020/"); fs=FileSystem.get(conf); } catch (IOException e) { log.error("初始化FileSystem失败!",e); } }OK,只需要这简单的一行,我们就可以读取HDFS上的数据了


赞 (0)