Ambari自动部署Hadoop集群实战
一、大数据简介
1、为什么使用大数据技术?
- 数据量越来越大
- 数据分析的实时性越来越强
- 数据结果的应用越来越广泛
2、大数据的定义
大数据是收集、整理、处理大容量数据集,并从中获得结果的技术总称。
二、大数据应用领域
- 广告投放
- 广告策略
- 深度包检测
- 流失分析
- 网络质量
- 风险识别
- 预测
- 基因组分析
- 地质分析
- 图像识别
- 流失分析
- 社交推荐
- 使用分析
- 推荐系统
- 交易分析
三、大数据技术框架
1、什么是大数据处理框架
2、大数据处理框架有哪些
- 仅批处理框架
用于批量处理大数据集的处理框架,可对整个数据集进行操作。
例如:
Apache Hadoop,一种以MapReduce作为默认处理引擎批处理框架。
- 仅流处理框架
用于对随时进入系统的数据进行计算,是一种“无数据边界”的操作方式。
例如:
Apache Storm
Apache Samza
- 混合处理框架
一些大数据处理框架可同时处理批处理和流处理工作负载。
例如:
Apache Spark
Apache Flink
总结:
- 处理框架 一组组件
- 处理引擎 具体对数据操作的工具
- 框架分类
仅批处理框架:apache hadoop MapReduce
仅流处理框架:apache storm apache samza
混合处理框架:apache spark apache flink
四、hadoop生态圈
1、Hadoop历史
雏形开始于2002年的Apache的Nutch,Nutch是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
随后在2003年Google发表了一篇技术学术论文谷歌文件系统(GFS)。GFS也就是google File System,google公司为了存储海量搜索数据而设计的专用文件系统。
2004年Nutch创始人Doug Cutting基于Google的GFS论文实现了分布式文件存储系统名为NDFS。
2004年Google又发表了一篇技术学术论文MapReduce。MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行分析运算。
2005年Doug Cutting又基于MapReduce,在Nutch搜索引擎实现了该功能。
2006年,Yahoo雇用了Doug Cutting,Doug Cutting将NDFS和MapReduce升级命名为Hadoop,
Yahoo开建了一个独立的团队给Goug Cutting专门研究发展Hadoop。
Google和Yahoo对Hadoop的贡献功不可没。
总结:
- NDFS--->HDFS
- MapReduce
2、项目定义
Apache™Hadoop®项目用于可靠,可扩展的分布式计算的开源软件。
Apache Hadoop是一个大数据处理框架,允许使用简单的编程模型跨计算机集群分布式处理大型数据集。
Apache Hadoop可以从单个服务器扩展到数千台计算机。
Apache Hadoop集群中每台计算机都提供本地计算和存储。
Apache Hadoop集群不是依靠硬件来提供高可用性,而是设计了用于检测和处理应用程序层的故障,从而在计算机集群之上提供高可用性服务。
总结:
- 开源软件
- 大数据处理架构
- 单台服务可以,数千台服务器
- 每台服务器都存自己的数据及运算自己的数据
- 把硬件故障认为常态,通过软件把控故障
3、核心项目
Hadoop分布式文件系统(HDFS™):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。
- Hadoop YARN:作业调度和集群资源管理的框架。
- Hadoop MapReduce:基于YARN的系统,用于并行处理大型数据集。
- Hadoop Common:支持其他Hadoop模块的常用实用程序。
- Hadoop Ozone: Hadoop集群所提供的对象存储。
4、相关项目
Apache的其他Hadoop相关项目包括:
- Ambari™
基于Web的工具,用于配置,管理和监控Apache Hadoop集群,包括对Hadoop HDFS,Hadoop
MapReduce,Hive,HCatalog,HBase,ZooKeeper,Oozie,Pig和Sqoop的支持。
Ambari还提供了一个用于查看集群运行状况的仪表板,例如热图,以及可视化查看MapReduce,Pig和Hive应用程序的功能,以及以用户友好的方式诊断其性能特征的功能。
- Avro™
数据序列化系统。
- Cassandra™
可扩展的多主数据库,没有单点故障。
- Chukwa™
用于管理大型分布式系统的数据收集系统。
- HBase™
可扩展的分布式数据库,支持大型表的结构化数据存储。
- Hive™
一种数据仓库基础架构,提供数据汇总和即时查询。
- Mahout™
可扩展的机器学习和数据挖掘库。
- Pig™
用于并行计算的高级数据流语言和执行框架。
- Spark™:
用于Hadoop数据的快速通用计算引擎。Spark提供了一种简单而富有表现力的编程模型,支持广泛的应用程序,包括ETL,机器学习,流处理和图形计算。
- Tez™
基于Hadoop YARN构建的通用数据流编程框架,它提供了一个功能强大且灵活的引擎,可以执行任意DAG任务来处理批量和交互式用例的数据。Tez正在被Hadoop生态系统中的Hive™,Pig™和其他框架以及其他商业软件(例如ETL工具)采用,以取代Hadoop™MapReduce作为底层执行引擎。
- ZooKeeper™
用于分布式应用程序的高性能协调服务。
总结:
- 核心项目 hdfs mapreduce yarn
- 相关项目 ambari hbase hive spark zookeeper
五、Hadoop核心项目Hadoop分布式文件系统(HDFS)介绍
- Hadoop的基础核心就是HDFS和MapReduce,
- Hadoop旗下有很多经典子项目,比如HBase、Hive等,这些都是基于HDFS和MapReduce发展出来的。要想了解Hadoop,就必须知道HDFS和MapReduce是什么。
1、hadoop文件系统定义
- HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)
- 它是一个高度容错性的系统
- 它适合部署在廉价的机器上
- 它能提供高吞吐量的数据访问
- 它适合那些有着超大数据集(large data set)的应用程序
2、hadoop文件系统特点
- 支持大数据文件
非常适合上TB级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。
- 支持文件分块存储
HDFS会将一个完整的大文件平均分块存储到不同计算节点上,它的意义在于读取文件时可以同时从多个计算节点上读取不同区块的文件,多主机读取比单主机读取效率要高得多。
- 支持一次写入,多次读取,顺序读取(流式数据访问)
这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
- 支持廉价硬件
HDFS可以部署在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
- 支持硬件故障
HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
- 支持大文件
- 分块
- 廉价设备
- 支持硬件故障
3、hadoop分布式文件系统关键词
- Block
- 用于保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果 出错,NameNode就失效了。
- 接收用户的操作请求。
- 维护文件系统的目录结构。
- 管理文件和Block之间的映射管理。
- 管理 block 和 DataNode 之间的映射。
- 分布在廉价的计算机上,用于存储Block块文件。
- 文件被分成块存储到 DataNode 的磁盘上。
- 每个Block(块)可以设置多副本。
- block 文件块 128M/块
- namenode 目录 文件 分块 接收用户访问 文件与block block与datanode
- datanode 存block 副本存储
4、hdfs写数据流程
- 客户端向namenode发起请求
- 客户端向dn发起建立连接请求
- 客户端向dn存储数据
5、hdfs读数据流程
六、Hadoop核心项目编程模型(MapReduce)介绍
1、MapReduce作用
求和:1+5+7+3+4+9+3+5+6=?
Long moneys[] ...
Long max = 0L;
for(int i=0;i<moneys.length;i++){
if(moneys[i]>max){
max = moneys[i];
}
}
此种方法存在问题:如果数组元素比较少的话,完全可以胜任,但是如果数组中的元素数量是海量的话,那么这个方法就会浪费非常多的时间。
- map 把大数据分成小数据,进行计算 通过洗牌的方式给reduce
- reduce 对map的结果进行汇总
2、MapReduce工作流程
MapReduce工作流程:
- map
- reduce
七、Hadoop部署区分依据
八、单机(本地模式)部署
1、单机部署模式介绍
- 单机(本地模式)是Hadoop的默认部署模式。
- 当配置文件为空时,Hadoop完全运行在本地。
- 不需要与其他节点交互,单机(本地模式)就不使用HDFS,也不加载任何Hadoop的守护进程。
- 该模式主要用于开发调试MapReduce程序的应用逻辑。
2、部署软件包获取
2. 获取JDK软件包
[root@localhost ~]#firefox http://download.oracle.com 1
3、部署
[root@localhost ~]#tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local
[root@localhost ~]# cd /usr/local
[root@localhost local]# mv jdk1.8.0_191 jdk
[root@localhost ~]# tar xf hadoop-2.8.5.tar.gz -C /opt
[root@localhost ~]# cd /opt
[root@localhost opt]# mv hadoop-2.8.5 hadoop
[root@localhost ~]#vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/opt/hadoop
export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH
[root@localhost ~]#source /etc/profile
2)测试hadoop可用性
[root@localhost ~]#mkdir /home/input
[root@localhost ~]#cp /opt/hadoop/etc/hadoop/*.xml /home/input
[root@localhost ~]#hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce- examples-2.8.5.jar wordcount /home/input/ /home/output/00
[root@localhost ~]#cat /home/output/00/*
九、伪分布式部署
1、伪分布式部署模式介绍
- Hadoop守护进程运行在本地机器上,模拟一个小规模的的集群。
- 该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入/输出,以及其他的守护进 程交互。
2、修改配置文件
[root@localhost ~]#vim ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
修改JAVA_HOME参数为:
export JAVA_HOME="/usr/local/jdk" 12
[root@localhost ~]#vim ${HADOOP_HOME}/etc/hadoop/core-site.xml
(1)配置fs.defaultFS
<property>
<name>fs.defaultFS</name>
<value>hdfs://hd1:8020</value>
</property>
(2)配置hadoop临时目录
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
配置临时目录前,请先创建此目录,不创建也可以。
HDFS的NameNode数据默认都存放这个目录下,查看 *-default.xml 等默认配置文件,就可以看到很多依赖${hadoop.tmp.dir} 的配置。
默认的 hadoop.tmp.dir 是 /tmp/hadoop-${user.name} ,此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。
[root@localhost ~]#vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
[root@localhost ~]#hdfs namenode –format
[root@localhost ~]#ls /opt/data/tmp/dfs/name/current
- fsimage是NameNode元数据在内存满了后,持久化保存到的文件。
- fsimage*.md5 是校验文件,用于校验fsimage的完整性。
- seen_txid 是hadoop的版本。
- namespaceID:NameNode的唯一ID。
- clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。
3、启动角色
daemon.sh。
[root@localhost ~]#hadoop-daemon.sh start namenode
[root@localhost ~]#hadoop-daemon.sh start datanode 1
[root@localhost ~]#jps
4、HDFS上测试创建目录、上传、下载文件
[root@localhost ~]#hdfs dfs -mkdir /test
[root@localhost ~]#hdfs dfs -put ${HADOOP_HOME}/etc/hadoop/core-site.xml /test
3)读取内容
[root@localhost ~]#hdfs dfs -cat /test/core-site.xml
4)下载文件到本地
[root@localhost ~]#hdfs dfs -get /test/core-site.xml
5、配置yarn
1)Yarn介绍
- A framework for job scheduling and cluster resource management.
- YARN (Yet An other Resouce Negotiator) 另一种资源协调者
- Hadoop的下一代计算框架MRv2将资源管理功能抽象成一个通用系统YARN。
- MRv1的 jobtracker和tasktrack也不复存在,计算框架 (MR, storm, spark)同时运行在之上,使得hadoop进入 了多计算框架的弹性平台时代。
- yarn是一种资源协调者
- 从mapreduce拆分而来
- 带来的好处:让hadoop平台性能及扩展性得到更好发挥
2)使用Yarn好处
- 在某些时间,有些资源计算框架的集群紧张,而另外一些集群资源空闲。 那么这框架共享使用一个则可以大提高利率些集群资源空闲。
- 维护成本低。
- 数据共享。 避免了集群之间移动数据。
- ResourceManager 资源管理
- NodeManager 节点管理
- ResourceManager
负责对各个NodeManager 上的资源进行统一管理和任务调度。
- NodeManager
在各个计算节点运行,用于接收RM中ApplicationsManager 的计算任务、启动/停止任务、和RM中
Scheduler 汇报并协商资源、监控并汇报本节点的情况。
3)配置mapred-site.xml
[root@localhost ~]#cp /opt/hadoop/etc/hadoop/mapred-site.xml.template /opt/hadoop/etc/hadoop/mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4)配置yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hd1</value>
</property>
yarn.nodemanager.aux-services配置yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
yarn.resourcemanager.hostname指定了Resourcemanager运行在哪个节点上。
[root@localhost ~]#yarn-daemon.sh start resourcemanager 1
[root@localhost ~]#yarn-daemon.sh start nodemanager 1
[root@localhost ~]#jps
6)YARN的Web页面
YARN的Web客户端端口号是8088,通过http://hd1:8088/可以查看。
7)测试
在Hadoop的share目录里,自带了一些jar包,里面带有一些mapreduce实例小例子,位置在
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar,可以运行这些例子体验刚搭建好的Hadoop平台,我们这里来运行最经典的WordCount实例。
① 创建目录
[root@localhost ~]#hdfs dfs -mkdir -p /test/input
创建原始文件,在本地/opt/data目录创建一个文件wc.input,内容如下:
tom jime
hadoop hive
hbase hadoop tom
② 上传文件
将wc.input文件上传到HDFS的/test/input目录中:
[root@localhost ~]#hdfs dfs -put /opt/data/wc.input /test/input
③ 运行实例
[root@localhost ~]#yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples- 2.8.5.jar wordcount /test/input /test/output
④ 查看输出结果
[root@localhost ~]#hdfs dfs -ls /test/output
output目录中有两个文件,_SUCCESS文件是空文件,有这个文件说明Job执行成功。
part-r-00000文件是结果文件,其中-r-说明这个文件是Reduce阶段产生的结果,mapreduce程序执行时,可以没有reduce阶段,但是肯定会有map阶段,如果没有reduce阶段这个地方有是-m-。
一个reduce会产生一个part-r-开头的文件。
6、停止hadoop
[root@localhost ~]#hadoop-daemon.sh stop namenode
[root@localhost ~]#hadoop-daemon.sh stop datanode
[root@localhost ~]#yarn-daemon.sh stop resourcemanager
[root@localhost ~]#yarn-daemon.sh stop nodemanager
7、开启历史服务及查看
Hadoop开启历史服务可以在web页面上查看Yarn上执行job情况的详细信息。可以通过历史服务器查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。
[root@localhost ~]#mr-jobhistory-daemon.sh start historyserver
开启后,可以通过Web页面查看历史服务器:
http://localhost:19888
8、开启日志聚集
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
yarn.log-aggregation-enable:是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds:设置日志保留时间,单位是秒。
以上内容要复制给集群所有主机。
[root@localhost ~]#stop-yarn.sh
[root@localhost ~]#start-yarn.sh 12
[root@localhost ~]#mr-jobhistory-daemon.sh stop historyserver
[root@localhost ~]#mr-jobhistory-daemon.sh start historyserver
十、NameNode HA+完全分布式部署
1、HA简介
2、NameNode HA切换实现方法
zkfc提供以下功能:
3、NameNode HA数据共享方法
4、部署规划
5、 实施
1)系统时间同步
[root@localhost ~]#ntpdate time1.aliyun.com
[root@localhost ~]#vim /etc/hosts
192.168.208.5 hd1
192.168.208.10 hd2
192.168.208.20 hd3
192.168.208.30 hd4
192.168.208.40 hd5
192.168.208.50 hd6
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@localhost ~]#firefox http://download.oracle.com
[root@localhost ~]#tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local
[root@localhost ~]#mv /usr/local/jdk1.8 /usr/local/jdk
[root@localhost ~]#ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
[root@localhost ~]#cd /root/.ssh
[root@localhost ~]#cp id_rsa.pub authorized_keys
[root@localhost ~]#for i in hd2 hd3 hd4 hd5 hd6;do scp -r /root/.ssh $i:/root;done
- 恢复数据;
- 维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型;
- 3Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理;
- 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
- 接收Leader消息并进行处理;
- 接收Client的请求,如果为写请求,发送给Leader进行投票;
- 返回Client结果;
[root@localhost ~]#wget https://www-eu.apache.org/dist/zookeeper/zookeeper- 3.4.13/zookeeper-3.4.13.tar.gz
③ 部署软件包
[root@localhost ~]#tar xf zookeeper-3.4.13.tar.gz -C /usr/local
[root@localhost ~]#mv /usr/local/zookeeper-3.4.13 /usr/local/zookeeper
[root@localhost ~]#mv /usr/local/zookeeper/conf/zoo.sample.cfg /usr/local/zookeeper/conf/zoo.cfg
[root@localhost ~]#vim /usr/local/zookeeper/conf/zoo.cfg
data=/opt/data
server.1=hd4:2888:3888
server.2=hd5:2888:3888
server.3=hd6:2888:3888
[root@localhost ~]#mkdir /opt/data
[root@localhost ~]#echo 1 > /opt/data/myid
每台服务器myid不同,需要分别修改,例如server.1对应的myid内容为1,server.2对应的myid内容为2,server.3对应的myid为3。
2888端口:follower连接到leader机器的端口。
3888端口:leader选举端口。
[root@localhost ~]#vim /etc/profile.d/hadoop.sh
export JAVA_HOME=/usr/local/jdk
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=${JAVA_HOME}/bin:${ZOOKEEPER_HOME}/bin:$PATH
[root@localhost ~]# source /etc/profile
[root@localhost ~]#zkServer.sh start
[root@localhost ~]#zkServer.sh status
[root@localhost ~]#zkServer.sh stop
7)hadoop软件包获取
[root@localhost ~]#wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop- 2.8.5.tar.gz
[root@localhost ~]#tar xf hadoop-2.8.5.tar.gz -C /opt
[root@localhost ~]#vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk
[root@localhost ~]#vim core-site.xml
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定hadoop临时目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hd4:2181,hd5:2181,hd6:2181</value>
</property>
③ hdfs-site.xml
[root@localhost ~]#vim hdfs-site.xml
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hd1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hd1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hd2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hd2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hd4:8485;hd5:8485;hd6:8485/ns1</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/data/journal</value>
</property>
<!-- 开启NameNode失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</valu e>
</property>
<!-- 配置隔离机制 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
④ 配置datanode节点记录文件 slaves
[root@localhost ~]#vim slaves
hd4
hd5
hd6
⑤ mapred-site.xml
[root@localhost ~]#cp /opt/hadoop285/etc/hadoop/mapred-site.xml.template /opt/hadoop285/etc/hadoop/mapred-site.xml
[root@localhost ~]#vim mapred-site.xml
<!-- 指定mr框架为yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
⑥ yarn-site.xml
[root@localhost ~]#vim yarn-site.xml
<!-- 指定resourcemanager地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hd3</value>
</property>
<!-- 指定nodemanager启动时加载server的方式为shuffle server -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
9)复制修改后的hadoop目录到所有集群节点
[root@localhost ~]#scp -r hadoop hdX:/opt
[root@localhost ~]#scp /etc/profile.d/hadoop.sh hdX:/etc/profile.d/
[root@localhost ~]#source /etc/profile
[root@localhost ~]#zkServer.sh start
[root@localhost ~]#hadoop-daemons.sh start journalnode
[root@localhost ~]#jps
[root@localhost ~]#hdfs namenode -format
格式化完成后,请把/opt/data/tmp目录拷贝至hd2相应的位置,hd2将不再需要格式化,可以直接使用。
[root@localhost ~]#hdfs zkfc -formatZK
[root@localhost ~]#start-dfs.sh
[root@localhost ~]#start-yarn.sh
16)访问
十一、Ambari自动部署Hadoop
1、Ambari介绍
- 提供Hadoop集群
[root@localhost ~]#hdfs zkfc -formatZK
[root@localhost ~]#start-dfs.sh
[root@localhost ~]#start-yarn.sh
2. Ambari处理群集的Hadoop服务配置。
- 管理Hadoop集群
- 监控Hadoop集群
- Ambari使应用程序开发人员和系统集成商
2、Ambari部署
[root@ambariserver ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.122.X" #各主机IP地址自行规划
PREFIX="24"
GATEWAY="192.168.122.1"
DNS1="119.29.29.29"
[root@localhost ~]#ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''
[root@localhost ~]#cd /root/.ssh
[root@localhost ~]#cp id_rsa.pub authorized_keys
[root@localhost ~]#scp -r /root/.ssh 192.168.208.x:/root
[root@localhost ~]#vim /etc/hosts
192.168.122.10 ambariserver.a.com ambariserver
192.168.122.20 hd1.a.com hd1
192.168.122.30 hd2.a.com hd2
192.168.122.40 hd3.a.com hd3
192.168.122.50 hd4.a.com hd4
192.168.122.60 hd5.a.com hd5
[root@localhost ~]#tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local
[root@localhost ~]#mv /usr/local/jdk1.8_91 /usr/local/jdk
[root@localhost ~]#yum -y install mariadb mariadb-server
[root@localhost ~]#systemctl start mariadb
[root@localhost ~]#systemctl enable mariadb
[root@localhost ~]#mysqladmin -uroot password "abc123"
[root@localhost ~]#mysql -uroot -pabc123
>create database ambari character set utf8;
> grant all on ambari.* to 'ambari'@'%' identified by 'abc123';
> grant all on ambari.* to 'ambari'@'ambariserver.a.com' identified by 'abc123';
> grant all on ambari.* to 'ambari'@'ambariserver' identified by 'abc123';
grant all on . to 'root'@'ambari.a.com' identified by "abc123";
create database ambari character set utf8;
create user 'ambari'@'%' identified by "abc123456";
grant all on . to 'ambari'@'%';
update mysql.user set password=password('abc123456') where user='ambari';
[root@localhost ~]# mysql -h ambariserver.a.com -uambari -pabc123
[root@localhost ~]#yum -y install mysql-connector-java
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]#tar xf ambari-2.6.1.0-centos7.tar.gz -C /var/www/html/
[root@localhost ~]#tar xf HDP-2.6.4.0-centos7-rpm.tar.gz -C /var/www/html
[root@localhost ~]#tar xf HDP-UTILS-1.1.0.22-centos7.tar.gz -C /var/www/html
[root@localhost ~]#tar xf HDP-GPL-2.6.4.0-centos7-rpm.tar.gz -C /var/www/html
- ambari源
[root@localhost ~]# vim /etc/yum.repos.d/ambari.repo
[ambari-2.6.1.5]
name=ambari Version - ambari-2.6.1.5
baseurl=http://<web-server-ip> or FQDN /ambari/centos7/2.6.1.5-3
gpgcheck=1
gpgkey=http://<web-server-ip> or FQDN /ambari/centos7/2.6.1.5-3/RPM-GPG-KEY/RPM-GPG- KEY-Jenkins
enabled=1
priority=1
- hdp源
[root@localhost ~]# vim /etc/yum.repos.d/ambari.repo
#VERSION_NUMBER=2.6.4.0-91
[HDP-2.6.4.0]
name=HDP Version - HDP-2.6.4.0
baseurl=http://<web-server-ip> or FQDN /HDP/centos7/2.6.4.0-91
gpgcheck=1
gpgkey=http://<web-server-ip> or FQDN /HDP/centos7/2.6.4.0-91/RPM-GPG-KEY/RPM-GPG-KEY- Jenkins
enabled=1
priority=1
[HDP-UTILS-1.1.0.22]
name=HDP-UTILS Version - HDP-UTILS-1.1.0.22
baseurl=http://<web-server-ip> or FQDN /HDP-UTILS/centos7/1.1.0.22
gpgcheck=1
gpgkey=http://<web-server-ip> or FQDN /HDP/centos7/2.6.4.0-91/RPM-GPG-KEY/RPM-GPG-KEY- Jenkins
enabled=1
priority=1
[HDP-GPL-2.6.4.0]
name=HDP-GPL Version - HDP-GPL-2.6.4.0
baseurl=http://<web-server-ip> or FQDN /HDP-GPL/centos7/2.6.4.0-91
gpgcheck=1
gpgkey=http://<web-server-ip> or FQDN /HDP-GPL/centos7/2.6.4.0-91/RPM-GPG-KEY/RPM-GPG- KEY-Jenkins
enabled=1
priority=1
[root@localhost ~]#ulimit -Sn 软限制
[root@localhost ~]#ulimit -Hn 硬限制
[root@localhost ~]#vim /etc/security/limits.conf
* soft nofile 10240
* hard nofile 20480
2)部署Ambari Server
[root@localhost ~]#yum -y intsall ambari-server
3)初始化Ambari Server
[root@localhost ~]#mysql -h ambariserver.a.com -uambari -pabc123
>use ambari;
>source /var/lib/ambari-server/resources/Ambari-DDL-MySQL-CREATE.sql;
>show tables;
Ambari Server初始化:
[root@localhost ~]#ambari-server setup
Customize user account for ambari-server daemon [y/n] (n)?y
Enter user account for ambari-server daemon (root):root
Do you want to change Oracle JDK [y/n] (n)? y
[1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
[2] Oracle JDK 1.7 + Java Cryptography Extension (JCE) Policy Files 7
[3] Custom JDK ==============================================================================
Enter choice (1): 3
Path to JAVA_HOME: /usr/local/jdk
Enable Ambari Server to download and install GPL Licensed LZO packages [y/n] (n)? n
Enter advanced database configuration [y/n] (n)? y Configuring database... ==============================================================================
Choose one of the following options:
[1] - PostgreSQL (Embedded)
[2] - Oracle
[3] - MySQL / MariaDB
[4] - PostgreSQL
[5] - Microsoft SQL Server (Tech Preview)
[6] - SQL Anywhere
[7] - BDB
==============================================================================
Enter choice (3): 3
Hostname (localhost): ambari.a.com
Port (3306):3306
Database name (ambari):ambari
Username (ambari): ambari
Enter Database Password :abc123456
WARNING: Before starting Ambari Server, you must run the following DDL against the database to create the schema: /var/lib/ambari-server/resources/Ambari-DDL-MySQL- CREATE.sql
Proceed with configuring remote database connection properties [y/n] (y)?y
4)启动Ambari Server
[root@localhost ~]#ambari-server start
[root@localhost ~]#/sbin/chkconfig ambari-server on
出现ERROR时,如果退出码状态为非0或0,并报告没有8080端口启动,请稍等待片刻。
部署JDK:
[root@localhost ~]#for i in hd{1..5};do scp -r /usr/local/jdk $i:/usr/local;done
[root@localhost ~]#for i in hd{1..5};do scp -r /etc/yum.repos.d/ambari.repo /etc/yum.repos.d/hdp.repo $i:/etc/yum.repos.d;done
[root@localhost ~]#yum -y install ambari-agent
[root@localhost ~]#systemctl start ambari-agent
[root@localhost ~]#/sbin/chkconfig ambari-agent on
报错解决方法:
提示:
Connecting to https://amabri_server_host:8440/ca ERROR
[root@localhost ~]#rpm -qa | grep openssl
openssl-1.0.2k-12.el7.x86_64 openssl-libs-1.0.2k-12.el7.x86_64
[root@localhost ~]# vi /etc/python/cert-verification.cfg
[https]
verify=disable #修改
[root@localhost ~]#vim /etc/ambari-agent/conf/ambari-agent.ini
[security]
force_https_protocol=PROTOCOL_TLSv1_2 #添加一行
[root@localhost ~]#ambari-agent restart
部署完成。
十二、Hadoop监控
十三、验证Hadoop集群可用性
[root@hd2 ~]# su - hdfs
[hdfs@hd2 ~]$ vim test.txt
tom
ken
192.168.1.1
[hdfs@hd2 ~]$ hdfs dfs -ls /
[hdfs@hd2 ~]$ hdfs dfs -mkdir /input
[hdfs@hd2 ~]$ hdfs dfs -put test.txt /input
[hdfs@hd2 ~]$ hadoop jar /usr/hdp/3.1.0.0-78/hadoop-mapreduce/hadoop-mapreduce- examples.jar wordcount /input /output
[root@hd2 ~]# hdfs dfs -cat /output/part-r-00000
192.168.1.1 1
ken 1
tom 1