Hadoop入门系列(四) HDFS的使用与编程

Hadoop入门系列(四) HDFS的使用与编程

内容

  • 使用Hadoop Shell命令操作hdfs文件系统,熟悉分布式文件系统及操作命令。
  • 配置Maven及使用Maven构建的Hadoop工程项目。
  • 使用Hadoop的JAVA api操作hdfs文件系统。

HDFS的使用与编程

HDFS基本命令

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/Java

get下载文件

hadoop fs -get /README.txt  ~
ls -l ~

cat显示文件内容

hadoop fs -cat /README.txt

cp复制文件

hadoop fs -cp /Software/hadoop/hadoop-2.8.3.tar.gz /Software

mv移动文件

hadoop fs -mkdir -p /input
hadoop fs -mv /README.txt /input

使用Java API 访问HDFS文件系统

ApacheMaven是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念
通过一个中央信息管理模块,Maven能够管理项目的构建、发布、报告和文档。即使常用
的Eclipse这样的JavaIDE开发环境,其内部也是通过Maven管理Java项目的。在编程时,
通过Maven的包管理功能可以自动下载程序所需要的jar包,使得开发过程十分方便。

MAVEN 的安装与配置

这里的安装包我已经事先准备好了,所以可以直接从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.java

package 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

  • 如果编译失败,则有可能是源程序有错误,请根据出错
    提示,仔细核对源程序是否正确。
  • 如果打包失败,请检查pom.xml文件是否正确。

下图是成功的结果
在这里插入图片描述

执行程序
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就可以了
在这里插入图片描述
又报错了,这次是README.txt不存在,简单的检查一下
在这里插入图片描述
因为之前Java里面定义的是根目录下的,这里就简单的copy一份就好了
在这里插入图片描述
这里的命令在文章开头就讲了,所以遇到错误不要慌
在这里插入图片描述
成功读出结果
在这里插入图片描述
更多关于Java操作HDFS的实例 可以看东财实验4PDF的附录

使用Python 访问HDFS文件系统

安装python及hdfs包

注意要先执行下面命令,不然可能会显示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,下面的提示是警告你升级pip的,按它说的执行就好了

创建 hdfs 连接实例

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操作的细节 可搜索百度

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
近百节课视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程目录 000 上课方式和课程大纲介绍 001 Linux系统基本知识说明和启动Linux虚拟机 002 配置虚拟机IP地址和如何使用远程工具SecureCRT 003 Linux 环境下基本命令使用及Linux系统中文件的类型和权限 004 Linux 环境下基本命令讲解二 005 Linux 系统远程FTP工具与桌面工具XManager使用和培养三大能力 006 Linux 系统基本命令和基本配置的复习讲解 007 What is Apache Hadoop讲解 008 Hadoop 的发展史和版本发展与区别 009 Hadoop 生态系统介绍讲解 010 Hadoop 生态系统介绍讲解 011 Hadoop 服务讲解 012 HDFS 架构的讲解 013 MapReduce 架构讲解和MapReduce思想原理讲解 014 Apache Hadoop 三种安装部署模式讲解 015 Apache Hadoop 单机(本地)模式安装部署与测试 016 Hadoop 伪分布式安装部署 017 查看Hadoop 日志以及日志的格式和命名组成 018 Hadoop 守护进程服务三种启动停止方式 019 测试环境(HDFS Shell基本命令和运行WordCount程序) 020 结合WordCount实例讲解Hadoop的数据存储和数据计算 021 Hadoop 五大服务与配置文件中的对应关系 022 分析Hadoop 三种启动停止方式的Shell 脚本 023 去除警告【Warning$HADOOP HOME is deprecated。】 024 Hadoop相关命令中的【–config configdir】作用 025 Hadoop 目录结构 026 Eclipse导入Hadoop源码项目 027 HDFS 设计目标 028 HDFS 文件系统架构概述 029 HDFS架构之NameNode和DataNode 030 HDFS 架构讲解总结 031 回顾NameNode和DataNode 032 HDFS架构之Client和SNN功能 033 HDFS Shell 命令命令讲解和演示 034 讲解HDFS 文件读写流程 035 详解HDFS API之FileSystem方式基本操作一 036 HDFS Java API 两种方式介绍及使用URL API详解一 037 使用URL API详解二 038 使用HDFS FileSystem API 详解 039 HDFS文件系统读写流程及HDFS API两种方式读取文件 040 详解HDFS API之FileSystem方式基本操作二 041 讲解分析Configuration和FileSystem类源代码 042 引出HDFS实际应用场景之合并文件和使用getmerge命令并查看实现源码 043 分析getmerge功能实现思路和代码实现 044 演示讲解【百度网盘】功能与HDFS API对应说明 045 HDFS 专题结束和布置HDFS 作业 046 MapReduce架构原理介绍讲解 047 WordCount运行和MapReduce运行基本流程 048 MapReduce执行流程详解 049 MapReduce编程模型讲解及运行PI程序和JobWebUI监控Job运行 050 如何按照【八股文】方式编写MapReduce 051 复习MapReduce编写模型和【八股文】方式编写MapReduce 052 完成MyWordCount程序编写 053 打包运行MyWordCount程序并监控Job运行 054 优化MyWordCount程序和讲解GenericOptionsParser 055 安装Hadoop Eclipse插件并使用Eclipse查看文件系统 056 使用Eclipse运行MyWordCount程序并解决PriviledgedActionException问题 057 MyWordCount 处理过程详解 058 MapReduce提交作业源码跟踪讲解 059 MR作业运行流程整体分析 060 MapReduce执行流程之Shuffle和排序流程以及Map端分析 061 MapReduce执行流程之Reduce端分析 062 MapReduce Shuffle过程讲解和Map Shuffle Phase讲解 063 Reduce Shuffle Phase讲解 064 源代码跟踪查看Map Task和Reduce Task数目的个数 065 回顾MapReduce执行过程以及MapReduce核心 066 Hadoop MapReduce框架数据类型讲解 067

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joker-Tong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值