初识大数据之Hadoop部署

大数据

随着信息的增长,互联网,物联网建设的加快,信息增长的速度飞快。但是收集、检索、统计这些信息很困难,必须使用新的技术来解决这些问题,这就是诞生了大数据。

大数据指无法在一定时间范围内用常规软件工具进行捕捉,管理和处理的数据集合,需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

也指从各种各样类型的数据中,快速获取有价值的信息。

用途:

企业组织利用相关数据分析帮助他们降低成本、提高效率、开发新产品、做出更明智的业务决策等

把数据集合并后进行分析得出的信息和数据关系性,用来察觉商业趋势、判定研究质量、避免疾病扩散、打击犯罪或测定即时交通路况等

大规模并处理数据库,数据挖掘电网,分布式文件系统或数据库,云计算平和可扩展的存储系统等

大数据特性

Volume(大体量)可从数百TB到数十数百PB、甚至EB的规模
Variety(多样性)大数据包括各种格式和形态的数据
Velocity(时效性)很多大数据需要在一定的时间限度下得到及时处理
Veracity(准确性)处理的结果要保证一定的准确性
Value(大价值)包含很多深度的价值,大数据分析挖掘和利用将带来很大的商业价值

Hadoop平台

平台:是一种分析和处理海量数据的软件平台,是一款开源软件,可以提供分布式基础架构

特点:高可靠性,高扩展性,高效性,高容错性,低成本

来源:

2003年Google三个系统GFS,MapReduce,BigTable。

Yahoo资助的Hadoop,基于java开发。 GFS---> HDFS     MapReduce---->MapReduce    Bigtable----> Hbase

GFSGFS是一个可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用,可以运行于廉价的普通硬件上,提供容错功能
MapReduce针对分布式并行计算的一套编程模型,由Map和Reduce组成,Map是映射,把指令分到多个worker上,Reduce是规约,把worker计算出的结果合并
BigTable存储结构化数据,建立在GFS,Scheduler,Lock Service和MapReduce之上,每个Table都是一个多维的稀疏图

组件:

HDFSHadoop分布式文件系统(核心组件)
MapReduce分布式计算框架(核心组件)
Yarn集群资源管理系统(核心组件)
Zookeeper分布式协作服务
Hbase分布式列存数据库
Hive基于Hadoop的数据仓库
Sqoop数据同步工具
Pig基于Hadoop的数据流系统
Mahout数据挖掘算法库
Flume日志收集工具

HDFS角色 Hadoop中数据存储管理的基础,是一个高度容错的系统, 用于在低成本的通用硬件上运行

Client                          客户端,切分文件;访问HDFS;与NameNode交互,获取文件位置信息;与DataNode交互,读取和写入数据

NameNode                 Master节点,管理HDFS的名称空间(fsimage)和数据块映射信息,配置副本策略,处理所有客户端请求

SecondaryNode       定期合并fsimage和fsedits,推送给NameNode,紧急情况下,可辅助恢复NameNode,但并不是热备份

DataNode                    数据存储节点,存储实际的数据。汇报存储信息给NameNode

Block                            每块默认128M大小,每块可以多个副本

                  HDFS-Client    <--------------->          NameNode   < --------------->     Secondary-NameNode

                    切分数据                                         保存fsimage                               定期合并fsimage和fsedits(变更日志)

                                                                                    ||

                                                                                    V

                   DataNode             DotaNode             DotaNode              DataNode                   DotaNode

                     存储数据                 存储数据               存储数据                 存储数据                     存储数据

                     1    2   3                   1   2    3           默认3份数据(2副本) 1    2    3                     1   2    3

MapReduce结构 java实现的分布式计算框架

                    client <————|

                    client <————|———————>          JobTracker

                    client <————|                                              |

                                                                                              V

                    TaskTracker                                            TaskTracker                                                     TaskTracker   

Map task    Reduce task   Map task        Map task    Reduce task   Map task              Map task    Reduce task   Map task

Job TrackerMaster节点只有一个,管理所有作业/任务的监控,错误处理等,将任务分解成一系列任务,分配给Task Tracker
Task TrackerSlave节点,一般是多台;运行Map Task和Reduce Task;并与Job Tracker交互,汇报任务状态

Map Task

解析每条数据记录,传递给用户编写map()并执行,将输出写入本地磁盘(如果为map-only作业),直接写入HDFS

Reducer Task从Map Task的执行结果中,远程读输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行

Yarn 通用的资源管理系统

Resourcemanager

处理客户端请求,启动/监控ApplicationMaster,监控Nodemanager,资源分配与调度

Nodemanager单个节点上的资源管理,处理来自ResourceManager的命令,处理来自ApplicationMaster的命令
ApplicationMaster数据切分,为应用程序申请资源,并分配给内部任务,任务监控与容错
Container

对任务运行环境的抽象,封装了CPU,内存等;

