常用的HDFS操作
首先,把Hadoop命令加入到PATH环境变量中,直接通过start-dfs.sh开启Hadoop,也可以直接通过hdfs命令访问HDFS中的内容,方便平时的操作。
配置PATH环境变量
vim ~/.bashrc,进入编辑,在最前面加入如下单独一行
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
source ~/.bashrc 使设置生效,现在可以在任意目录中直接使用 hdfs 等命令了
启动Hadoop:start-dfs.sh
Hadoop系统安装好以后,第一次使用HDFS时,需要首先在HDFS中创建用户目录 :
hdfs dfs -mkdir -p /user/hadoop,由于采用的是hadoop用户登录,所以在HDFS中创建一个“/user/hadoop”用户目录,本地上传的文件都会被保存在/user/hadoop下。
上传文件: -put
本地 /home/Hadoop/temp 文件目录下的file上传到HDFS中的/user/hadoop目录下
hdfs dfs -put /home/Hadoop/temp/file ./(“./”表示当前目录,即/user/hadoop目录)
-appendToFile:若文件存在,则追加到file文件末尾
hdfs dfs -appendToFile /Home/hadoop/temp/file ./
-copyFromLocal:若HDFS中文件已存在,则覆盖file原有文件
hdfs dfs -copyFromLocal -f /home/Hadoop/temp/file ./
下载文件 -get
HDFS中的file文件下载到本地的temp目录下
hdfs dfs -get ./file /home/Hadoop/temp
-copyToLocal:若本地存在该文件,对文件重命名
hdfs dfs -copyToLocal ./file /home/Hadoop/temp/file1
显示文件相关信息:-ls
显示HDFS中指定的文件的读写权限、大小、创建时间等信息
hdfs dfs -ls ./file
输出test目录下所有文件相关信息
hdfs dfs -ls -R ./test
显示文件内容:-cat
hdfs dfs -cat ./file
在HDFS中移动文件:-mv
hdfs dfs -mv ./file ./test :将file移动到test文件夹下
删除HDFS中的指定文件:-rm
hdfs dfs -rm ./file:删除指定文件
hdfs dfs -rm -r ./test:删除test目录
关闭Hadoop:stop-dfs.sh
通过Java API操作HDFS(要先启动Hadoop)
写入到HDFS(会自动在HDFS中创建一个文件)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class Write { public static void main(String[] args) { Configuration conf =new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem"); String filename="test";//要写入的文件名 byte[] buff="hello World!hh\n".getBytes();//要写入的内容 try { FileSystem fs=FileSystem.get(conf); FSDataOutputStream os=fs.create(new Path(filename)); os.write(buff, 0, buff.length); System.out.println("内容成功写入到"+filename); os.close(); fs.close(); } catch (IOException e) { e.printStackTrace(); } } }
读取HDFS中的文件内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import java.io.BufferedReader; import java.io.InputStreamReader; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class Read { public static void main(String[] args) { Configuration conf =new Configuration(); conf.set("fs.defaultFS", "hdfs://localhost:9000"); conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem"); Path filename=new Path("test");//要读取的文件名 try { FileSystem fs=FileSystem.get(conf); FSDataInputStream getIt=fs.open(filename); BufferedReader r=new BufferedReader(new InputStreamReader(getIt)); String content=null; while((content=r.readLine())!=null)//一行一行的读,直到为空 { System.out.println(content); } r.close();//关闭文件 fs.close();//关闭HDFS }catch(Exception e) { e.printStackTrace(); System.out.println(filename+"文件不存在"); } } }