赞
踩
Hadoop是 Apache 旗下的一个用 java 语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。
分布式文件系统
) : 解决海量数据存储作业调度和集群资源管理的框架
) : 解决资源任务调度分布式运算编程框架
) : 解决海量数据计算 Hadoop发行版本分为开源社区版和商业版 , 社区版是Apache软件基金会维护的, 是官方维护的版本 ; 商业版指第三方商业公司在社区版基础上进行优化 , 整合 , 测试 , 较为著名的有cloudera的CDH、mapR等
Hadoop 2.0 则包含一个支持 NameNode 横向扩展的 HDFS,一个资源管理系统YARN 和一个运行在 YARN 上的离线计算框架 MapReduce。相比于 Hadoop1.0,Hadoop 2.0 功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。
我们使用当前2系列最稳定的版本 : Apache Hadoop 2.7.4。
Hadoop集群 = HDFS集群 + YARN集群 , 两者都是主从集群 , 一主带多从 , 两者逻辑上分离 , 物理上常常在一起
HDFS 集群负责海量数据的存储,集群中的角色主要有:
NameNode : 主角色
DataNode : 从角色
SecondaryNameNode : 秘书角色
YARN 集群负责海量数据运算时的资源调度,集群中的角色主要有 :
简写
nn namenode
dn datanode
snn SecondaryNameNode
rm ResourceManager
nm NodeManager
mr mapreduce
Hadoop 部署方式分三种,Standalone mode (独立模式)、Pseudo-Distributedmode(伪分布式模式)、Cluster mode(群集模式),其中前两种都是在单机部署。
扩展 :
集群规划:
结合软件中组件的特性和服务器的硬件做出合理的角色分配
如果两个角色间所依赖的硬件有冲突 尽量不在一起
如果两个角色间有工作上的依赖 尽量在一起
补充:nodemanager和datanode是好基友 成双成对出现
我们部署的是Cluster mode ( 集群模式 )
node-1 : namenode datanode | resourcemanager nodemanager
node-2 : secondarynamenode datanode | nodemanager
node-3 : datanode | nodemanager
如果企业中需要扩大集群规模:
node-4: datanode nodemanager
node-5: datanode nodemanager
......
规划和最终实际效果要想一致 需要配置文件
中参数做出约束保证。
如何高效的在多台机器上搭建分布式的软件?
一般选择一台机器先配置好 后scp到其他各个机器
Hadoop集群图解
tips: mapreduce(mr)是计算框架 , 是代码层的组件 , 当我们需要计算大数据的时候, 需要自己动手编程mr , mr在hadoop集群上运行
本案例使用 VMware Workstation Pro 虚拟机创建虚拟服务器来搭建 HADOOP集群,所用软件及版本如下:
VMware Workstation Pro 12.0 或者 14.0
Centos 6.7 64bit
采用NAT方式联网
同步时间
手动同步集群各机器时间
date -s "2018-11-14 11:40:08"
yum install ntpdate
网络同步时间
ntpdate cn.pool.ntp.org
设置主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node-1
配置IP、主机名映射
vi /etc/hosts
192.168.244.151 node-1
192.168.244.152 node-2
192.168.244.153 node-3
配置ssh免密登录
生成ssh免密登录密钥
ssh-keygen -t rsa(四个回车)
执行完这个命令 , 会生成id_rsa(私钥) , id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id node-1
tips: 也需要拷贝给自己 , 其他的机器也需要生成免密登录的密钥 , 然后拷贝即可
设置防火墙
查看防火墙状态
service iptables status
关闭防火墙
service iptables stop
查看防火墙开机启动状态
chkconfig iptables --list
关闭防火墙开机启动
chkconfig iptables off
删除openjdk
rpm -qa | grep java
rpm -e --nodeps xxxxxxxxx
上传jdk安装包
jdk-8u65-linux-x64.tar.gz
到**/export/servers**下
解压安装包(解压到当前包(/export/servers)即可)
tar zxvf jdk-8u65-linux-x64.tar.gz
配置环境变量 vi /etc/profile
export JAVA_HOME=/export/servers/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
刷新配置
source /etc/profile
===> 查看版本java -version
hadoop-2.7.4-src.tar.gz src 源码包
hadoop-2.7.4.tar.gz bin 安装包
Q:为什么有些软件需要自己下载源码进行编译?
maven-package
编译即可 , 具体参考资料中的源码编译这里我们选择将编译好的打包进行安装
上传 hadoop-2.7.4-with-centos-6.7.tar.gz
到**/export/servers**
解压即可 , 也可以删除安装包
了解Hadoop的目录结构
启动/关闭脚本
首先进入配置文件目录cd etc/hadoop/
再进行操作
文件中设置的是 Hadoop 运行时需要的环境变量。JAVA_HOME是必须设置的 , 保证hadoop运行时一定可以加载到JDK
vi hadoop-env.sh
export JAVA_HOME=/export/servers/jdk1.8.0_65
hadoop 的核心配置文件,有默认的配置项 core-default.xml。
vi core-default.xml
<!-- 指定默认文件系统类型,以及文件系统老大所在位置 , namenode在node-1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-1:9000</value>
</property>
<!--指定Hadoop运行时所有数据保存的目录,默认/tmp/hadoop-${user.name}-->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hddata</value>
</property>
HDFS 的核心配置文件,有默认的配置项 hdfs-default.xml。
vi hdfs-site.xml
<!-- 指定HDFS副本的数量, 默认副本数是3-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- secondary namenode 所在主机的 ip 和端口->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node-2:50090</value>
</property>
MapReduce 的核心配置文件,有默认的配置项 mapred-default.xml。
vi mapred-site.xml
<!-- 指定mr运行时框架名称,也就是由谁提供运算资源-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
YARN 的核心配置文件,有默认的配置项 yarn-default.xml。
vi yarn-site.xml
<!-- 指定 YARN 的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node-1</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce
程序默认值:"" -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
slaves 文件里面记录的是集群主机名。
vi slaves
node-1
node-2
node-3
注意 : 先删除本地的 , 这里一行一个 , 不要一行多个
编辑环境变量的配置文件
vi /etc/profile
export HADOOP_HOME=/export/servers/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存配置文件 , 刷新配置文件 :
source /etc/profile
复制到其他机器
scp -r /export/servers/hadoop-2.7.4/ root@node-2:/export/servers/
scp -r /export/servers/hadoop-2.7.4/ root@node-3:/export/servers/
scp -r /etc/profile root@node-2:/etc
scp -r /etc/profile root@node-3:/etc
source /etc/profile
要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。
注意 : 首次启动(是指刚刚搭建好Hadoop集群)HDFS时,必须对其进行格式化操作
。本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。
hdfs namenode -format
或者 hadoop namenode -format
hdfs 格式化 准确来说是对hdfs的文件系统进行初始化的操作 保证运时的目录数据文件等存在。
只可进行一次
如果出现多次格式化 就是使得主从之间的集群ID不一致 导致集群启动失败Q:万一格式化多次怎么破?
解决方式:把每个机器上初始化生成的文件夹都删除 重新格式化一次
格式化会自动创建配置中指定目录(hadoop.tmp.dir) 和生成hdfs运行相关的数据文件
-rw-r--r--. 1 root root 321 Nov 14 11:52 fsimage_0000000000000000000
-rw-r--r--. 1 root root 62 Nov 14 11:52 fsimage_0000000000000000000.md5
-rw-r--r--. 1 root root 2 Nov 14 11:52 seen_txid
-rw-r--r--. 1 root root 208 Nov 14 11:52 VERSION
hadoop-daemon.sh start/stop namenode
hadoop-daemon.sh start/stop datanode
yarn-daemon.sh start/stop resourcemanager
yarn-daemon.sh start/stop nodemanager
如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
开启集群 : start-dfs.sh start-yarn.sh
停止集群 : stop-dfs.sh stop-yarn.sh
前提是配置好免密登录
下面两方式尽量少用 :
开启集群 : start-all.sh
停止集群 : stop-all.sh
一旦Hadoop集群启动并运行 , 可以通过web-ui进行集群查看 , 如下所述:
NameNode http://nn_ip:port/ 默认50070
==>http://node-1:50070 该网站是用于访问的 ; http://node-1:9000该网站是用于操作的
hdfs:本质上就是文件系统 存放文件的(文件就是文件 目录就是目录)
操作起来慢
ResourceManager http://rm_ip:port 默认8088
==>http://node-1:8088
从 Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下
hadoop fs -mkdir -p /test/input
hadoop fs -put /root/startZk.sh /test/input
在 Hadoop 安装包的 hadoop-2.7.4/share/hadoop/mapreduce 下有官方自带的 mapreduce 程序。我们可以使用如下的命令进行运行测试。
示例程序 jar:
hadoop-mapreduce-examples-2.7.4.jar
计算圆周率:
hadoop jar hadoop-mapreduce-examples-2.7.4.jar pi 2 4
关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。