Hadoop是什么:
– Hadoop是一种分析和处理海量数据的软件平台;
– Hadoop是一款开源软件,使用JAVA开发;
– Hadoop可以提供一个分布式基础架构;
Hadoop特点:
– 高可靠性、高扩展性、高效性、高容错性、低成本
Hadoop常用组件:(下面三个组件是针对于运维,其他的不在此论述)
• HDFS: Hadoop分布式文件系统(核心组件)
• MapReduce: 分布式计算框架(核心组件)
• Yarn: 集群资源管理系统(核心组件)
HDFS结构:
图像 小部件
HDFS角色及概念:(负责存储)
• 是Hadoop体系中数据存储管理的基础,是一个高度容错的系统,用于在低成本的通用硬件上运行
Client :
– 切分文件,将文件切分成块,每块大小128MB,不够的也划分128MB空间.且每块都可以有多个副本;
– 访问HDFS;
– 与NameNode交互,获取文件位置信息;
– 与DataNode交互,读取和写入数据.
NameNode:
– Master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理所有客户端请求.
Secondary NameNode:
– 定期合并fsimage 和fsedits,推送给NameNode;
– 紧急情况下,可辅助恢复NameNode;
但Secondary NameNode并非NameNode的热备.
DataNode:
– 数据存储节点,存储实际的数据;
– 汇报存储信息给NameNode.
原理整合:
<Client>切分数据,并不能直接存储数据,需要访问<NameNode>,由<NameNode>来指定数据存储的位置,然后<Client>将数据存储在相应的<DataNode>中,同时<NameNode>会将数据于位置的映射信息存储在<fsimage>中; HDFS修改数据是采用一种类似于打补丁的方式,将修改信息存放在<fsedits>中,<Secondary NameNode>会定时的将<fsimage>和<fsedits>进行合并,达到更新数据的目的.
MapReduce角色及概念(负责分布式计算):
JobTracker:
– Master节点只有一个;
– 管理所有作业/任务的监控、错误处理等;
– 将任务分解成一系列任务,并分派给TaskTracker;
TaskTracker:
– Slave节点,一般是多台;
– 运行Map Task和Reduce Task;
– 并与JobTracker交互,汇报任务状态.
Map Task:
– 解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入本地磁盘;
– 如果为map-only作业,直接写入HDFS.
Reducer Task:
– 从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行.
简单来讲就是<JobTracker>负责分派任务,<TaskTracker>负责完成任务,<JobTracker>并不会关心通过什么方式完成,整个hadoop都是通过这种类似一个领导,下面管理多个下属,领导负责分派任务,下属负责完成这种方式完成的.
Yarn角色及概念:(负责集群管理)
Container:
– 对任务运行行环境的抽象,封装了CPU 、内存等;
– 多维资源以及环境变量、启动命令等任务运行相关的信息资源分配与调度.
ApplicationMaster:
– 数据切分;
– 为应用程序申请资源,并分配给内部任务;
– 任务监控与容错.
Yarn的核心思想:
将JobTracker和TaskTacker进行分离,它由下面几大构成组件:
– ResourceManager一个全局的资源管理器;
– NodeManager每个节点(RM)代理;
– ApplicationMaster表示每个应用;
– 每一个ApplicationMaster有多个Container在NodeManager上运行.
Hadoop的部署模式有三种:
– 单机
– 伪分布式
– 完全分布式
Hadoop三大核心组件: 分布式文件系统部署(HDFS)
单机模式安装:
– 获取软件: http://hadoop.apache.org
[root@namenode ~]# tar -xf hadoop-2.7.7.tar.gz //解压软件包
root@namenode ~]#chown -R root.root hadoop-2.7.7 //将文件夹及其子文件属主和属组更改为root
root@namenode ~]#mv hadoop-2.7.7 /usr/local/hadoop //重新规划软件路径,且更名
root@namenode ~]#yum list | grep openjdk //查找需要的openjdk的版本
root@namenode ~]#yum -y install java-1.8.0-openjdk-devel //安装jps工具
root@namenode ~]#yum -y install java-1.8.0-openjdk //在安装jps工具的时候,会将其作为依赖包一起安装
root@namenode ~]#vim /etc/hosts //声明自己可以解析自己的主机名
192.168.1.70 namenode
root@namenode ~]# rpm -ql java-1.8.0-openjdk //查看openjdk的安装路径
root@namenode ~]#vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh //修改环境变量
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre" //填写java的安装路径
export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" //hadoop的配置文件路径
Hadoop的单机模式安装很简单,只需配置好环境变量即可运行,这个模式一般用来学习和测试Hadoop的功能
root@namenode ~]# cd /usr/local/hadoop
root@namenode ~]# mkdir input
root@namenode ~]# cp *.txt input/
root@namenode ~]# /user/local/hadoop/bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount input output //hadoop运行java功能计算input中文件的单词数,并将结果输出到output目录下
hadoop完全分布式搭建:
首先按照上图创建虚拟机,更改主机名和IP地址,hadoop的部署是只要将一台配置文件写好,将整个hadoop文件拷贝到其他三台机器上即可,然后从namenode上格式化,启动服务即可.
[root@nn01 ~]# tar -xf hadoop-2.7.7.tar.gz //解压软件包
root@nn01 ~]#chown -R root.root hadoop-2.7.7 //将文件夹及其子文件属主和属组更改为root
root@nn01 ~]#mv hadoop-2.7.7 /usr/local/hadoop //重新规划软件路径,且更名
root@nn01 ~]#yum list | grep openjdk //查找需要的openjdk的版本
root@nn01 ~]#yum -y install java-1.8.0-openjdk-devel //安装jps工具
root@nn01 ~]#yum -y install java-1.8.0-openjdk //在安装jps工具的时候,会将其作为依赖包一起安装
root@nn01 ~]#java -version //验证java安装
root@nn01 ~]#vim /etc/hosts //声明解析主机名,四台机器都配置
192.168.1.60 nn01
192.168.1.61 node1
192.168.1.62 node2
192.168.1.63 node3
root@nn01 ~]#for i in {61..63};do rsync -av /etc/hosts [email protected].$i:/etc/;done //利用rsync同步数据
配置SSH信任关系(NameNode):
– 注意:不能出现要求输入yes的情况,每台机器都要能登录成功,包括本机!!!
root@nn01 ~]#vim /etc/ssh/ssh_config
StrictHostKeyChecking no //发送秘钥后远程连接不再提示输入"yes"
root@nn01 ~]#ssh-keygen -N '' -f /root/.ssh/id_rsa //创建秘钥
root@nn01 ~]#for i in {61..63};do scp-copy-id [email protected].$i; done //将公钥发给datanode机器,保证nn01可以无密码远程数据节点
root@nn01 ~]# rpm -ql java-1.8.0-openjdk //查看openjdk的安装路径
<一>修改环境变量:
root@nn01 ~]#vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh //修改环境变量
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre" //填写java的安装路径
export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" //hadoop的配置文件路径
<二>修改核心配置文件:
root@nn01 ~]#vim /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name> //文件系统配置参数,hdfs就是一个文件系统
<value>hdfs://nn01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> //数据目录配置参宿,数据的存放路径
<value>/var/hadoop</value>
</property>
</configuration>
root@nn01 ~]#mkdir /var/hadoop //创建数据存放目录
root@nn01 ~]#vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.http-address</name> //声明NameNode的地址和端口
<value>nn01:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name> //声明SecondaryNameNode的地址和端口
<value>nn01:50090</value>
</property>
<property>
<name>dfs.replication</name> //文件冗余份数,2代表,源数据一份,备份一份
<value>2</value>
</property>
</configuration>
root@nn01 ~]#vim /usr/local/hadoop/etc/hadoop/slaves //声明数据节点的主机名
node1
node2
node3
root@nn01 ~]#for i in {71..73};do rsync -avSH etc/hadoop [email protected].$i:/usr/local/hadoop/etc/; done
//同步配置,让所有机器配置相同
root@nn01 ~]#/usr/local/hadoop/bin/hdfs namenode -format //在namenode上执行格式化操作, 最后几行中有success成功字样
root@nn01 ~]#/usr/local/hadoop/sbin/start-dfs.sh //启动集群
root@nn01 ~]#/usr/local/hadoop/bin/hdfs dfsadmin -report //可以查看节点的状态信息
root@nn01 ~]#jps //验证NameNode角色
24177 NameNode
24360 SecondaryNameNode
26123 Jps
[root@node1 ~]# jps //验证DataNode角色
23333 DataNode
23405 Jps
以上验证都正常,则HDFS搭建完成.
Hadoop三大核心组件: 分布式计算框架部署(MapReduce)
root@nn01 ~]#cd /usr/local/hadoop/etc/hadoop
root@nn01 hadoop]#mv mapred-site.xml.template mapred-site.xml //直接更改模板就可以
root@nn01 hadoop]#vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name> //资源管理类
<value>yarn</value> //只支持local和yarn两种,单机使用local,集群使用yarn
</property>
</configuration>
Hadoop三大核心组件: 集群资源管理部署(yarn)
root@nn01 ~]#vim /usr/local/hadoop/etc/hadoop/yarn-site.xml //资源管理
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name> //resourcemanager地址
<value>nn01</value> //resourcemanager的主机名nn01
</property>
<property>
<name>yarn.nodemanager.aux-services</name> //nodemanager 使用哪个计算框架
<value>mapreduce_shuffle</value> //计算框架的名称
</property>
</configuration>
root@nn01 ~]#/usr/local/hadoop/sbin/start-yarn.sh //如果修改了,先执行stop-yarn.sh,再start-yarn.sh
验证服务:
root@nn01 ~]#/usr/local/hadoop/bin/yarn node -list //出现下面结果,表示yarn部署成功了
Total Nodes:3
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
node03:39643 RUNNING node03:8042 0
node02:41329 RUNNING node02:8042 0
node01:35737 RUNNING node01:8042
Web访问Hadoop:(在浏览器中输入,会出现web页面)
– namenode web页面(nn01)
# http://192.168.1.60:50070/
– secondory namenode web 页面(nn01)
# http://192.168.1.60:50090/
– datanode web 页面(node1,node2,node3)
# http://192.168.1.62:50075/
使用Web访问Hadoop:
– resourcemanager web页面(nn01)
# http://192.168.1.60:8088/
– nodemanager web页面(node1,node2,node3)
# http://192.168.1.62:8042/
HDFS使用:
• HDFS基本命令
root@nn01 ~]# /usr/local/hadoop/bin/hadoop fs -ls / //对应shell命令ls / ,这里的"/",说的是hdfs文件系统的根路径
/usr/local/hadoop/bin/hadoop fs -mkdir /abc //有时会提醒在安全模式下,创建不了,我们要关闭它
[root@nn01 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -safemode leave //关闭安全模式
[root@nn01 ~]# /usr/local/hadoop/bin/hadoop fs -touchz /zhangsan //在hdfs根下创建文件zhangsan,如果不知道后面有什么选项,可以先回车,会出现选项提示
上传文件:
[root@nn01 ~]# /usr/local/hadoop/bin/hadoop fs -put /root/hadoop-2.7.7.tar.gz /abc //将本机root下的一个文件,上传到hdfs
下载文件:
[root@nn01 ~]#/usr/local/hadoop/bin/hadoop fs -get /zhangsan //将hdfs上的文件下载到当前目录下
Hadoop验证:
– 创建文件夹
[root@nn01 ~]#/usr/local/hadoop/bin/hadoop fs -mkdir /input
– 上传要分析的文件
[root@nn01 ~]# /usr/local/hadoop/bin/hadoop fs -put *.txt /input
– 提交分析作业
[root@nn01 ~]# /usr/local/hadoop/bin/Hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output
– 查看结果
[root@nn01 ~]# /usr/local/hadoop/bin/hadoop fs -cat output/*
HDFS增加节点:
– 启动一个新的系统,设置SSH免密码登录;
– 在所有节点修改 /etc/hosts,增加新节点的主机信息;
– 安装java运行环境(java-1.8.0-openjdk-devel);
– 修改NameNode的slaves文件增加该节点;
– 拷贝NamNode的/usr/local/hadoop到本机;
– 在该节点启动DataNode.
[root@node04 ~]#yum -y install java-1.8.0-openjdk-devel
[root@node04 ~]#vim /etc/hosts
192.168.1.70 namenode
192.168.1.71 node01
192.168.1.72 node02
192.168.1.73 node03
192.168.1.74 node04
[root@node04 ~]# /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode //启动节点
[root@nn01 ~]#/usr/local/hadoop/bin/hdfs dfsadmin -setBalancerBandwidth 500000000 //新增节点后,NameNode要将数据同步到新节点上,由于数据量一般都比较大,需要提高同步带宽,以字节为单位,500000000是500Mb带宽
[root@nn01 ~]#/usr/local/hadoop/sbin/start-balancer.sh
[root@nn01 ~]#/usr/local/hadoop/bin/hdfs dfsadmin -report //查看集群状态