Ubuntu环境下HDFS数据查询的常用方法
HDFS提供了一系列Shell命令,直接在Ubuntu终端中执行即可快速查询数据,适用于日常运维和简单数据查看。
hdfs dfs -ls /查看HDFS根目录下的文件和文件夹;若需递归查看子目录,可添加-R参数(如hdfs dfs -lsr /user/hadoop)。hdfs dfs -cat /path/to/file直接输出文件全部内容(如hdfs dfs -cat /user/hadoop/output/part-r-00000);若文件较大,可通过管道结合head(查看前5行:hdfs dfs -cat /file | head -5)或tail(查看后5行:hdfs dfs -cat /file | tail -5)限制输出行数。hdfs dfs -find / -name "filename"从HDFS根目录精确搜索文件;若需在指定目录(如/user/hadoop/logs)下搜索名称包含“error”的文件,可使用通配符:hdfs dfs -find /user/hadoop/logs -name "*error*"。hdfs dfs -du -h /path以人类可读格式(KB、MB、GB)显示目录/文件大小;hdfs dfs -count /path统计目录下的文件夹数量、文件数量及总字节数(结果依次为“目录数 文件数 总大小 路径”)。若需要将数据查询集成到应用程序中,可通过Hadoop Java API实现,支持灵活的数据处理(如过滤、转换)。
<dependency>标签,引入hadoop-client库,版本需与集群一致)。Configuration对象,设置HDFS访问地址(conf.set("fs.defaultFS", "hdfs://localhost:9000"));FileSystem.get(conf)获取FileSystem实例(连接HDFS);fs.open(new Path("/path/to/file"))打开文件输入流(返回FSDataInputStream对象);IOUtils.copyBytes(in, System.out, 4096, false)直接输出到控制台,或逐行读取(如用BufferedReader包装输入流));in.close()和fs.close())。import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.io.InputStream;
public class HDFSQuery {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
FileSystem fs = FileSystem.get(conf);
InputStream in = fs.open(new Path("/user/hadoop/test.txt"));
IOUtils.copyBytes(in, System.out, 4096, false);
IOUtils.closeStream(in);
fs.close();
}
}
HDFS提供了Web可视化界面,方便通过浏览器查看文件系统和数据(无需安装额外工具)。
http://localhost:50070(Hadoop 2.x版本)或http://localhost:9870(Hadoop 3.x版本),进入HDFS NameNode Web界面。WebHDFS是Hadoop提供的RESTful API,支持通过HTTP请求访问HDFS,适用于Python、JavaScript等非Java语言。
http://<namenode-host>:50070/webhdfs/v1/path?op=OPEN(替换<namenode-host>为NameNode地址,/path为目标文件路径);requests)发送请求并解析结果)。