大数据的关键技术:批处理技术、流计算、图计算、查询分析计算
大数据处理架构Hadoop
1. Hadoop简介
apache软件基金会的开源软件,使用Java开发,但是Hadoop支持多种编程语言,有两大核心HDFS、MapReduce
Hadoop的特点:
- 高可靠性。多太机器构成集群,冗余副本机制,部分机器发生故障,也不影响剩余机器的服务
- 高效性。用多台机器来做计算,效率自然就高了
- 高可拓展性。机器(节点)的数量没有限制
- 低成本。可使用多个普通的pc机器构建集群
- 高性能计算。
Hadoop的应用现状,Facebook采用Hadoop集群用于日志处理,推荐系统和数据仓库
选择Hadoop版本的考虑因素:
- 是否免费开源
- 是否有稳定版,Apache中Hadoop的2.0版本就比1.0版本要稳定
- 是否有实践检验
- 是否有强大的社区支持
2. Hadoop项目结构
- HDFS: 负责分布式文件的存储系统,就是怎么用上百台的服务器进行数据的存储
- YARN:对存储好的数据进行调度和管理的框架
- MapReduce:基于磁盘的离线批处理
- Tez: 是运行在YARN上的Hadoop查询处理框架,将多个MapReduce作业构建成一个有向无环图,以保证最好的处理效率
- Spark: 基于内存并行框架,类似MapReduce,
- Hive : Hadoop上的数据仓库,用于企业的决策分析,可将大量的历史数据存放在数据仓库中,建立各种维度,进行数据分 析辅助决策。Hive把SQL语句转换成MapReduce作业,再去执行
- Pig : 流式数据的处理,属于轻量级的脚本语言,类似SQL语句
- Oozie :工作流管理工具
- Zookeeper : 提供分布式协调一致性服务,分布式锁、集群管理
- Hbase : Hadoop上面向列的非关系型的分布式数据库,实时数据读写,支持大型的数据库
- Flume :一个高可用、高可靠的分布式的海量日志采集、聚合和传输的系统
- Sqoop : 用于Hadoop与传统数据库之间进行数据传输(导入导出),HDFS\HBASE\HIVE上互导
- Ambari : Hadoop中快速部署的工具,支持Apache Hadoop集群的供应、监控和管理
3. Hadoop的安装
在VMware上安装Ubuntu操作系统,再在Ubuntu上安装Hadoop,在安装过程中遇到corrupted stack end detected inside scheduler
这样的问题,时VMware与Ubuntu的版本不兼容的问题,将硬件虚拟机的兼容性更改为Workstation6.0得以解决。
3.1 使用sudo apt-get update
进行更新文件包
3.2 安装 vim编辑器 sudo agt-get install vim
3.3 安装ssh,
先安装 sudo agt-get install openssh-server
配置ssh免密登录 ,转到对应目录 cd ~/.ssh
,生成密钥 ssh-keygen -t rsa
,三次回车
执行cat ./id_rsa.pub >> ./authorized_keys
追加文件
3.4 安装java环境,jdk版本在1.8以上
cd /usr/lib
,创建目录sudo mkdir jvm
,对安装包解压缩sudo tar -zxvf ./jdk-8u132-linux-x64.tar.gz -C /usr/lib/jvm
,设置环境变量vim ./bashrc
添加如下信息
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
文件生效 source ~/.bashrc
检查是否配置成功,Java -version
3.5 Hadoop的伪分布式安装
- 单机模式:只在一台机器上 运行,存储在本地
- 伪分布式模式:存储用HDFS,但所有节点都在一台机器上
- 分布式模式:存储用HDFS,节点在不同的机器上
伪分布式的安装,
- 确认JDK安装好之后,解压hadoop压缩包
sudo tar -zxvf ./hadoop-2.9.2.tar.gz -C /usr/hadoop
- 转安装目录,对文件进行重命名,
sudo mv ./hadoop-2.9.2/ ./hadoop
- 配置环境,赋予权限
sudo chown -R hadoop ./hadoop
进入Hadoop的安装目录,输入vim ~/.bashrc
在bashrc文件中,设置JAVA_HOME和HADOOP_HOME,如下export JAVA_HOME=/usr export PATH=/usr/local/hadoop/bin/:/usr/local/hadoop/sbin/:$PATH export HADOOP_HOME=/usr/hadoop export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
文件生效source ~/.bashrc
- 修改Hadoop的配置文件,主要式修改
/usr/local/hadoop/etc/hadoop
下core-site.xml和hdfs-site.xml两个文件,
在core-site.xml文件中添加如下内容
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
在hdfs-site.xml文件中添加如下内容
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
- 对NameNode格式化,
hdfs namenode -format
- 开启NameNode和DataNode进程,
start-dfs.sh
- 检查,输入jps,如果有SecondaryNameNode,NameNode,DataNode这三个进程说明配置成功。也可以在浏览器上输入http://localhost:50070,进入HDFS的web界面。
4.Hadoop集群的部署和使用
Hadoop两个核心组件:提供数据存储的HDFS 和 对数据进行计算的MapReduce
4.1 集群节点的类型
- NameNode:HDFS中负责协调集群中的数据存储
- DataNode : HDFS中存储被NameNode拆分的数据块
- JobTracker:MapReduce中协调数据计算任务
- TaskTracker:MapReduce负责执行由 JobTracker指派的任务
- SecondaryNameNode:帮助NameNode收集文件系统运行的状态信息,冷备份,如果NameNode出了问题,SecondaryNameNode需要恢复的过程才能顶替NameNode。
HDSF2.0的新特性
HDFS HA
HDFS HA(High Availability)是为了解决单点故障问题
HA集群设置两个名称节点,“活跃(Active)”和“待命(Standby)”
两种名称节点的状态同步,可以借助于一个共享存储系统来实现
一旦活跃名称节点出现故障,就可以立即切换到待命名称节点
Zookeeper确保一个名称节点在对外服务名称节点维护映射信息,数据节点同时向两个名称节点汇报信息
HDFS HA是热备份,提供高可用性,但是无法解决可扩展性、系统性能和隔离性
HDFS Federation
HDFS1.0中存在问题
- 单点故障问题
- 不可以水平扩展,且无法通过纵向解决问题
- 系统整体性能受限于单个名称节点的吞吐量
- 单个名称节点难为提供不同程序之间的隔离性
- HDFS HA无法解决可扩展性、系统性能和隔离性
在HDFS Federation中,设计了多个相互独立的名称节点,使得HDFS的命名服务能够水平扩展,这些名称节点分别进行各自命名空间和块的管理,相互之间是联盟(Federation)关系,不需要彼此协调。并且向后兼容
HDFS Federation中,所有名称节点会共享底层的数据节点存储资源,数据节点向所有名称节点汇报
属于同一个命名空间的块构成一个“块池”
对于Federation中的多个命名空间,可以采用客户端挂载表(Client Side Mount Table)方式进行数据共享和访问
客户可以访问不同的挂载点来访问不同的子命名空间
把各个命名空间挂载到全局“挂载表”(mount-table)中,实现数据全局共享
同样的命名空间挂载到个人的挂载表中,就成为应用程序可见的命名空间
HDFS Federation设计可解决单名称节点存在的以下几个问题:
- HDFS集群扩展性。多个名称节点各自分管一部分目录,使得一个集群可以扩展到更多节点,不再像HDFS1.0中那样由
于内存的限制制约文件存储数目 - 性能更高效。多个名称节点管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率
- 良好的隔离性。用户可根据需要将不同业务数据交由不同名称节点管理,这样不同业务之间影响很小
需要注意的是HDFS Federation并不能解决单点故障问题,也就是说,每个名称节点都存在在单点故障问题,需要为每个名称节点部署一个后备名称节点,以应对名称节点挂掉对业务产生的影响