多维资源以及环境变量,启动命令等任务运行相关的信息资源分配与调度

Client用户与yarn交互的客户端程序,提交应用程序,监控应用程序状态,杀死应用程序等

Yarn的核心思想:将Job Tracker和Task Tacker进行分离,它由下面组件构成

                                 ResourceManager一个全局的资源管理器  NodeManager每个节点(RM)代理

                                 ApplicationMaster表示每个应用  每一个ApplicationMaster有多个Container在NodeManager上运行

Hadoop安装和配置

官方文件位置    http://hadoop.apache.org/docs/

模式:单机模式    伪分布式(所有角色放到一台机器)  完全分布式

单机模式

环境要求:2G内存,2cpu,大于20G内存,禁用selinux,firewalld,配置/etc/hosts,主机名能ping通,192.168.1.10  mynn01

注:如果磁盘空间不足,hadoop会强制进入到保护模式

[root@localhost ~]# hostnamectl set-hostname mynn01
[root@mynn01 ~]# vim /etc/hosts
192.168.1.10 mynn01

安装hadoop:依赖java-1.8.0-openjdk-devel      hadoop-2.7.6.tar.gz

[root@mynn01 ~]# yum -y install java-1.8.0-openjdk-devel
[root@mynn01 hadoop]# java -version
openjdk version "1.8.0_131"
[root@mynn01 hadoop]# jps                                 //查看本机jvm进程
1478 Jps
[root@mynn01 ~]# tar -zxf  hadoop-2.7.6.tar.gz 
[root@mynn01 ~]# mv hadoop-2.7.6   /usr/local/hadoop
[root@mynn01 ~]# ls /usr/local/hadoop
bin  include  libexec      NOTICE.txt  sbin
etc  lib      LICENSE.txt  README.txt  share
[root@mynn01 hadoop]# ./bin/hadoop  -version
Error: JAVA_HOME is not set and could not be found.         //没有找到java的家目录
[root@mynn01 hadoop]# rpm -ql java-1.8.0-openjdk           
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre/bin/policytool
...

修改配置文件:

Hadoop-env.sh     JAVA_HOME    HADOOP_CONF_DIR

[root@mynn01 hadoop]# pwd
/usr/local/hadoop/etc/hadoop
[root@mynn01 hadoop]# vim hadoop-env.sh 
...
31 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre"
...
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
[root@mynn01 hadoop]# /usr/local/hadoop/bin/hadoop  version
Hadoop 2.7.6
...

统计文档单词数

[root@mynn01 hadoop]# cd /usr/local/hadoop/
[root@mynn01 hadoop]# mkdir  in
[root@mynn01 hadoop]# cp *.txt  in
[root@mynn01 hadoop]# ./bin/hadoop  jar   share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount in  out      
// //wordcount为参数 统计in这个文件夹,存到out这个文件里面(这个文件不能存在,要是存在会报错,是为了防止数据覆盖
[root@mynn01 hadoop]# cat out/part-r-00000            //查看统计结果

完全分布式

配置文件   hadoop-env.sh    core-site.xml(核心)   slaves(节点)   hdfs-site.xml(HDFS配置)    (yarn-site.xml  mapred-site.xml)

xml文件配置格式  

<property>
   <name>        关键字   </name>
   <value>       变量值   </value>
   <description>  描述    </description>
</property>

环境:2G内存,2cpu,大于20G内存,禁用selinux,firewalld,配置/etc/hosts,主机名互相能ping通

mynn01 192.168.1.10NameNode  SecondaryNameNode

node1 192.168.1.11

DataNode
node2 192.168.1.12DataNode
node3 192.168.1.13DataNode
[root@node1 ~]# vim /etc/hosts
192.168.1.10 mynn01
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3               
[root@node1 ~]# yum -y install java-1.8.0-openjdk-devel
[root@node1 ~]# java -version
[root@node1 ~]# jps

配置无密钥链接

[root@mynn01 hadoop]# vim /etc/ssh/ssh_config
StrictHostKeyChecking no
[root@mynn01 .ssh]# cd /root/.ssh
[root@mynn01 .ssh]# ssh-keygen -b 2048 -t rsa -N '' 
[root@mynn01 .ssh]# for i in 192.168.1.{10,11,12,13}
> do
> ssh-copy-id $i
> done

修改mynn01的配置文件

[root@mynn01 hadoop]# vim etc/hadoop/core-site.xml 
...
<configuration>
  <property>
    <name>fs.defaultFS</name>                       //文件系统配置参数
    <value>hdfs://mynn01:9000</value>                     
  </property>
  <property>
    <name>hadoop.tmp.dir</name>                      //数据目录配置参数
    <value>/var/hadoop</value>
  </property>
</configuration>
[root@mynn01 hadoop]# mkdir  /var/hadoop            //在node1,2,3上也创建此目录

