IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 学习 HDFS的JavaAPI操作 -> 正文阅读

[大数据]学习 HDFS的JavaAPI操作

一、HDFS的JavaAPI操作

之前我们都是用HDFS Shell来操作HDFS上的文件,现在我们通过编程的形式操作HDFS,主要就是用HDFS中提供的JavaAPI构造一个访问客户对象,然后通过客户端对象对HDFS上的文件进行相应的操作(新建、上传、下载、删除等)。

1、常用的类

(1)Configuration:该类的对象封装了客户端或服务器的配置

(2)FileSystem:该类的对象是一个文件系统对象,通过该对象调用一些他的方法,从而实现对文件的操作。

mkdirs(Path f)

新建子目录

copyFromLocalFile(Path

src,Path dst)

从本地磁盘复制文件到HDFS

copyToLocalFile(Path

src,Path dst)

从HDFS复制文件到把我弄得磁盘

2.HDFSAPI开发的步骤

(1)在HDFS上创建文件夹

? ? ?A.设置客户端身份,以具备权限在hdfs上进行操作

? ? ? ? System.setProperty("HADOOP_USER_NAME","root”);

? ? ?B.与HDFS建立连接

? ? ? ? ?a.创建配置对象实例

      Configuration conf = new Configuration();

? ? ? ? ?b.设置操作的文件系统是hdfs,并且指定hdfs的操作地址

      conf.set("fs.defaultFS","hdfs://192.168.204.125:9000");

? ? ? ? ?c.创建FileSystem对象

? ? ? ? ? ?FileSystem fs = FileSystem.get(conf);

? ? ? ? ?d.断开与HDFS平台的连接

? ? ? ? ? ? fs.close();

? ? ?C.判断要创建目录是否存在,不存在则创建

?(2)在HDFS上传文件

?(3)从HDFS上下载文件

?(4)从HDFS上删除文件

在IDEA中的实例:

?需要注意的以下几点:

1)导入Configuration时必须是hadoop.conf.Configuration

? ? ?导入FileSystem时必须是hadoop.fs.FileSystem

? ? ?导入Path时必须是hadoop.fs.Path

2)"fs.defaultFS","hdfs://192.168.204.125:9000"此处可以在虚拟机中配置hadoop下的core-site.xml文件里查看

?注意这里的master1即192.168.204.125(linux下可以直接写master1主机名,是因为配置hadoop时做了hosts映射,而IDEA中没有做hosts映射,所以必须写192.168.204.125这样的主机ip)

3)"hdfs://(192.168.204.125):9000"此处的ip是虚拟机中的master主机的ip

IDEA中运行错误:

1)首先在电脑本地下载一个Hadoop安装包,后解压,将解压后的hadoop-2.4.1、winutils.exe?和hadoop.dll这三个文件放到同一目录下

2)将log4j.properties文件粘贴到IDEA中创建的类的对应src下

3)将winutils.exe?和hadoop.dll放到解压好的hadoop-2.4.1的bin目录下

4)配置hadoop坏境变量:

此电脑----属性----高级系统设置----环境变量----新建:

变量值必须是你所解压的hadoop-2.4.1的路径

在系统变量中找path变量将hadoop引用进去

path----编辑----新建----添加一行:%HADOOP_HOME%\bin?

5)?Windows键+R:打开cmd,输入hadoop,后输入hadoop version

?hadoop环境变量配置完成

6)重启IDEA后重新运行

7)依旧报错:

a.查看虚拟机中hadoop是否启动,jps后进程是否都有

b.若没有namenode或datanode:进去到hadoop目录下的dfs下,删除dfs(rm -rf)下的所有文件,后命令行中输入hdfs namenode -format(格式化hdfs命令),重新启动hadoop:start-all.sh

c.如果是格式化重启hadoop后是有namenode没有datanode或者有datanode没有namenode这种情况时:

原因:

可能是当我们使用hadoop?namenode -format格式化namenode时,会在namenode数据文件夹(这个文件夹为自己配置文件中dfs.name.dir的路径)中保存一个current/VERSION文件,记录clusterID,datanode中保存的current/VERSION文件中的clustreID的值是上一次格式化保存的clusterID,这样,datanode和namenode之间的ID不一致。

解决方法:

在dfs/name目录下找到一个current/VERSION文件,记录clusterID并复制,后dfs/data目录下找到一个current/VERSION文件,将其中clustreID的值替换成刚刚复制的clusterID的值即可;重新启动hadoop,jps就有了

d.继续报错:

?

这样的错误,首先可以打开192.168.204.125:50070网址查看Live Nodes

?

若显示为1,则证明slave1和slave2中node进程没有

解决方法:

在master1主机中重新给slave1和slave2中传输即可?

?重新启动hadoop,然后jps就有了

然后重新启动IDEA,重新运行

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:16:33  更:2021-08-03 11:18:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 21:45:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码