Hadoop 介绍与环境安装
预备知识
- Linux: 《Linux私房菜》
- Java: 《Java就业培训教程》
- Hadoop: 《Hadoop权威指南》
- 《实战Hadoop》
- 《Hadoop实战》
- 《Hadoop MapReduce Cookbook》
- 《Hadoop Real-World Solutions Cookbook》
Hadoop 是什么
- 面向大数据处理
- 擅长离线数据分析
- 分布式文件系统+计算框架
- Hadoop不是数据库, Hbase 才是数据库
- Hadoop 是一个快速进化的生态系统
知识路线图
Hadoop
|-- 基础课程
| |-- Java基础
| |-- Linux基础
| |-- 网络基础
| |-- 网络开发
|-- NoSQL
| |-- 数据库引擎开发
| |-- HBase 架构、管理与应用
| |-- MongoDB 架构、管理与应用
| |-- Neo4J 图数据库应用实践
| |-- Redis 实战
| |-- Nodejs + MongoDB 快速开发实战
|-- MapReduce
| |-- Mahout数据挖掘实战
| |-- Hive数据仓库实战
|-- Hadoop 方向
| |-- Hadoop 应用开发实战
| |-- Mahout 机器学习平台
| |-- Hadoop 源代码导读
| |-- Hive 数据仓库实战
|-- Storm 实时数据分析平台
|-- Spark 反向
| |-- Spark 大数据平台
| |-- MLLIB 机器学习
|-- 虚拟化方向
| |-- Openstack云系统
|--高性能计算
| |-- CUDA 从入门到精通
| |-- MPI 并行计算框架
|-- 大数据平台架构
|-- 搜索引擎架构
|-- 高并发大数据架构
职位
- 运维
- Hadoop 程序员 (M-R, 源代码)
- 架构师
- 数据仓库工程师
课程目标
- 部署: Hadoop, Hbase, Hive, Pig, Mahout
- 数据集成: Sqoop, Chukwa, Flume 等工具与数据库、应用工具集成
- 掌握HDFS原理和基本操作
- 掌握MapReduce 工作原理,使用M-R 算法解决实际场景
- 掌握YARN框架的原理及使用方法,知道怎样写YARN应用程序
- 编写MapReduce 程序, 提交作业并对运行状况进行监控
- 了解整个Hadoop 生态系统的各个子产品
- 初步阅读源代码的能力
典型实验环境
- 3台virtual box
- 网络配置为网桥模式
- JDK
- Hadoop: 2.x
Hadoop 架构
Namenode
- HDFS的守护程序
- 纨录文件是如何分割成数据块的,以及这些数据块被存储到哪些节点上
- 对内存和I/O迚行集中管理
- 是个单点,収生故障将使集群崩溃
Secondary Namenode
- 监控HDFS状态的辅助后台程序
- 每个集群都有一个
- 不NameNode进行通讯,定期保存HDFS元数据快照
- 当NameNode故障可以作为备用NameNode使用
DataNode
- 每台从朋务器都运行一个
- 负责把HDFS数据块读写到本地文件系统
JobTracker 已弃用?
- 用于处理作业(用户提交代码)的后台程序
- 决定有哪些文件参不处理,然后切割task幵分配节点
- 监控task,重吭失败的task(于不同的节点)
- 每个集群只有唯一一个JobTracker, 位于Master节点
TaskTracker 已弃用?
- 位于slave节点上,不datanode结合 (代码不数据一起的原则)
- 管理各自节点上的task(由 jobtracker分配)
- 每个节点只有一个tasktracker,但一 个tasktracker可以吭劢多个JVM, 用于幵行执行map戒reduce仸务
- 与jobtracker交互
Master/Slave 节点
- Master:Namenode、Secondary Namenode、Jobtracker。浏览器(用 于观看 管理界面),其它Hadoop工具
- Slave:Tasktracker、Datanode
- Master丌是唯一的
应用场景与瓶颈
数据量过大时
- 入库瓶颈
- 查询瓶颈
- 实时和响应时间要求越来越高
- 模型越来越复杂,计算量指数上升
期待的解决方案
- 完美解决性能瓶颈
- 技能平稳过度,兼容SQL
- 平台转换成本
Hadoop 缺点
- 基于Java
- 难以驾驭
- 数据集成困难
分析手段
- 主流: java程序
- 轻量级脚本: Pig
- SQL过渡: Hive
- NoSQL: HBase
机器选型配置
标准: 普通、廉价、标准、工业化大规模生产
- Hadoop 自持多核CPU
- 16-32G 内存
- 大量廉价硬盘
- 网络非常重要
- 不需要RAID
网络拓扑结构
- 使用局域网
- 支持机架感知
操作系统
- Hadoop 基于Java
- 主流Linux
- JDK
三种运行模式
- 单机模式:安装简单,几乎不用作任何配置,但仅限于调试用途
- 伪分布模式:在单节点上同时启动namenode、datanode、jobtracker、tasktracker、secondary namenode等5个进程,模拟分布式运行的各个节点
- 完全分布式模式:正常的Hadoop集群,由多个各司其职的节点构成
完全分布式模式安装和配置
- 配置hosts文件
- 建立Hadoop运行账户
- 配置ssh免密连入
- 下载Hadoop安装包
- 配置hadoop-env.sh
- yarn-env.sh
- 配置namenode, 修改site文件
- 配置slaves文件
- 向各节点复制hadoop
- 格式化namenode
- 启动Hadoop
- jps检验后台进程是否启动成功
搭建环境
- ubuntu 16.04 server
- hadoop-2.7.2
- jdk1.8.0_91
建虚拟机
基于 Virtaul Box 和 Ubuntu 16.04 server 建虚拟机 ubuntu00
网络: 桥接网络
用户: ubuntu00
基于ubuntu00 复制得到ubuntu01, ubuntu02
3台虚拟机:
- ubuntu00
- ubuntu01
- ubuntu02
2. 配置hosts文件
根据各虚拟机配置hosts
3. 配置ssh免密
生成各虚拟机秘钥对,配置免密连接
JDK 安装
下载 jdk1.8.0_91
解压至 /usr
Hadoop 安装
下载 hadoop-2.7.2
解压至用户目录
Hadoop 配置 etc/hadoop/*
不存在的文件复制对应的template 文件
- hadoop-env.sh
- yarn-env.sh
- slaves
- core-site.xml
- hdfs-site.xml
- mapred-site.xml
- yarn-site.xml
hadoop-env.sh
// the java implementtation to use
export JAVA_HOME=/usr/jdk1.8.0_91
export HADOOP_CLASSPATH=/home/ubuntu00/hadoop-2.7.2/myclass
yarn-env.sh
// java parameters
export JAVA_HOME=/usr/jdk1.8.0_91
slaves
ubuntu01
ubuntu02
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ubuntu00:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/ubuntu00/hadoop-2.7.2/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>ubuntu00:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/ubuntu00/hadoop-2.7.2/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/ubuntu00/hadoop-2.7.2/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>ubuntu00:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>ubuntu00:19888</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce..shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>ubuntu00:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>ubuntu00:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>ubuntu00:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>ubuntu00:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>ubuntu00:8088</value>
</property>
</configuration>
向各节点复制 etc/hadoop/* 配置
启动集群及检验
master 节点上(ubuntu00)
- 格式化namenode:
bin/hdfs namenode -format
- 启动Hadoop:
sbin/start-dfs.sh sbin/start-yarn.sh
- 检验后台进程:
jps
- mr查看:
mr-jobhistory-daemon.sh start historyserver
- 查看DataNode:
hdfs dfsadmin -report
测试MapReduce
单词数计数
~$ mkdir input
$ cd input
$ echo "hello world" > test1.txt
$ echo "hello hadoop" > test2.txt
$ bin/hadoop fs -mkdir in
hadoop$ bin/hadoop fs -put ~/input in
$ bin/hadoop fs -ls in
hadoop/share/hadoop/mapreduce$ hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount in out
$ hadoop fs -cat out/part-r-00000
web
Hadoop 备受关注的特性与版本演进
- Append: 支持文件追加功能, 解决Hadoop 不能修改文件
- RAID: 在保证数据可靠的前提下,通过引入校验码减少数据块数目
- Symlink: 支持HDFS 文件链接
- Security: Hadoop 安全性
- HDFS Federation 和YARN
Cloudera 发布版
Cloudera 发行版, 简称CDH