当前位置:   article > 正文

Hadoop的Windows环境准备

Hadoop的Windows环境准备

一、将Hadoop传输到Windows中

1、备份副本

cp -r /opt/softs/hadoop3.1.3/ /opt/softs/hadoop3.1.3_temp

2、删除备份的share目录

cd /opt/softs/hadoop3.1.3_temp
rm -rf share/

3、下载到Windows中

重命名去掉_temp 

4、删除备份文件

rm -rf /opt/softs/hadoop3.1.3_temp

二、配置Windows环境

1、将Windos依赖目录下的bin目录中的全部文件,复制粘贴到hadoop3.1.3的bin目录下,有重复直接覆盖

2、双击winutils.exe,如果有窗体一闪而过,说明成功,如果失败则安装微软运行库

3、将hadoop.dll复制一份到C:\Windows\System32目录中

4、配置环境变量

(1)控制面板查找“高级系统设置”,打开后点击“环境变量”

(2)选择“系统变量”的“新建”输入如下信息:

(3)选中“系统变量”的Path选择“编辑”后选择“新建”,输入如下信息

D:\softs\dashuju\bigdata\hadoop3.1.3   //输入你自己的地址

三、创建Java的Maven项目

idea版本:2023.2.5

1、新建项目

创建好后目录如下:

2、添加项目依赖

  1. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
  2. <dependency>
  3. <groupId>org.apache.hadoop</groupId>
  4. <artifactId>hadoop-common</artifactId>
  5. <version>3.1.3</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
  8. <dependency>
  9. <groupId>org.apache.hadoop</groupId>
  10. <artifactId>hadoop-hdfs</artifactId>
  11. <version>3.1.3</version>
  12. </dependency>
  13. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
  14. <dependency>
  15. <groupId>org.apache.hadoop</groupId>
  16. <artifactId>hadoop-client</artifactId>
  17. <version>3.1.3</version>
  18. </dependency>

