目錄:
注意1、使用前啟動hadoop
注意3、配置環境
注意4、第一次使用HDFS時
一、hdfs dfs 命令的常用操作(先啟動Hadoop)
二、通過Java API操作HDFS (先啟動Hadoop)
注意:
1、先我們需要啟動Hadoop。轉到hadoop目錄下,啟動hadoop
cd /usr/local/hadoop
./sbin/start-dfs.sh
2、命令是以”./bin/hadoop dfs”開頭的Shell命令方式,實際上有三種shell命令方式(如果配置好環境變量,可以用下邊的第三條命令替換掉本句開頭的加粗部分)。
hadoop fs #適用於任何不同的文件系統,比如本地文件系統和HDFS文件系統
hadoop dfs #只能適用於HDFS文件系統
hdfs dfs #跟hadoop dfs的命令作用一樣,也只能適用於HDFS文件系統
3、配置環境 (注意:hadoop的安裝目錄為/usr/local下)
vim ~/.bashrc #進入編輯,在最前面加入如下單獨一行
export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin
source ~/.bashrc #使設置生效,現在可以在任意目錄中直接使用 hdfs 等命令了
Hadoop系統安裝好以后,第一次使用HDFS時,需要首先在HDFS中創建用戶目錄 :
hdfs dfs -mkdir -p /user/hadoop #由於采用的是hadoop用戶登錄,所以在HDFS中創建一個“/user/hadoop”用戶目錄,本地上傳的文件都會被保存在/user/hadoop下。
一、hdfs dfs命令的常用操作(提前啟動hadoop並配置好PATH環境變量)
1、顯示幫助
./bin/hadoop fs #顯示fs支持的所有命令
./bin/hadoop fs -help put #查看put命令如何使用
2、創建目錄—— -mkdir
hdfs dfs -mkdir test #在用戶目錄(/user/hadoop)下創建一個test目錄
hdfs dfs -mkdir /test #在HDFS的給目錄(/)下創建一個test目錄
hdfs dfs -mkdir -p /test1/test2 #創建多級目錄,加入參數“-p”
3、顯示文件相關信息—— -ls
hdfs dfs -ls #列出HDFS上的所有目錄
hdfs dfs -ls . #顯示HDFS中與當前用戶對應的用戶目錄下的內容
hdfs dfs -ls ./test #顯示HDFS中./test(指定文件)的信息
4、顯示文件內容—— -cat
hdfs dfs -cat ./test.txt #顯示文件內容
5、文件上傳到HDFS中—— -put / -appendToFile / -copyFromLocal
hdfs dfs -put /home/hadoop/下載/file ./ #將本地/home/hadoop/下載/file 文件目錄下的file上傳到HDFS中的./(即user/hadoop)目錄下
hdfs dfs -appendToFile /home/hadoop/下載/file ./ #若文件存在,則追加到file文件末尾
hdfs dfs -copyFromLocal /home/hadoop/下載/file ./ #若HDFS中文件已存在,則覆蓋file原有文件
6、下載HDFS中的文件—— -get / -copyToLocal
hdfs dfs -get ./file /home/hadoop/下載 #HDFS中的file文件下載到本地的 下載 目錄下
hdfs dfs -copyToLocal ./file /home/hadoop/下載/file1 #若本地存在該文件,對文件重命名
7、在HDFS中移動文件—— -mv
hdfs dfs -mv ./file ./test #將file移動到test文件夾下
8、刪除HDFS中的指定文件—— -rm
hdfs dfs -rm ./file #刪除file文件
hdfs dfs -rm -r ./test #刪除test目錄
1、寫入到HDFS(會自動在HDFS中創建一個文件)
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();
}
}
}
2、讀取HDFS中的文件內容
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+"文件不存在");
}
}
}
本博客參考了:
第三章 分布式文件系統HDFS 學習指南 (林子雨) http://dblab.xmu.edu.cn/blog/290-2/