shell访问
将在 /middle 目录下建立目录 weibo
hadoop fs -mkdir /middle/weibo
上传文件 weibo.txt 到 weibo 目录下
hadoop fs -put weibo.txt /middle/weibo/
hadoop fs -copyFromLocal weibo.txt /middle/weibo/
查看 weibo.txt 文件内容
hadoop fs -text /middle/weibo/weibo.txt
hadoop fs -cat /middle/weibo/weibo.txt
hadoop fs -tail /middle/weibo/weibo.txt
把 weibo.txt 文件复制到本地
hadoop fs -get /middle/weibo/weibo.txt
hadoop fs -copyToLocal /middle/weibo/weibo.txt
删除 weibo.txt 文件
hadoop fs -rm /middle/weibo/weibo.txt
删除/middle/weibo文件夹
hadoop fs -rmr /middle/weibo
显示 /middle 目录下的文件
hadoop fs -ls /middle
两个 HDFS 集群之间传输数据,默认情况下 distcp 会跳过目标路径下已经存在的文件。
hadoop distcp hdfs://cloud004:9000/weather hdfs://cloud0042:9000/middle
两个 HDFS 集群之间传输数据,覆盖现有的文件使用overwrite。
hadoop distcp -overwrite hdfs://cloud004:9000/weather hdfs://cloud0042:9000/middle
两个 HDFS 集群之间传输数据,更新有改动过的文件使用update。
hadoop distcp -update hdfs://cloud004:9000/weather hdfs://cloud0042:9000/middle
查看正在运行的 Job
hadoop job -list
关闭正在运行的 Job
hadoop job -kill job_1432108212572_0001
检查 HDFS 块状态,查看是否损坏
hadoop fsck /
检查 HDFS 块状态,并删除损坏的块。
hadoop fsck / -delete
检查 HDFS 状态,包括 DataNode 信息。
hadoop dfsadmin -report
Hadoop 进入安全模式
hadoop dfsadmin -safemode enter
Hadoop 离开安全模式
hadoop dfsadmin -safemode leave
平衡集群中的文件
sbin/start-balancer.sh
javaAPI访问
package com.hadoop.base; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.FileUtil; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hdfs.DistributedFileSystem; import org.apache.hadoop.hdfs.protocol.DatanodeInfo; public class Test { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub mkdir(); rmdir(); ListAllFile(); copyToHDFS(); getFile(); getHDFSNodes(); getFileLocal(); } //获取文件系统 public static FileSystem getFileSystem() throws IOException, URISyntaxException { //读取配置文件 Configuration conf = new Configuration(); //返回默认文件系统 如果在 Hadoop集群下运行,使用此种方法可直接获取默认文件系统 //FileSystem fs = FileSystem.get(conf); //指定的文件系统地址 URI uri = new URI("hdfs://master:9000"); //返回指定的文件系统 如果在本地测试,需要使用此种方法获取文件系统 FileSystem fs = FileSystem.get(uri,conf); return fs; } //创建文件目录 public static void mkdir() throws Exception { //获取文件系统 FileSystem fs = getFileSystem(); //创建文件目录 fs.mkdirs(new Path("hdfs://master:9000/middle/weibo")); //释放资源 fs.close(); } //删除文件或者文件目录 public static void rmdir() throws Exception { //返回FileSystem对象 FileSystem fs = getFileSystem(); //删除文件或者文件目录 delete(Path f) 此方法已经弃用 fs.delete(new Path("hdfs://master:9000/middle/weibo"),true); //释放资源 fs.close(); }//获取目录下的所有文件 public static void ListAllFile() throws IOException, URISyntaxException{ //返回FileSystem对象 FileSystem fs = getFileSystem(); //列出目录内容 FileStatus[] status = fs.listStatus(new Path("hdfs://master:9000/middle/weibo/")); //获取目录下的所有文件路径 Path[] listedPaths = FileUtil.stat2Paths(status); //循环读取每个文件 for(Path p : listedPaths){ System.out.println(p); } //释放资源 fs.close(); } //文件上传至 HDFS public static void copyToHDFS() throws IOException, URISyntaxException{ //返回FileSystem对象 FileSystem fs = getFileSystem(); //源文件路径是Linux下的路径,如果在 windows 下测试,需要改写为Windows下的路径,比如D://hadoop/data/weibo.txt Path srcPath = new Path("/home/hadoop/data/weibo.txt"); // 目的路径 Path dstPath = new Path("hdfs://master:9000/middle/weibo"); //实现文件上传 fs.copyFromLocalFile(srcPath, dstPath); //释放资源 fs.close(); } //从 HDFS 下载文件 public static void getFile() throws IOException, URISyntaxException{ //返回FileSystem对象 FileSystem fs = getFileSystem(); //源文件路径 Path srcPath = new Path("hdfs://master:9000/middle/weibo/weibo.txt"); //目的路径是Linux下的路径,如果在 windows 下测试,需要改写为Windows下的路径,比如D://hadoop/data/ Path dstPath = new Path("/home/hadoop/data/"); //下载hdfs上的文件 fs.copyToLocalFile(srcPath, dstPath); //释放资源 fs.close(); } //获取 HDFS 集群节点信息 public static void getHDFSNodes() throws IOException, URISyntaxException{ //返回FileSystem对象 FileSystem fs = getFileSystem(); //获取分布式文件系统 DistributedFileSystem hdfs = (DistributedFileSystem)fs; //获取所有节点 DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats(); //循环打印所有节点 for(int i=0;i< dataNodeStats.length;i++){ System.out.println("DataNode_"+i+"_Name:"+dataNodeStats[i].getHostName()); } } //查找某个文件在 HDFS 集群的位置 public static void getFileLocal() throws IOException, URISyntaxException{ //返回FileSystem对象 FileSystem fs = getFileSystem(); //文件路径 Path path = new Path("hdfs://master:9000/middle/weibo/weibo.txt"); //获取文件目录 FileStatus filestatus = fs.getFileStatus(path); //获取文件块位置列表 BlockLocation[] blkLocations = fs.getFileBlockLocations(filestatus, 0, filestatus.getLen()); //循环输出块信息 for(int i=0;i< blkLocations.length;i++){ String[] hosts = blkLocations[i].getHosts(); System.out.println("block_"+i+"_location:"+hosts[0]); } } }