3、编写代码

  1. package cn.edu.just.hdfs;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.*;
  4. import org.apache.hadoop.fs.permission.FsPermission;
  5. import org.apache.hadoop.io.IOUtils;
  6. import org.junit.After;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9. import java.io.IOException;
  10. import java.net.URI;
  11. import java.net.URISyntaxException;
  12. /**
  13. *调用hdfs的Java Api
  14. */
  15. public class hdfsApiClient {
  16. //文件系统对象
  17. FileSystem fileSystem = null;
  18. /**
  19. * 初始化hdfs文件系统
  20. * @Before:在具体方法前会调用被注解的方法
  21. */
  22. @Before
  23. public void init() throws URISyntaxException, IOException, InterruptedException {
  24. //创建文件系统配置对象
  25. Configuration conf = new Configuration();
  26. //创建文件系统对象
  27. fileSystem = FileSystem.get(new URI("hdfs://bigdata03:8020"), conf, "root");
  28. System.out.println("hdfs文件系统初始化成功!");
  29. }
  30. /**
  31. * 创建hdfs目录
  32. */
  33. @Test
  34. public void createPath() throws IOException {
  35. if (fileSystem != null) {
  36. boolean result = fileSystem.mkdirs(new Path("/hdfs_api"));
  37. if (result) {
  38. System.out.println("创建目录成功");
  39. }else {
  40. System.out.println("创建目录失败");
  41. }
  42. }
  43. }
  44. /**
  45. * 删除目录或者文件
  46. */
  47. @Test
  48. public void deletePath() throws IOException {
  49. if (fileSystem != null) {
  50. Path deletePath = new Path("/hdfs_api");
  51. //判断hdfs上是否存在该目录
  52. if (fileSystem.exists(deletePath)){
  53. /**
  54. * 目录存在,调用delete(Path f, boolean recursive)方法进行删除
  55. * 第一个参数是要删除的目录的路径
  56. * 第二个参数表示:是否要递归删除
  57. */
  58. boolean deleteResult = fileSystem.delete(deletePath, false);
  59. System.out.println(deleteResult == true ? "删除目录成功":"删除目录失败");
  60. }else {
  61. System.out.println("要删除的目录在hdfs上不存在");
  62. }
  63. }
  64. }
  65. /**
  66. * 在hdfs上创建一个文件,并写入指定的内容
  67. */
  68. @Test
  69. public void createHdfsFile() throws IOException {
  70. //获取数据输出流对象
  71. FSDataOutputStream fsDataOutputStream =
  72. fileSystem.create(new Path("/api_file.txt"));
  73. //定义要输出的文件的内容
  74. String line = "Hello bigdata";
  75. //将指定内容写入文件
  76. fsDataOutputStream.write(line.getBytes());
  77. //对数据输出流对象进行刷新
  78. fsDataOutputStream.flush();
  79. //关闭输出流对象
  80. fsDataOutputStream.close();
  81. }
  82. /**
  83. * 先运行一下createPath,确保hdfs上目录存在
  84. * 修改hdfs上的文件的路径和名称
  85. */
  86. @Test
  87. public void moveHdfsFile() throws IOException {
  88. //文件的原路径
  89. Path src = new Path("/api_file.txt");
  90. //文件的新路径
  91. Path dst = new Path("/hdfs_api/api_file_new.txt");
  92. boolean moveResult = fileSystem.rename(src, dst);
  93. if (moveResult){
  94. System.out.println("文件路径修改成功");
  95. }else {
  96. System.out.println("文件路径修改失败");
  97. }
  98. }
  99. /**
  100. * 读取hdfs上的文件内容
  101. */
  102. @Test
  103. public void readHdfsFile() throws IOException {
  104. //获取数据输入流对象
  105. FSDataInputStream fsDataInputStream =
  106. fileSystem.open(new Path("/hdfs_api/api_file_new.txt"));
  107. //通过IO工具类读取文件中的数据
  108. //System.out代表队是PrintStream对象,该对象是OutputStream类的间接子类
  109. IOUtils.copyBytes(fsDataInputStream,System.out,2048,false);
  110. //换行
  111. System.out.println();
  112. }
  113. /**
  114. * 从本地上传文件到hdfs上
  115. */
  116. @Test
  117. public void uploadFile() throws IOException {
  118. //本地文件的路径
  119. Path src = new Path("E:\\centos&&hadoop\\words.txt");
  120. //文件上传到到hdfs的路径
  121. Path dst = new Path("/hdfs_api");
  122. //文件上传成功后,本地文件是否删除,默认为false
  123. boolean delSrc = true;
  124. //上传文件是否覆盖,默认为true
  125. boolean overwrite = false;
  126. fileSystem.copyFromLocalFile(delSrc,overwrite,src,dst);
  127. }
  128. /**
  129. *从hdfs上下载文件到本地
  130. */
  131. @Test
  132. public void downloadFile() throws IOException {
  133. //在hdfs上的文件
  134. Path src = new Path("/hdfs_api/api_file_new.txt");
  135. //文件的下载路径
  136. Path dst = new Path("E:\\centos&&hadoop\\api_file_new.txt");
  137. //文件下载后,是否删除hdfs上的源文件
  138. boolean delSrc = false;
  139. // false:下载的文件会存在crc校验文件
  140. // true:不会存在crc校验文件
  141. boolean useRawLocalFileSystem = false;
  142. fileSystem.copyToLocalFile(src, dst);
  143. }
  144. /**
  145. * 查看hdfs上的文件信息
  146. */
  147. @Test
  148. public void queryHdfsFileInfo() throws IOException {
  149. //查询的起始路径
  150. Path path = new Path("/");
  151. //是否递归查询
  152. boolean recursive = true;
  153. //获取迭代器
  154. RemoteIterator<LocatedFileStatus> locatedFileStatusRemoteIterator =
  155. fileSystem.listFiles(path, recursive);
  156. //进行遍历输出
  157. while ( locatedFileStatusRemoteIterator.hasNext()) {
  158. //获取迭代器中需要迭代的元素
  159. LocatedFileStatus next = locatedFileStatusRemoteIterator.next();
  160. //获取文件路径
  161. Path filePath = next.getPath();
  162. System.out.println("文件的路径是:"+filePath);
  163. //获取文件的权限
  164. FsPermission permission = next.getPermission();
  165. System.out.println("文件的权限是:"+permission);
  166. //获取文件的所属用户
  167. String owner = next.getOwner();
  168. System.out.println("文件的所属用户是:"+owner);
  169. //获取文件的所属用户的用户组
  170. String group = next.getGroup();
  171. System.out.println("文件的所属用户的用户组是:"+group);
  172. //获取文件的副本数
  173. short replication = next.getReplication();
  174. System.out.println("文件的副本数是:"+replication);
  175. //获取文件的块大小,单位是字节
  176. long blockSize = next.getBlockSize();
  177. System.out.println("文件的块大小是:"+blockSize/1024/1024+"MB");
  178. System.out.println("--------------------------------------------------------");
  179. }
  180. }
  181. /**
  182. * 关闭文件系统对象
  183. * @After:在具体方法执行完毕后会调用被注解的方法
  184. */
  185. @After
  186. public void close() throws IOException {
  187. if (fileSystem != null) {
  188. fileSystem.close();
  189. System.out.println("hdfs文件系统已关闭!");
  190. }
  191. }
  192. }

运行前开启hadoop集群,在NameNode节点开启hdfs(start-dfs.sh)

可打开NameNode的web服务网址,便于后续查看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/684287
推荐阅读
相关标签
  

闽ICP备14008679号