大数据入门及集群搭建(3个节点做示范)
1.大数据
1.1 什么是大数据
传统处理方式无法解决的大而且复杂的数据集(存储和计算)
1.2 大数据的四个特性
- 数据量大
- 种类多
- 速度快: 产生数据的速度快,要求时延小
- 价值高: 整体价值高,单条记录没有价值
1.3 大数据价值应用
在总数据量相同的情况下,与个别分析独立的小型数据集(Data set)相比,将各个小型数
据集合并后进行分析可得出许多额外的信息和数据关系性,可用来政治经济国庆调控、 察觉
商业趋势、 判定研究质量、 避免疾病扩散、 打击犯罪或测定即时交通路况等, 这样的用途
正是大型数据集盛行的原因。
2.Hadoop
2.1.什么是hadoop
大数据存储和计算的一整套解决方案,软件平台。
2.2.hadoop的核心组件
* Common(基础设施)
* HDFS: 分布式的文件系统(海量数据的存储)
* MapReduce: 分布式的计算框架(海量数据离线运算)
* Yarn: 分布式资源调度系统(2.x)
2.3 hadoop的发行版
* apache hadoop: 2008年,初学者入门,简单易入手
* cloudera hadoop: 2009年,企业中使用 CDH,性能强
* hortonworks hadoop: 2011年,文档全面
2.4 hadoop生态圈
重点组件:
- HDFS: Hadoop 的分布式文件存储系统
- MapReduce: Hadoop 的分布式程序运算框架,也可以叫做一种编程模型
- Hive: 基于 Hadoop 的类 SQL 数据仓库工具
- HBase: 基于 Hadoop 的列式分布式 NoSQL 数据库
- ZooKeeper: 分布式协调服务组件
- Mahout: 基于 MapReduce/Flink/Spark 等分布式运算框架的机器学习算法库
- Oozie/Azkaban: 工作流调度引擎
- Sqoop: 数据迁入迁出工具
- Flume: 日志采集工具
2.5 分布式和集群区别
-
负载均衡集群
-
分布式
利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统。
3.数据处理流程
- A、 数据采集:定制开发采集程序,或使用开源框架 Flume 或者 LogStash
- B、 数据预处理:定制开发 MapReduce 程序运行于 Hadoop 集群,或者专门数据收集工具也能进行数据预处理
- C、 数据仓库技术:基于 Hadoop 之上的 Hive
- D、 数据导出:基于 Hadoop 的 Sqoop 数据导入导出工具
- E、 数据可视化:定制开发 web 程序或使用 Kettle 等产品
- F、数据统计分析: Hadoop 中的 MapReduce 或者基于 Hadoop 的 Hive,或者Spark, Flink
- G、 整个过程的流程调度: Hadoop 生态圈中的 Oozie/Azkaban 工具或其他类似开源产品
项目整体技术架构图
4.hadoop集群搭建
4.1 hdfs 组成
* namenode(nn): 存放元数据信息,存储文件名称,文件属性,文件的块列表,所在的dn的节点列表
* datanode(dn): 存放具体的block的,校验文件。
* secondarynamenode(2nn): 降低namenode压力,辅助作用。
4.2 yarn组成
- ResourceManager(rm): 整个集群的资源调度
- NodeManager(nm): 单个节点的资源调度
4.3 Hadoop集群搭建
4.3.1 准备三个节点
-
修改ip地址,静态ip地址
-
修改主机名称和主机映射
-
修改系统启动级别
vim /etc/inittab
将 id:5:initdefault:
修改成
id:3:initdefault:
- 防火墙和selinux
service iptables stop
chkconfig iptables off
selinux:linux的安全管理策略
vim /etc/selinux/config
SELINUX=disabled
- 同步时间
date -s ""
ntpdate ntp1.aliyun.com
- jdk安装
- 保证同名的普通用户并且配置ssh免密登录
4.3.2 集群搭建
-
单节点
-
伪分布式集群
-
完全分布式
-
1.下载hadoop软件包
http://hadoop.apache.org/ http://archive.apache.org/dist/
-
2.上传到服务器
put -r hadoop.tar.gz
-
3.解压操作
1./opt/moudle/.... 权限(用户名组修改为hadoop) sudo(sudoers权限配置) 2./home/hadoop/ tar -zxvf hadoop-2.7.7-centos-6.7.tar.gz
-
4.目录结构
bin: 可执行文件(操作命令 hdfs...) sbin: 可执行文件(集群启动关闭,负载均衡...) etc: 配置文件 share: 共享文件(common/hdfs/mapreduce等jar)
-
5.进程规划
hdp01 hdp02 hdp03 namenode datanode datanode datanode ResourceManager secondarynamenode NodeManager NodeManager Nodemanager -
6.配置
-
hadoop-env.sh
-
整个hadoop的环境,hadoop进程是jvm进程,配置jdk的环境变量
export JAVA_HOME=/opt/jdk1.8.0_73
运行一个mr示例:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input/ output
- core-site.xml
默认的文件系统,默认值(file:///本地文件系统)
hdfs://ip:port hdfs集群的入口地址(namenode:客户端的请求和响应)
1.使用分布式的文件系统
2.namenode所在的节点为hdp01
3.hdfs集群的访问路径: hdfs://hdp01:9000
<property>
<name>fs.defaultFS</name>
<value>hdfs://hdp01:9000</value>
</property>
临时文件的存储目录:
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property>
- hdfs-site.xml
dfs.replication: 副本数(默认3个副本)
dfs.blocksize:每个块的大小(1.x:64m, 2.x:128m)
namenode的元数据存储的目录:
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoopdata/name</value>
</property>
datanode的block信息存储的目录:
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoopdata/data</value>
</property>
secondarynamenode的节点配置:
<property>
<name>dfs.secondary.http.address</name>
<value>hdp03:50090</value>
</property>
- mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
mapreduce作业运行的平台:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hdp02</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- slaves(dn和nm)
namenode/ResourceManager --> master
datanode/NodeMnager --> slave
hdp01
hdp02
hdp03
- 7.环境变量
/etc/profile
当前用户,配置如下两个文件即可(任意一个都可)
~/.bashrc
~/.bash_profile
配置如下信息:
export HADOOP_HOME=/home/hadoop/hadoop-2.7.7
export PATH=$PATH:$HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
最后source一下,更新配置文件。
source .bash_profile
- 8.发送到其他节点
scp -r hadoop-2.7.7 hadoop@hdp02:~/
scp -r .bash_profile hadoop@hdp03:~/
- 9.hdfs集群(namenode)格式化
hdfs namenode -format (只能格式化一次)
- 10.启动集群
1.逐个进程启动
hadoop-daemon.sh start/stop namenode/datanode/secondarynamenode
yarn-daemon.sh start/stop ResourceManager/NodeManager
2.整个集群启动(涉及到通信,ssh免密登录)
start-dfs.sh/stop-dfs.sh
start-yarn.sh(必须在rm节点启动)/stop-yarn.sh
3.全部启动
start-all.sh/stop-all.sh
- 11.成功检测
1.jps
2.利用图形界面
hdfs: http://hdp01:50070
yarn: http://hdp03:8088
3.运行任务
hdfs: hdfs dfs -copyFromLocal input/ /
yarn: hadoop jar hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
OK了,集群已经搭建成功!
4.4 高可用集群
4.4.1 高可用原理
hadoop高可用原理:将元数据存储在第三方文件系统平台(类似于zookeeper)
high availability using the Quorum Journal Manager(QJM)
将元数据信息存储在QJM这个平台,采用 文件系统+监听机制:
active 将元数据信息存储在QJM这个平台,standby 会时刻监听 QJM 平台 edits 文件的更新,一旦有更新,standby 会立即将更新的 edits 文件拉取到自己的节点。
4.4.1 高可用搭建
高可用集群 详见 hadoop HA (高可用 high available)的搭建