大数据基础之hdfs3

回眸只為那壹抹淺笑 提交于 2020-02-08 13:43:04

1、hdfs的副本的配置

修改hdfs-site.xml文件

<!-- 注释配置数据块的冗余度,默认是3 -->
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

<!--注释配置HDFS的权限检查,默认是true-->
<property>
    <name>dfs.permissions</name>
    <value>false</value>
</property>
 <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hsiehchou122:50090</value>
</property>

需要同步到其它机器:

scp hdfs-site.xml hsiehchou122:$PWD
scp hdfs-site.xml hsiehchou123:$PWD
scp hdfs-site.xml hsiehchou124:$PWD

这里我划重点(亲自经历)
如果原来的分布式hadoop集群的主节点有Secondary NameNode,需要配置到其他节点,因为如果主节点挂了,其也是挂了,它的作用是在HDFS中提供一个检查点,相当于NameNode的助手节点
职责是:合并NameNode的edit logs到fsimage文件中

2、hadoop启动方式

1)启动hdfs集群
start-dfs.sh
2)启动yarn集群
start-yarn.sh
3)启动hadoop集群
start-all.sh

3、大数据干什么的

1)海量数据的存储(mysql/oracle)
分布式文件系统hdfs
dfs->Hdfs
mapreduce->mapreduce
bigtable->hbase
分而治之!

2)海量数据的计算
分布式计算框架mapreduce
配置checkpoint时间

<property>
<name>dfs.namenode.checkpoint.period</name>
<value>7200</value>
</property>

systemctl set-default graphical.target由命令行模式更改为图形界面模式
systemctl set-default multi-user.target由图形界面模式更改为命令行模式

4、hdfs-namenode工作机制

0、加载编辑日志与镜像文件到内存(NameNode)
edits_0001
edits_0002
fsimage fsimage fsimage
1、客户端发起命令(client)
hdfs dfs -ls /
2、滚动正在写的edits(NameNode)
3、记录操作日志更新 滚动日志(NameNode)
4、拷贝到Secondary NameNode
NameNode请求是否需要checkpoint

Secondary NameNode
触发checkpoint条件:
1、定时的时间
2、edits中数据已满
Secondary NameNode请求执行checkpoint
5、加载内存进行合并
6、生成镜像fsimage.checkpoint
7、拷贝到NameNode
8、NameNode对fsimage.checkpoint重命名成fsimage

hadoop2.8.4

安装部署
1)准备工作
设置主机名:vi /etc/hostname
注意:需要重启 reboot
设置映射:vi /etc/hosts
设置免密登录:ssh-keygen
ssh-copy-id hd-01

2)安装jdk
上传安装包
CRT:alt+p
解压
tar -zxvf .tar.gz
配置环境变量

export JAVA_HOME=/root/hd/jdk1.8.0_192
export PATH=$JAVA_HOME/bin:$PATH

注意:需要source /etc/profile
分发jdk
scp jdk hd-02:/root/hd
scp /etc/profile hd-02:/etc/
source /etc/profile

3)安装hadoop
上传安装包
alt + p
解压
tar -zxvf .tar.gz
修改配置文件
core-site.xml

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hsiehchou121:9000</value>
</property>

hdfs-site.xml

<property>
    <name>dfs.namenode.name.dir</name>
    <value>/root/hd/dfs/name</value>
</property>

<property>
    <name>dfs.datanode.data.dir</name>
    <value>/root/hd/dfs/data</value>
</property>

<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hsiehchou122:50090</value>
</property>

mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

yarn-site.xml

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hsiehchou121</value>
</property>

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
</property>

<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>

配置环境变量

export HADOOP_HOME=/root/hd/hadoop-2.8.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

修改slaves文件加入从节点
格式化namenode
hadoop namenode -format
启动:start-all.sh

hadoopMapReduce

官方:Apache™Hadoop®项目开发了用于可靠,可扩展的分布式计算的开源软件
Apache Hadoop软件库是一个框架,允许使用简单的编程模型跨计算机集群分布式处理
大型数据集。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和
存储。该库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用层的故
障,从而在计算机集群之上提供高可用性服务,每个计算机都可能容易出现故障
阿里的Flink(9000万欧元) Blink

MapReduce分布式计算程序的编程框架。基于hadoop的数据分析的应用
MR优点:
1)框架易于编程
2)可靠容错(集群)
3)可以处理海量数据(1T+ PB+) 1PB = 1024TB
4)拓展性,可以通过动态的增减节点来拓展计算能力

MapReduce的思想

数据:海量单词
hello reba
hello mimi
hello liya
mimi big
需求:对每个单词出现的次数统计出来
思想:分而治之!
解决方式:
1)每个单词记录一次(map阶段)
<hello,1> <reba,1> <hello,1> <mimi,1>
2)相同单词的key不变,value累加求和即可(reduce阶段)
<hello,1+1+1>
对数据进行计算

对wordcount例子程序分析

1)整个wordcount分为几个阶段?
三个
2)有哪几个阶段?
mapper
reducer
driver
3)每个阶段有什么作用
mapper:对数据进行打散<hello,1><mimi,1>
reducer:对数据进行聚合<hello,1+1+1>
driver:提交任务
4)详解

Mapper阶段

将数据转换为String
对数据进行切分处理
把每个单词后加1
输出到reducer阶段

Reducer阶段

根据key进行聚合
输出key出现总的次数

Driver阶段

创建任务
关联使用的Mapper/Reducer类
指定mapper输出数据的kv类型
指定reducer输出的数据的kv类型
指定数据的输入路径与输出路径
提交

hadoop数据类型

我们看到的wordcount程序中的泛型中的数据类型其实是hadoop的序列化的数据类
型。
为什么要进行序列化?用java的类型行不行?(可以)
Java的序列化:Serliazable太重。
hadoop自己开发了一套序列化机制。Writable,精简高效。海量数据。
hadoop序列化类型与Java数据类型

Java数据类型 Hadoop序列化类型
int IntWritable
long LongWritable
boolean BooleanWritable
byte ByteWritable
float FloatWritable
double DoubleWritable
String Text

wordcount测试

1)本地模式
2)集群模式
hadoop jar .jar wordcount /wc/in /wc/out

hadoop jar mapreduce-1.0-SNAPSHOT.jar 全类名 /wc/in /wc/out

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!