hadoop大数据平台架构与实践

学习慕课网hadoop笔记

1.内容

google大数据技术
MapReduce
BigTable
GFS
hadoop 模仿谷歌
开源 分布式存储和分布式计算
包括两个核心组成
HDFS:分布式文件系统,存储海量的数据
MapReduce: 并行处理框架,实现任务分解和调度
可以 搭建大型数据仓库,PB级数据的存储、处理、分析、统计等业务
优势 高扩展、低成本、成熟生态圈
HIVE sql语句转为hadoop任务
Hbase与关系型数据库 放弃了事务特性追求更高扩展
与HDFS 提供了数据的随机读写和实时访问,实现对表数据的读写功能
zookeeper 监控集群每个节点的状态,管理节点间配置,维护数据一致性..

版本选择1.2

2.安装

准备
Linux环境,jdk,配置hadoop
jdk安装可以参考这里
hadoop安装使用wget

wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-1.2.1/hadoop-1.2.1.tar.gz

下载好后可以放到opt目录下

mv hadoop-1.2.1.tar.gz /opt/

解压缩

tar -zxvf hadoop-1.2.1.tar.gz

进入hadoop的conf目录下
有4个文件需要配置

mapred-site.xml
core-site.xml
hdfs-site.xml
hadoop-env.sh

修改第一个
hadoop-env.sh
打开注释,修改路径

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144-0.b01.el7_4.x86_64

修改第二个 core-site.xml
在configuration节点下添加配置

 <property>

    <name>hadoop.tmp.dir</name>

    <value>/hadoop</value>

  </property>

  <property>

    <name>dfs.name.dir</name>

    <value>/hadoop/name</value>

  </property>

  <property>

    <name>fs.default.name</name>

    <value>hdfs://localhost:9000</value>

  </property>

三个节点的意思为 工作目录;原数据目录;文件系统的本机访问;

修改第三个 hdfs-site.xml

在configuration节点下添加配置

   <property>
        <name>dfs.data.dir</name>
        <value>/hadoop/data</value>
    </property>

文件系统数据存放目录

修改第四个配置 mapred-site.xml

      <property>
        <name>mapred.job.tracker</name>
        <value>iZ2zeehe7yj61ktgrt2d3eZ:9001</value>
    </property>

任务调度器访问

最后配置hadoop路径

vim /etc/profile

添加

export HADOOP_HOME=/opt/hadoop-1.2.1

在export PATH后追加

$HADOOP_HOME/bin
整体如下
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH

