其他分享
首页 > 其他分享> > 大数据-hdfs技术

大数据-hdfs技术

作者:互联网

hadoop

理论基础:GFS----HDFS;MapReduce---MapReduce;BigTable----HBase

项目网址:http://hadoop.apache.org/

下载路径:https://archive.apache.org/dist/hadoop/common/

主要模块

分布式文件系统hdfs

Hadoop Distributed File System文件管理工具,实现文件系统与硬盘的解耦,执行MapReduce计算的基础

hdfs中文件默认拆分为默认128M的块block(除了最后一块),通过偏移量确认块的顺序,每个块默认3个备份

文件存储有无法修改,可以追加(不推荐),一般用于存储历史数据。

在文件存储时可以指定块大小和备份数,存储完成后只能对备份数进行修改

hdfs存储原理

基础版本

宏观方面

NameNode(NN)

DataNode(DN)

SecondaryNameNode

用于解决NN掉电易失的问题,主要方案是:日志+快照

日志及快照的路径为/var/sxt/hadoop/ha/dfs/name/current ,其中的VERSION文件存有集群信息

hdfs的每个操作都会存到日志文件中(edits_inprogress_0000000000000010924)

hdfs设置有日志文件的检查点(checkpoint),当满足任一检查点时,执行日志合并

日志合并流程

这样开机时,只需要内存从镜像恢复,并重做最多64M日志文件,实现快速开机

nn会将当前(上次关机时)的fsimage与最新的日志进行合并产生新的fsimage

 

 

微观方面

 

 

 

HA版本

宏观方面

 

微观方面

 

下载

 

 

NN关闭时不会存储DN的映射记录,开机有依靠DN汇报机制重新生成映射

 

 

hdfs的环境搭建

基本配置(两种环境都搭建)

hadoop1.0搭建

具备一个NN,一个SecondaryNameMode,三个DN

hadoop2.x的HA集群搭建

ZooKeeper集群

Hadoop-HA集群

hdfs命令

网络访问地址

hdfs-site.xml中NN的http访问地址

启动集群

启动集群

关闭集群

查看集群运行状态jps

jps查看各主机中的运行进程:

1393 NameNode                            NN节点 
1486 DataNode                            DN节点
1644 JournalNode                         JN节点
1799 DFSZKFailoverController             ZKFC故障切换控制器
1274 QuorumPeerMain                      ZK(zookeeper节点)
1891 Jps 

单独节点开关

上传下载命令

hdfs目录创建

hdfs dfs -mkdir -p hdfs目录

eg:hdfs dfs -mkdir -p /sxt/bigdata 在hadoop中创建/sxt/bigdata目录

文件上传

hdfs dfs -D 块大小 -put 上传的文件 hdfs目录

eg:hdfs dfs -D dfs.blocksize=1048576 -put tomcat /sxt/bigdata

eclipse访问

win配置

解压eclipse,将hadoop-eclipse-plugin-2.6.0.jar文件置入eclipse的plugins目录中。

解压hadoop-2.6.5.tar.gz将解压后的软件放在:D:\worksoft\目录下。解压bin.zip并将内容替换复制到D:\worksoft\hadoop-2.6.5.tar.gz\bin目录下。

配置环境变量

连接配置

打开eclipse,打开map-reduce视图。在map-reduce中创建新的连接,HA集群分别配置两个NN节点的连接

在侧边框中测试文件上传下载

java上传下载测试

代码部分

使用测试用例在@Before配置hdfs和hadoop配置,在@After中断开hdfs连接

通过hadoop提供的Configuration,FileSystem,Path,IOUtils实现上传下载

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class MyHDFS {
    //将处理化的内容作为成员变量供使用
	Configuration config;
	FileSystem fileSystem;	
	@Before
	public void init() throws IOException{
		//执行初始化
		//读取皮配置
		config =new Configuration(true);
		//获取分布式文件系统
		fileSystem =FileSystem.get(config);
	}
	@After
	public void destory() throws IOException{
		//执行连接销毁
		fileSystem.close();
	}
	//验证目录存在验证
	@Test
	public void exists() throws IOException{
		Path path=new Path("/shsxt/java"); 
		System.out.println(fileSystem.exists(path));
	}
	
	//文件上传验证
	@Test
	public void upload() throws Exception{
		//创建本地输入流,输入文本文件
		InputStream in=new FileInputStream("D:\\123.txt");
		//获取输出流,通过文件系统获取指定路径的输出流
		OutputStream out=fileSystem.create(new Path("/shsxt/java/123.txt"));
		//通过hadoop的传输工具实现流的传输
		IOUtils.copyBytes(in, out, config);
	}
	
	//文件下载验证
	@Test
	public void download() throws Exception{
		//声明字节流进行接收
		ByteArrayOutputStream out=new ByteArrayOutputStream();
		//从DFS获取指定文件或目录的输入流
		InputStream in=fileSystem.open(new Path("/shsxt/java/123.txt"));
		//通过流传输获取字符串数据
		int len = 0;
		byte[] buffer = new byte[1024];
		while ((len = in.read(buffer)) != -1) {
			out.write(buffer, 0, len); }
		String words = new String(out.toByteArray(), "GB2312");
	}
}

 

 

标签:hdfs,NN,zookeeper,技术,dfs,hadoop,sxt,数据
来源: https://www.cnblogs.com/javaxiaobu/p/11702996.html