[root@mynn01 hadoop]# vim etc/hadoop/hdfs-site.xml 
<configuration>
<property>
   <name>dfs.namenode.http-address</name>            //地址声明
   <value>mynn01:50070</value>
</property>
<property>
   <name>dfs.namenode.secondary.http-address</name>   //地址声明
   <value>mynn01:50090</value>
</property>
<property>
   <name>dfs.replication</name>                      //文件冗余份数
   <value>2</value>
</property>
 </configuration>

[root@mynn01 hadoop]# vim etc/hadoop/slaves           //节点配置文件
node1
node2
node3

同步配置 /usr/local/hadoop  到 node1,node2,node3

[root@mynn01 hadoop]# yum -y install rsync            //所有节点军需要安装rsync
[root@mynn01 hadoop]# ansible all -m shell -a 'yum -y install rsync'
[root@mynn01 hadoop]# for i in 192.168.1.{11,12,13}; do rsync -aSH --delete /usr/local/hadoop/   $i:/usr/local/hadoop/ & 
> done
[1] 11950
[2] 11951
[3] 11952
[root@mynn01 hadoop]# for i in 192.168.1.{11,12,13}; do rsync -aSH --delete /usr/local/hadoop/   $i:/usr/local/hadoop/ & done
[1] 11950
[2] 11951
[3] 11952
[root@mynn01 hadoop]# wait
[1]   完成                  rsync -aSH --delete /usr/local/hadoop/ $i:/usr/local/hadoop/
[2]-  完成                  rsync -aSH --delete /usr/local/hadoop/ $i:/usr/local/hadoop/
[3]+  完成                  rsync -aSH --delete /usr/local/hadoop/ $i:/usr/local/hadoop/
[root@mynn01 hadoop]# ansible all -m shell -a 'ls  /usr/local/hadoop'node1 | SUCCESS | rc=0 >>
...

格式化namenode节点并启动集群

[root@mynn01 hadoop]# ./bin/hdfs namenode -format    //格式化 在namenode节点操作 192.168.1.10
[root@mynn01 hadoop]# ./sbin/start-dfs.sh 

jps验证角色 

[root@mynn01 hadoop]# jps
12326 SecondaryNameNode
12441 Jps
12139 NameNode
[root@mynn01 hadoop]# ./bin/hdfs dfsadmin  -report
...
Live datanodes (3):                                 //有三个角色就可以了

分布式计算框架MapReduce

配置mapred-site.xml在192.168.1.10上操作

[root@mynn01 hadoop]# cp etc/hadoop/mapred-site.xml.template    etc/hadoop/mapred-site.xml
[root@mynn01 hadoop]# vim etc/hadoop/mapred-site.xml
<configuration>
  <property>
    <name>mapreduce.framework.name</name>             //资源管理
    <value>yarn</value>                               //只支持local和yarn两种,单机local,集群yarn
  </property>
</configuration>

yarn部署 资源管理

配置yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
      <name>yarn.resourcemanager.hostname</name>          //地址
      <value>mynn01</value>
  </property>
  <property>
      <name>yarn.nodemanager.aux-services</name>          //使用哪个计算框架
      <value>mapreduce_shuffle</value>                    //计算框架的名称
  </property>
</configuration>

同步配置到node节点

[root@mynn01 hadoop]# ansible all -m copy -a  'src=/usr/local/hadoop/etc/hadoop/mapred-site.xml  dest=/usr/local/hadoop/etc/hadoop/'
[root@mynn01 hadoop]# ansible all -m copy -a  'src=/usr/local/hadoop/etc/hadoop/yarn-site.xml  dest=/usr/local/hadoop/etc/hadoop/'

启动服务

[root@mynn01 hadoop]# ./sbin/start-yarn.sh 
starting yarn daemons
starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-mynn01.out
node1: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node1.out
node3: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node3.out
node2: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-node2.out

验证服务

[root@mynn01 hadoop]# ansible all -m shell  -a  'jps'
node1 | SUCCESS | rc=0 >>
932 DataNode
1514 NodeManager                                  //已启动
1661 Jps
...
[root@mynn01 hadoop]# jps
1041 NameNode
1235 SecondaryNameNode
2276 Jps
1959 ResourceManager                                //已启动节点
[root@mynn01 hadoop]# ./bin/yarn node --list
19/01/23 09:50:57 INFO client.RMProxy: Connecting to ResourceManager at mynn01/192.168.1.10:8032
Total Nodes:3
         Node-Id	     Node-State	Node-Http-Address	Number-of-Running-Containers
     node3:36185	        RUNNING	       node3:8042	                           0
     node1:38169	        RUNNING	       node1:8042	                           0
     node2:46025	        RUNNING	       node2:8042	                           0

web访问Hadoop

namenode 192.168.1.10:50070

 secondarynamenode 192.168.1.10:50090

 resourcemanager 192.168.1.10:8088

 datanode 192.168.1.11:50075

 nodemanager 192.168.1.11:8042

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值