windows 系统下操作hdfs 以及shell编程规范
以上是 在node1主机上 有一个 1.txt文件 分成三块 备份副本数为2
Node1 : blk-1 ,blk-3
Node2 :blk-2,blk-1
Node3 :blk-3,blk-2
1.请求下载文件
2.确认是否具有操作文件的权限
3.Namenode 视情况分批返回该文件的元数据信息或者全部元数据信息。
4.在该批次中,客户端拉取数据是并行的,分别启动多线程提取指定的dn上拉取数据。
5.当客户端吧该文件的所有数据块block拉取下来之后,需要按照块的顺序进行拼接(merge)形成文件的最终样子。 【blk-1,blk-2,blk-3】
6.在拉取过程中 内部会使用crc进行校验。
Windom系统下 安装hadoop 并通过java代码操作hdfs (相当于windows 系统下 hdfs client)
1.首先配置全局JAVA_HOME ; PATH ;HADOOP_HOME;PATH (windows系统下安装hadoop时,给的有一个hadoop 包解压即可。已上传百度云)
2.查看hadoop是否安装成功 hadoop ;hadoop version
3.Hadoop version 不成功 ,一般是因为 到hadoop 安装目录下 etc/hadoop/hadoop-env.cmd 找到set JAVA_HOME=D:\PROGRA~1\Java\jdk1.8.0_141 即可。
代码:
创建 Maven 工程,引入 pom 依赖
org.apache.hadoop
hadoop-common
2.7.4
org.apache.hadoop
hadoop-hdfs
2.7.4
org.apache.hadoop
hadoop-client
2.7.4
配置maven仓库。配一下 (视频中没配)
创建包 cn.itcast
创建类 HdfsClient 主方法
直接使用 pom中 引入的 FIleSystem.get(new URI(“hdfs://note1:9000”),conf,”root”)
public class HDFSClient {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
// conf.set(“fs.defaultFS”,“hdfs://note1:9000”);
FileSystem fs = FileSystem.get(new URI(“hdfs://note1:9000”), conf, “root”);
fs.mkdirs(new Path("/CreateByJava"));
fs.copyFromLocalFile(new Path(“d://1.txt”),new Path("/CreateByJava"));
fs.copyToLocalFile(false,new Path("/CreateByJava/1.txt"),new Path(“e:\”),false);
fs.close();
}
}
在上传可以成功,但下载是个空文件 ,而且报一下错误:
Exception in thread “main” ExitCodeException exitCode=-1073741515:
at org.apache.hadoop.util.Shell.runCommand(Shell.java:585)
at org.apache.hadoop.util.Shell.run(Shell.java:482)
红字错误:是因为缺失 api-ms-win-crt-string-l1-1-0.dll 丢失
然后在网上查找了:并下载 放置到了 c:\Windows\SysWOW64 下 并win+r 输入:regsvr32 c:\Windows\SysWOW64\api-ms-win-crt-string-l1-1-0.dll
shell规范化编程:
- 定义跟本次shell运行相关的软件环境变量
- 定义本次shell当中的一些常量变量 比如:路径 时间 类名 属性等等 便于后期集中维护
- 本次shell的核心逻辑(要结合流程控制 做精准判断)
举例:创建一个.sh 文件脚本 粘贴一下代码:
*#!/bin/bash
#set java env
export JAVA_HOME=/export/servers/jdk1.8.0_65
export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= J