大数据与Hadoop运维三大核心组件的搭建

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            //查看集群状态

猜你喜欢

转载自blog.csdn.net/sxjwcs/article/details/93219182