mkdir創建文件目錄
hadoop fs -mkdir -p /Software/hadoop/
hadoop fs -mkdir -p hdfs://localhost:9000/Software/Java/put上傳文件
hadoop fs -put ~/hadoop-2.8.3.tar.gz /Software/hadoop/
hadoop fs -put ~/jdk-8u172-linux-x64.rpm /Software/Java/
hadoop fs -put /usr/local/hadoop2/README.txt /ls顯示目錄結構
hadoop fs -ls /Software/chmod修改文件權限
hadoop fs -chmod 600 /Software/hadoop
hadoop fs -ls /Software/rm刪除文件
hadoop fs -rm /Software/Java/*rmdir刪除目錄
hadoop fs -rmdir /Software/Javaget下載文件
hadoop fs -get /README.txt ~
ls -l ~cat顯示文件內容
hadoop fs -cat /README.txtcp複製文件
hadoop fs -cp /Software/hadoop/hadoop-2.8.3.tar.gz /Softwaremv移動文件
hadoop fs -mkdir -p /input
hadoop fs -mv /README.txt /input
使用Java API 訪問HDFS文件系統ApacheMaven是一套軟體工程管理和整合工具。基於工程對象模型(POM)的概念
MAVEN 的安裝與配置
通過一個中央信息管理模塊,Maven能夠管理項目的構建、發布、報告和文檔。即使常用
的Eclipse這樣的JavaIDE開發環境,其內部也是通過Maven管理Java項目的。在編程時,
通過Maven的包管理功能可以自動下載程序所需要的jar包,使得開發過程十分方便。這裡的安裝包我已經事先準備好了,所以可以直接從sudo tar開始執行
cd
curl -O http://mirrors.shu.edu.cn/apache/maven/binaries/apache-maven-3.2.2-bin.tar.gz
sudo tar -xvf ./apache-maven-3.2.2-bin.tar.gz -C /usr/local/
echo 'export MAVEN_HOME=/usr/local/apache-maven-3.2.2
> export MAVEN_OPTS="$MAVEN_OPTS -Xms256m -Xmx512m -XX:ReservedCodeCacheSize=64m"
> export PATH=${PATH}:${MAVEN_HOME}/bin' > ~/maven.sh
sudo mv ~/maven.sh /etc/profile.d/
source /etc/profile.d/maven.sh
mvn --version使用 Maven 阿里雲中央倉庫
由於Maven 預設使用國外的中央倉庫,使得下載依賴包時十分緩慢,因此,需要將中央倉庫配置為國內的阿里雲中央倉庫。
打開maven的配置文件sudo gedit /usr/local/apache-maven-3.2.2/conf/settings.xml在這裡插入圖片描述
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>在這裡插入圖片描述使用 Maven 構建Java項目
在本實驗中我們將要開發一個讀取並顯示hdfs文件系統根目錄下的README.txt文件
的程序。
為此我們採用Maven構建Java項目
使用Maven只要學習很少的命令就可以創
建和管理Java項目
在命令行下執行以下代碼,以創建Java項目。cd ~
mvn archetype:generate -DgroupId=edu.dufe.hdfstest -DartifactId=HdfsCatREADME -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
我們可以使用tree 命令查看一下目錄的結構**如果沒有下載過tree命令的用下面的語句下載**
sudo yum -y install tree
上圖就是剛剛創建的java項目的結構了
項目目錄下pom.xml文件,它描述了整個項目的信息,一切從目錄結構,項目的插件,
項目依賴,如何構建這個項目等。App.java是項目源程序AppTest.java是項目測試源程序。
在本實驗中我們將要開發一個讀取並顯示hdfs文件系統根目錄下的README.txt文件
的程序因此需要將App.java名稱重命名為HdfsCatREADME.java並在pom.xml中添加與
hadoop2.8.3的依賴項。為此執行以下命令。
修改源程序文件名cd ~/HdfsCatREADME/src/main/java/edu/dufe/hdfstest/
mv ./App.java ./HdfsCatREADME.java
cd ~/HdfsCatREADME然後在CentOS7桌面上,使用gedit打開HdfsCatREADME/pom.xml文件。將以下紅色內
容添加到文件的對應位置處。gedit ~/HdfsCatREADME/pom.xml下面是整個文件修改後的內容
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.dufe.hdfstest</groupId>
<artifactId>HdfsCatREADME</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>HdfsCatREADME</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-mapreduce-client-core</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-auth</artifactId>
<version>2.8.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>HdfsCatREADME</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>edu.dufe.hdfstest.HdfsCatREADME</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>lib/slf4j-api-1.7.13.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>接下裡編寫Java源程序
gedit src/main/java/edu/dufe/hdfstest/HdfsCatREADME.javapackage edu.dufe.hdfstest;
import java.io.IOException;
import java.net.URI;
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 HdfsCatREADME
{
public static void main(String[] args) {
try {
String dsf = "hdfs://127.0.0.1:9000/README.txt";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dsf),conf);
FSDataInputStream hdfsInStream = fs.open(new Path(dsf));
byte[] ioBuffer = new byte[1024];
int readLen = hdfsInStream.read(ioBuffer);
while(readLen!=-1)
{
System.out.write(ioBuffer, 0, readLen);
readLen = hdfsInStream.read(ioBuffer);
}
hdfsInStream.close();
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 Maven 編譯打包Java項目項目開發完成後,我們就可以編譯、打包項目了,為此執行以下命令。
cd ~/HdfsCatREADME
mvn clean compile
mvn clean package當命令執行後,顯示出[INFO] BUILD SUCCESS內容時,說明編譯打包成功。這裡
如果編譯失敗,則有可能是源程序有錯誤,請根據出錯
在~/HdfsCatREADME目錄下就會多出一個target的文件夾, 並在此文件夾下有編譯打包好
的目標程序 HdfsCatREADME.jar
提示,仔細核對源程序是否正確。下圖是成功的結果
執行程序cd ~/HdfsCatREADME
java -jar ./target/HdfsCatREADME.jar #執行程序這裡我產生了如下的報錯
Call From HadoopMaster/192.168.206.15 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒絕連接;仔細一看 拒絕連接,是因為我重啟虛擬機之後尚未啟動hadoop 這裡只需要start-dfs.sh就可以了
使用Python 訪問HDFS文件系統安裝python及hdfs包
又報錯了,這次是README.txt不存在,簡單的檢查一下
因為之前Java裡面定義的是根目錄下的,這裡就簡單的copy一份就好了
這裡的命令在文章開頭就講了,所以遇到錯誤不要慌
成功讀出結果
更多關於Java操作HDFS的實例 可以看東財實驗4PDF的附錄注意要先執行下面命令,不然可能會顯示python34不存在
官方的rpm repository提供的rpm包往往是很滯後的,裝上了 epel 之後,就相當於添加了一個第三方源yum install epel-release安裝python與hdfs包
sudo yum install python34 #安裝python3
sudo yum install python34-pip #安裝包管理工具
sudo pip3.4 install hdfs #安裝hdfs包創建 hdfs 連接實例
可以看到我們已經安裝了hdfs,下面的提示是警告你升級pip的,按它說的執行就好了python的操作非常簡單
先創建client連接
然後通過client對象來操作hdfs ,下面的代碼創建了文件夾並且 列舉了根目錄的內容
permission參數是對要創建的文件夾設置權限#創建hdfs連接實例
import sys
import hdfs
client = hdfs.Client("http://127.0.0.1:50070")
#創建文件目錄並列表
client.makedirs("/data/tmp",permission=755)
client.list("/")更多python操作的細節 可搜索百度