保存 刷新 (source /etc/profile
执行hadoop会有打印

先执行格式化操作

hadoop namenode -format

进入bin目录下
执行start-all.sh
这里写图片描述
需要输入两次主机密码

输入jps查看有哪些进程
这里写图片描述
如果有第二至五项,说明启动成功

3.HDFS基本概念

-块(Bolck)
NameNode
DataNode

HDFS的文件被分成块进行存储
块默认大小64MB
块是文件存储的逻辑单元
有两类节点 NameNode和DataNode
NameNode是管理节点,存放文件元数据,元数据包括两个部分
①文件与数据块的映射表
②数据块与数据节点的映射表
这里写图片描述
客户端先去读取元数据,看需要的数据在哪些数据块中,再去读取数据块,组装成文件返回
DataNode是HDFS的工作节点,存放数据块
数据管理策略
每个数据块3个副本,分布在两个机架内的三个节点
心跳检测
DataNode定期向NameNode发送心跳消息
这里写图片描述

二级NameNode(Secondary NameNode) 定期同步元数据映像文件和修改日志NameNode发生故障时,备胎转正
HDFS中文件读取流程
这里写图片描述
① 把文件名,路径告诉NameNode
②返回元数据,告诉客户端,文件包含哪些块,这些块哪哪些DataNode中可以找到
③客户端读取Blocks,组装
HDFS中文件写入流程
这里写图片描述
①文件拆分成Bolck,通知NameNode
②返回DataNodes
③客户端写入Blocks
④流水线赋值到其他DataNode
⑤更新元数据
HDFS特点
1.数据冗余,硬件容错
2.流式数据访问(一次写入多次读取)
3.存储大文件(小文件对NameNode压力大)

适合数据批量读写,吞吐量高
不适合交互式应用,低延迟很难满足
HDFS命令行操作演示

hadoop fs -ls /

把hdfs的文件夹打印出来
这里写图片描述

hadoop fs -put hadhoop-env.sh input/

存放文件hadhoop-env.sh 到 input目录下

fs -rm input
fs -rm hadoop-env.sh

移除目录和移除文件

bash hadoop fs -mkdir input

创建input目录
可以通过指令查看在哪里
这里写图片描述
查看文件名
这里写图片描述
查看文件

 hadoop fs -cat input/hadoop-env.sh

从hadoop下载文件

 hadoop fs -get input/hadoop-env.sh hadoop-env2.sh

查看详细信息

hadoop dfsadmin -report
4.MapReduce原理

并行计算框架
分而治之,一个大任务分成多个小的子任务(map),并行执行后,合并结果(reduce)

有1000副扑克牌,少了1张如何找出?
①把所有牌分成多组
②各自统计(map)
③数据交换
④再统计
⑤筛选结果
这里写图片描述
运行流程
Job&Task
JobTracker
JobTracker
一个job拆分成多个task
task又分为MapTask和ReduceTask
这里写图片描述
客户端提交任务给JobTracker(管理节点)
JobTracker把任务拆分成多个Map任务和Reduce任务
分发给TaskTracker(一般TaskTracker和HDFS的DataNode是同一个节点)和ReduceTaskTracker

JobTracker
作业调度
分配任务、监控任务执行进度
监控TaskTracker的状态

TaskTracker
执行任务
汇报任务状态

这里写图片描述
数据分片
分配Map任务,产生一些k,v数据,交给Reduce
Reduce归并 写回HDFS中
容错机制
1.重复执行
2.推测执行(任务执行过程中,TaskTracker比其他的慢,会新建一个TaskTracker执行,旧的和新的谁先执行完就停止另一个)

5.应用程序

(1)WordCount 单词计数
入门程序,计算文件中每个单词的频数,输入结果按字母顺序进行排序。
要求:
输入
hello world bye world
hello hadoop bye hadoop
byehadoop hello hadoop
输出
bye 3
hello 3
hadoop 4
world 2

Map过程

1. Hello World Bye World --Map--> <Hello,1><World,1><Bye,1><World,1>
2. Hello Hadoop Bye Hadoop --Map--> <Hello,1><Hadoop,1><Bye,1><Hadoop,1>
3. Bye Hadoop Hello Hadoop --Map--> <Bye,1><Hadoop,1><Hello,1><Hadoop,1>

Reduce
这里写图片描述

使用 WordCount.java代码
https://gitee.com/LCJA/codes/7retjm38qzgnvocb5hlx477#WordCount.java
对代码进行编译

javac -classpath /opt/hadoop-1.2.1/hadoop-cor
e-1.2.1.jar:/opt/hadoop-1.2.1/lib/commons-cli-1.2.jar -d word_count_class/ WordCount.java

这里写图片描述

打包代码

 jar -cvf wordcount.jar *.class

创建input文件夹 创建文件file1,里面随便输入几个单词
创建文件file2,也随便输入几个单词
现在把文件提交到hdfs中
先创建文件夹

hadoop fs -mkdir input_wordcount

再放入

 hadoop fs -put input/* input_wordcount/

表示把input下的所有文件 放到了input_wordcount中

现在开始提交任务

 hadoop jar word_count_class/wordcount.jar WordCount input_wordcount output_wordcount

这里的output_wordcount不存在会自动创建

这里写图片描述
这里写图片描述
执行完成
查看有3个文件夹
这里写图片描述
结果在part-r-00000中

hadoop fs -cat output_wordcount/part-r-00000

这里写图片描述
WordCount代码解析(自己的理解,如有错误请指正)
代码包含2个内部类WordCountMap,WordCountReduce,
WordCountMap继承Mapper接口
设置输入格式<LongWritable, Text, Text, IntWritable>
顺序表示输入的k,v输出的k,v
map方法表示对输入文本进行读取,然后再对一行进行截断分词
每有一个单词进行记1处理
如 hello hadoop hello 记 hello 1 hadoop 1 hello 1
WordCountReduce类继承Reducer类<Text, IntWritable, Text, IntWritable>
顺序表示输入的k,v,输出的k,v
reduce方法中表示把结果进行累加
main方法表示指定job配置
设置各个类,指定输入输入路径等
(2)MapReduce排序
将数据分片,对数据标记
样例 file1 中有几个数字 file2也有几个数字
运行与之前的过程相同,结果
这里写图片描述
Sort的解析
Map类的map方法
读取每一行,将每行的数字转换为整数
放入key,value随便放
Reduce类的Reduce方法
取出数字每取出一个key ,linenum+1

主要方法为Partition(分区)
把Map任务完成后交给Reduce前进行分区
把最大值除以分区数,这样每个区是相同大小
将数字放入分区(这里的分区不是很明白)
Reduce合并分区就成拍好序的了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值