大数据-hdfs技术
hadoop
理论基础:GFS----HDFS;MapReduce---MapReduce;BigTable----HBase
项目网址:http://hadoop.apache.org/
下载路径:https://archive.apache.org/dist/hadoop/common/
主要模块
Hadoop Common
基础型模块。包括 RPC调用,Socket通信...
Hadoop Distributed File System
hdfs 分布式文件系统,存储数据
Hadoop YARN
资源协调框架
Hadoop MapReduce
大数据计算框架
Hadoop Ozone
对象存储框架
Hadoop Submarine
机器学习引擎
分布式文件系统hdfs
Hadoop Distributed File System文件管理工具,实现文件系统与硬盘的解耦,执行MapReduce计算的基础
hdfs中文件默认拆分为默认128M的块block(除了最后一块),通过偏移量确认块的顺序,每个块默认3个备份。
文件存储有无法修改,可以追加(不推荐),一般用于存储历史数据。
在文件存储时可以指定块大小和备份数,存储完成后只能对备份数进行修改
hdfs存储原理
基础版本
宏观方面
NameNode(NN)
接收客户端的数据请求
管理分布式文件系统,主要管理文件的映射关系。
分布式文件目录
文件目录与文件的对应关系
文件与块的映射关系,文件对应的块,块存放的DN节点
块与DN的映射存放在NN内存中
利于快速查找
掉电易失,内存占满会宕机
不适合存放小文件,小文件内存占用过大,
NN与DN保持心跳
启动状态,NN收集DN汇报的Block信息,建立block与DN的映射
启动后
DN默认3秒向NN汇报存活
若DN失联10min认为失联,则NN将失联DN的中的块备份到其他DN上
DataNode(DN)
存储真实数据文件,也就是block
每个block对应一份元数据,通过元数据校验block的是否损坏
与NN保持心跳
启动时:验证本地block完整性后向NN汇报所存储的块信息
启动后:3秒向NN汇报存活
DN的存储介质是硬盘
SecondaryNameNode
用于解决NN掉电易失的问题,主要方案是:日志+快照
日志及快照的路径为/var/sxt/hadoop/ha/dfs/name/current ,其中的VERSION文件存有集群信息
hdfs的每个操作都会存到日志文件中(edits_inprogress_0000000000000010924)
hdfs设置有日志文件的检查点(checkpoint),当满足任一检查点时,执行日志合并
fs.checkpoint.size 默认64M,日志文件大小
fs.checkpoint.period 默认3600秒,间隔时间
日志合并流程
SecondaryNameNode从NN拉取当前日志文件,NN创建新的日志文件来执行hdfs任务
SecondaryNameNode将拉取的日志文件与内部原有的快照文件合并,生成新的快照文件及其验证md5文件(fsimage_0000000000000010755和fsimage_0000000000000010755.md5)
SecondaryNameNode将生成的快照及验证返回给NN,使得SecondaryNameNode同时存在快照
NN验证接收的快照,并修改原有日志文件作为历史日志文件保存(edits_0000000000000010922-0000000000000010923)
这样开机时,只需要内存从镜像恢复,并重做最多64M日志文件,实现快速开机
nn会将当前(上次关机时)的fsimage与最新的日志进行合并产生新的fsimage
微观方面
HA版本
宏观方面
微观方面
下载
NN关闭时不会存储DN的映射记录,开机有依靠DN汇报机制重新生成映射
hdfs的环境搭建
基本配置(两种环境都搭建)
3台以上相互免秘钥的主机,安装jdk并配置JAVA_HOME与环境变量
主节点中预先准备:
将hadoop-2.6.5.tar.gz解压到/opt/sxt目录下
tar -zxvf hadoop-2.6.5.tar.gz
mv hadoop-2.6.5 /opt/sxt/
cd /opt/sxt/hadoop-2.6.5/etc/hadoop/
配置/opt/sxt/hadoop-2.6.5/etc/hadoop/目录下的
hadoop-env.sh的25行,mapred-env.sh的16行,yarn-env.sh的23行的java_home路径(mapred-env.sh和yarn-env.sh可以不用改)
hadoop1.0搭建
具备一个NN,一个SecondaryNameMode,三个DN
安装hadoop
修改/opt/sxt/hadoop-2.6.5/etc/hadoop下的配置文件
core-site.xml 配置NN与hadoop路径
- <property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/sxt/hadoop/full</value>
</property>
- <property>
hdfs-site.xml hdfs配置
主要配置secondary与文件备份数
- <property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>node2:50091</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
- <property>
slaves配置DN
- node1
node2
node3
- node1
将Hadoop文件拷贝到其他节点,并创建hadoop目录/var/sxt/hadoop/full
配置环境变量vim /etc/profile,复制到其他节点,同步添加环境变量source /etc/profile
- export JAVA_HOME=/usr/java/jdk1.7.0_67
export HADOOP_HOME=/opt/sxt/hadoop-2.6.5
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
- export JAVA_HOME=/usr/java/jdk1.7.0_67
格式化NN节点 hdfs namenode -format
启动集群start-dfs.sh,通过jsp查看各节点进程
关机快照
hadoop2.x的HA集群搭建
ZooKeeper集群
解压zookeeper
tar -zxvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 /opt/sxt/
cd /opt/sxt/zookeeper-3.4.6/conf
拷贝配置文件
cp zoo_sample.cfg zoo.cfg 将根据配置示例文件创建配置文件
修改zoo.cfg中以下内容:
dataDir=/var/sxt/zookeeper 指定zookeeper数据目录
clientPort=2181 指定zookeeper客户端的访问端口
server.1=node1:2888:3888 指定zookeeper客户机及内部的访问端口 server.2=node2:2888:3888 server.3=node3:2888:3888
配置Zookeeper的环境变量
vim /etc/profile
- export JAVA_HOME=/usr/java/jdk1.7.0_67
export ZOOKEEPER_HOME=/opt/sxt/zookeeper-3.4.6
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
- export JAVA_HOME=/usr/java/jdk1.7.0_67
将zookeeper安装包和环境变量配置文件拷贝到其他主机
scp -r /opt/sxt/zookeeper-3.4.6/ root@node2:/opt/sxt/
scp -r /opt/sxt/zookeeper-3.4.6/ root@node3:/opt/sxt/
scp -r /etc/profile root@node2:/etc/profile
scp -r /etc/profile root@node3:/etc/profile
3节点统一执行
mkdir -p /var/sxt/zookeeper 创建zookeeper数据目录,与zoo.cfg 中指定路径一致
source /etc/profile 添加环境变量
指定各zookeeper节点的权值,权值越大分配可能越高
nide1执行echo 1 > /var/sxt/zookeeper/myid
nide2执行echo 2 > /var/sxt/zookeeper/myid
nide2执行echo 3 > /var/sxt/zookeeper/myid
启动Zookeeper集群并查看启动状态
zkServer.sh start
zkServer.sh status 结果为2个follower和1个leader
zkServer.sh stop
关闭拍快照
Hadoop-HA集群
配置core-site.xml核心xml文件
fs.defaultFS中配置hadoop集群名,与hdfs-site.xml中的dfs.nameservices对应
ha.zookeeper.quorum中配置zookeeper集群的主机和连接端口
hadoop.tmp.dir中配置hadoop文件存放路径
- <configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://shsxt</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/sxt/hadoop/ha</value>
</property>
</configuration>
- <configuration>
配置hdfs-site.xml hdfs的配置文件
dfs.nameservices配置NN集群名
dfs.ha.namenodes.shsxt配置NN集群各主机,属性名与NN集群名匹配,也就是其中的shsxt
dfs.namenode.rpc-address.shsxt.nn1与dfs.namenode.rpc-address.shsxt.nn2配置每个NN的主机名及内部连接端口,用于eclipse连接
dfs.namenode.http-address.shsxt.nn1与dfs.namenode.http-address.shsxt.nn2配置每个NN的主机名及外部连接端口
dfs.namenode.shared.edits.dir配置JournalNode的主机名与端口
dfs.journalnode.edits.dir配置JournalNode的文件目录
dfs.client.failover.proxy.provider.shsxt配置故障切换代理类,使用默认
dfs.ha.fencing.methods配置切换方式,sshfence通过ssh进行切换,shell(true)为避免脑裂指定设置断线NN
dfs.ha.fencing.ssh.private-key-files免密钥,使用dsa
dfs.ha.automatic-failover.enabled自动故障切换
dfs.replication文件的备份数
- <property>
<name>dfs.nameservices</name>
<value>shsxt</value>
</property>
<property>
<name>dfs.ha.namenodes.shsxt</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.shsxt.nn1</name>
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.shsxt.nn2</name>
<value>node2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.shsxt.nn1</name>
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.shsxt.nn2</name>
<value>node2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1:8485;node2:8485;node3:8485/shsxt</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/sxt/hadoop/ha/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.shsxt</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<value>shell(true)</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
- <property>
配置slaves中的DN节点
node1 node2 node3
配置环境变量文件/etc/profile
- export JAVA_HOME=/usr/java/jdk1.7.0_67
export HADOOP_HOME=/opt/sxt/hadoop-2.6.5
export ZOOKEEPER_HOME=/opt/sxt/zookeeper-3.4.6
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH
- export JAVA_HOME=/usr/java/jdk1.7.0_67
将环境变量文件与hadoop安装文件拷贝到其他节点中
scp /etc/profile root@node2:/etc/profile
scp /etc/profile root@node3:/etc/profile
scp -r /opt/sxt/hadoop-2.6.5/ root@node2:/opt/sxt/
scp -r /opt/sxt/hadoop-2.6.5/ root@node3:/opt/sxt/
执行环境变量配置 [123] source /etc/profile
创建hadoop数据目录 [123] mkdir -p /var/sxt/hadoop/ha/jn
启动ZooKeeper
[123] zkServer.sh start
[123] zkServer.sh status
启动JournalNode
[123]hadoop-daemon.sh start journalnode
格式化NameNode
[1]hdfs namenode -format 格式化主NN
[1]hadoop-daemon.sh start namenode 单独启动主NN
[2]hdfs namenode -bootstrapStandby 格式化SNN
格式化ZKFC [1]hdfs zkfc -formatZK
启动集群 [1]start-dfs.sh
首次启动后,之后通过此命令启动hadoop,注意需要提前启动ZooKeeper
执行存储查看结果
hdfs dfs -mkdir -p /shsxt/java
hdfs dfs -D dfs.blocksize=1048576 -put jdk-7u67-linux-x64.rpm /user/root
关机快照
hdfs命令
网络访问地址
hdfs-site.xml中NN的http访问地址
192.168.163.201:50070与192.168.163.202:50070
node1:50070和node2:50070(需要配置win的hosts文件)
启动集群
启动集群
全部主机zkServer.sh start
选取一个NN执行 start-dfs.sh
关闭集群
NN节点执行:stop-dfs.sh
全部节点执行:zkServer.sh stop
查看集群运行状态jps
jps查看各主机中的运行进程:
- 1393 NameNode NN节点
- 1486 DataNode DN节点
- 1644 JournalNode JN节点
- 1799 DFSZKFailoverController ZKFC故障切换控制器
- 1274 QuorumPeerMain ZK(zookeeper节点)
- 1891 Jps
单独节点开关
hadoop-daemon.sh start namenode 单独开启某个NN
hadoop-daemon.sh stop namenode 单独关闭某个NN
上传下载命令
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目录下。
配置环境变量
HADOOP_HOME
D:\worksoft\hadoop-2.6.5.tar.gz
HADOOP_USER_NAME
root
PATH中添加 %HADOOP_HOME%/bin;%HADOOP_HOME%/sbin
连接配置
打开eclipse,打开map-reduce视图。在map-reduce中创建新的连接,HA集群分别配置两个NN节点的连接
自定义连接名Location name
取消 DFS Master的勾选
Host修改为node1(NameNode)
Port修改为8020与hdfs-site.xml中的rpc-address属性匹配
User name修改为root
在侧边框中测试文件上传下载
java上传下载测试
创建java项目,导入IDE默认的JUnit4的jar包,导入hadoop的自定义jar包
从hadoop软件的share文件夹中拷贝各模块及其lib中的121个jar文件,到统一文件中,通过自定义依赖导入项目中
将集群的core-site.xml和hdfs-site.xml文件导入项目中作为资源文件
代码部分
使用测试用例在@Before配置hdfs和hadoop配置,在@After中断开hdfs连接
before
Configuration config =new Configuration(true)
fileSystem =FileSystem.get(config)
After
fileSystem.close()
通过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技术的更多相关文章
- 中国大数据六大技术变迁记(CSDN)
大会召开前期,特别梳理了历届大会亮点以记录中国大数据技术领域发展历程,并立足当下生态圈现状对即将召开的BDTC 2014进行展望: 追本溯源,悉大数据六大技术变迁 伴随着大数据技术大会的发展,我们亲历 ...
- 一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了
一文看懂大数据的技术生态圈,Hadoop,hive,spark都有了 转载: 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它 ...
- 大数据 --> 大数据关键技术
大数据关键技术 大数据环境下数据来源非常丰富且数据类型多样,存储和分析挖掘的数据量庞大,对数据展现的要求较高,并且很看重数据处理的高效性和可用性. 传统数据处理方法的不足 传统的数据采集来源单一,且存 ...
- 案例分析:大数据平台技术方案及案例(ppt)
大数据平台是为了计算,现今社会所产生的越来越大的数据量,以存储.运算.展现作为目的的平台.大数据技术是指从各种各样类型的数据中,快速获得有价值信息的能力.适用于大数据的技术,包括大规模并行处理(MPP ...
- AI加持的阿里云飞天大数据平台技术揭秘
摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...
- 了解大数据的技术生态系统 Hadoop,hive,spark(转载)
首先给出原文链接: 原文链接 大数据本身是一个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你能够把它比作一个厨房所以须要的各种工具. 锅碗瓢盆,各 ...
- 一文教你看懂大数据的技术生态圈:Hadoop,hive,spark
转自:https://www.cnblogs.com/reed/p/7730360.html 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞 ...
- 一文看懂大数据的技术生态Hadoop, hive,spark都有了[转]
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...
- 走进Spark--云计算大数据新一代技术
什么是Spark? 当然这里说的Spark指的是Apache Spark, Apache Spark™ is a fast and general engine for large-scale dat ...
随机推荐
- python爬虫----爬取阿里数据银行websocket接口
业务需求:爬取阿里品牌数据银行的自定义模块==>>>人群透视==>>>查看报告==>>数据 发现:数据通过websocket接口传递,此类型接口的详细理 ...
- 如何使用Mbp模块构建应用.
上一篇文章https://www.cnblogs.com/mbpframework/p/12073102.html,介绍了一下Mbp的框架.其实这个框架写出来主要是为了学习,当然也可以经过优化运用到实 ...
- meet in the middle 折半搜索 刷题记录
复杂度分析 假设本来是n层,本来复杂度是O(2^n),如果meet in middle那就是n/2层,那复杂度变为O( 2^(n/2) ),跟原来的复杂度相比就相当于开了个方 比如如果n=40那爆搜2 ...
- 安装sublime简易笔记
1.安装编码工具sublime text3(下载地址,软件管家网盘) 2.安装完成后,下载sublime text3中与python相关的插件:package control 进入package co ...
- ASP.NET MVC 给Action的参数赋值的方式
Action指的是Controller类中的方法,如上文中的Index. Action参数的三种常见类型:Model类型.普通参数.FormCollection Model类型 我们可以直接在地址栏后 ...
- 如何在macOS下安装geoserver
macOS 下的编译包 如果是使用安装文件,请查看官网文档,如果想要部署在已有的tomcat服务下,请查看网页压缩包章节. Web archive. An alternate way of insta ...
- 左边div固定宽度,右边div自适应撑满剩下的宽度--实现方法汇总
神奇的事 其实有的方法(float.position.margin.flex)是有border像素的差 代码如下: <!DOCTYPE html><html><head ...
- nginx配置长连接(ajax60秒请求超时)
个人博客 地址:http://www.wenhaofan.com/article/20180911150337 1.在使用ajax做轮训的时候前台发出的ajax请求总是会在60秒之后返回405超时响应 ...
- laravel多条件模糊查询
1.运用cmd在项目根目录下创建路由组 php artisan make:controller queryController --resource 1.1数据库信息(student) CREATE ...
- Java学习笔记(十二)面向对象---内部类
内部类的访问规则 内部类可以直接访问外部类中的成员,包括私有成员. 因为内部类中持有了一个外部类的引用,格式为:外部类名.this 外部类要访问内部类,必须要建立内部对象. class Outer { ...