Hadoop01-搭建

一、大数据的概念
举例:城市男女比例调查
【抽样统计】
100个人
-》51男生
-》49女生
-》51:49
-》并不完全-》结果不准确
-》范围太小-》结果偏差
样本数据-》全量数据
1、特点:大
数据-》传统关系型数据库RDBMS-》结构化
电商网站-》商品
用户ID 用户名 性别 用户等级
1 张三 10
2 李四 12
搜索栏-》苹果手机-》与店家进行沟通-》以7000元
Nosql型数据库
3、特点:快
-》MapReduce计算模型-》核心理念:分而治之-》大大提升处理的效率
-》将数据任务“分”开处理,然后将结果“合”在一起存储
-》数据隐私(安全性)
-》个人隐私的信息
-》控制数据访问


二、大数据架构平台
1、离线计算
-》批量计算
2、实时计算
-》流式计算
-》在线分析
-》一般实时和离线都是在一个架构中(集群)-》数据共用共享
-》平台的工作概况:
-》总设备数:比如8000台节点(机器)
-》总数据存储量:300PB+
-》日新增数据:200TB+,月数据增长率:10%
-》存储的数据库的表:5W+
-》日均Job数:100W+
-》日均计算量:6PB+
-》高效、稳定
-》容灾机制、监控系统、恢复机制等...
-》开源
-》成本

三、分布式概念
1、网页搜索的相关信息是如何获取到的?
-》网页爬虫-》网页存储-》存储
-》网页存储-》关键字筛选-》分析
-》关键词-》存储
2、网站数据存储非常大,一台机器无法完成的情况下该怎么办?
3、Google-》分布式,采用多台机器进行处理
4、文件系统-》HDFS分布式文件系统
-》HDFS存储
-》MapReduce计算
5、搜索引擎技术体系
-》【数据获取】
-》从外网抓取数据
-》内部的数据库中的商品信息的同步
-》存储和计算
-》处理之后会生成搜索的索引文件
-》【排序算法】
-》个性化的订制、比如推荐等等
-》返回给前端的用户
-》【离线系统】
-》Hadoop系统架构
-》HDFS存储-》文件
-》HBase存储-》数据
-》操作系统-》YARN
-》处理流程:
-》从外网抓取数据(还有内网,还会有云存储)
-》全量或者增量的导入,实时同步-》HBase
-》经过复杂的离线处理过程(包含很多job,业务逻辑、表join、字段合并等)
-》达到秒级的处理速度

四、Hadoop的架构
1、官网:http://hadoop.apache.org/
2、Apache-》孵化器项目-》升级到顶级项目(TM)
3、特性:
【可靠性】
-》数据的存储可靠性,机器当机的情况出现-》考虑数据是否会丢失
-》HDFS策略-》副本数,一份数据存多份,存在不同的节点上(默认情况下:3个)
-》用户可以自定义副本数的个数
-》保证数据安全性(以硬盘作为代价进行策略操作)
-》HDFS中存储文件的形式:块block的形式存储的,块的大小,块默认大小:128MB
-》用户可以自定义设置块的大小
-》Hadoop 2.x版本中块的默认大小是:128MB,Hadoop 1.x系统中块的默认大小是:64MB
-》存储的块损坏了该怎么办?-》对每个存储的文件生成一个校验码,之后在定期检测或者读取到这个块的时候又会生成一个校验码,进行匹配,如果没有匹配上说明这个块损坏
-》计算的可靠性,在计算处理的过程中出现宕机情况,数据处理是否能够继续,可以继续
【可扩展性】
-》一个集群中可能会出现若干台机器宕机损坏的情况,从机架上拿下来进行人工修复重新上架
-》或者在原本的集群数目上额外增加多台机器,比如:原本100台,追加20台
-》集群搭建的过程中扩展性是一个难点,同步一致性也是一个难点
Cloudera-》发行的版本名称:CDH版本
-》二十一世纪Google三大论文
-》GFS(谷歌文件系统)-》HDFS文件系统
-》BigTable -》HBase分布式数据库
-》MapReduce-》MapReduce计算模型

五、HDFS文件系统
1、分布式-》主从架构:master/slaves
2、主节点和从节点
-》主节点:NameNode,管理
-》存储管理元数据(内存)
-》从节点:DataNode,执行
—》真正存储数据的,消耗的是机器上的磁盘
3、海量数据的文件存储,建立在很多的物理机器上,真正的数据仍然是在物理磁盘上的
4、设计理念:一次写入,多次读取(不能够修改)
5、HDFS只能一个用户写入,目前并不能多用户并发写入
6、文件系统:存储文件-》属性
-》名称
-》位置
-》副本数
-》权限
-》存储的块
-》各个块存储在哪些datanode节点上
....
-》这些文件的属性在HDFS中称作:文件的元数据(命名空间)
7、举例:HDFS存储的块默认大小:256MB
存储的文件大小:500MB
-》第一个块:256MB
-》第二个块:244MB
-》如果HDFS中某个文件块大小小于这个存储的块的大小,是不会占据整个块的存储空间的
-》多个文件是不能放到一个块中的
8、HDFS文件系统读和写:
-》读:HDFS->/tmp/file.txt
-》client-》HDFS(NameNode)
-》client-》HDFS(DataNode)
-》写:local->D盘:file.txt -》 HDFS->/tmp/
-》client-》HDFS(NameNode)
-》client-》HDFS(DataNode)
9、Hadoop中很多的组件之间的通信是根据RPC协议进行通信的(大部分情况下)
10、HDFS就近原则机制
11、HDFS不太适合存储大量的小文件
-》小文件合并
淘宝文件系统TFS-》开源 github

六、YARN框架
1、分布式-》主从架构:master/slaves
2、主节点:ResourceManager 管理型
-》集群整体的资源情况的分配
3、从节点:NodeManager      执行行
-》首先nodemanager和datanode一般会放在一台机器上
-》datanode是消耗磁盘空间,nodemanager是消耗资源
-》集群单个节点资源都是在nodemanager
-》每个Container容器都是在不同的nodemanager节点上运行的
4、集群资源的管理和分配、多任务的调度
5、运行的很多任务
-》运行时间
-》需要资源
6、任务调度流程:
client提交job(MapReduce)-》ResourceManager
job-》map01、map02、map03
  -》每个map任务都需要有一个管理者
  -》应用管理者ApplicationMaster
-》任务的管理、监控、调度
-》MapReduce中有一个经典案例:单词统计wordcount
-》一篇文章分为多个块,对应到不同的map块,最后统计结果进行汇总
-》提交wordcount-》ResourceManager会为这个任务分配一个ApplicationMaster
-》ApplicationMaster为job任务下的map和reduce去向ResourceManager申请资源
-》每个map任务需要在一个独立的资源状态下去运行
-》在yarn中有Container的概念,可以理解为是一个容器
-》每个map任务在各自独立的Container中去运行任务
-》ResourceManager返回给ApplicationMaster的就是多个Container
-》Container起到的就是资源隔离的机制
-》所有的任务运行完成之后ApplicationMaster就会向ResourceManager提交信息
-》无论成功或者失败都会提交信息
-》如果运行失败,重新运行任务,重新提交申请,重新分配资源
-》当任务运行完成之后,任务会关闭,资源会释放
-》ApplicationMaster本身也是需要运行,也需要在Container中启动
-》YARN是在Hadoop2.x系统中才有的新的框架组件
-》原本Hadoop 0.x 或者 Hadoop 1.x版本中组件服务很少
-》HDFS+MapReduce
-》


七、MapReduce计算模型
1、一个计算框架需要有一个输入和一个输出
2、input数据输入-》map处理-》shuffle -》 reduce处理-》output结果输出


八、Hadoop环境部署
1、按照官方的文档进行配置
http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-common/SingleCluster.html
2、上传下载工具lrzsz
使用yum进行在线的安装:yum install lrzsz
命令:上传rz、下载sz
3、在试验环境下为了方便起见,可以为普通用户设置比较大的管理权限
anybigdata ALL=(root)NOPASSWD:ALL
4、忠告:建议从始至终都是使用一个用户去操作环境
5、关闭Linux中的防火墙还有selinux
vi /etc/sysconfig/selinux
SELINUX=disabled-》禁用
Linux中的防火墙:iptables
-》网络层
-》代理层
$ sudo service iptables status
$ sudo service iptables stop
$ sudo chkconfig iptables off
6、查看centos系统自带的JDK是否已经安装,如果安装就要卸载
$ rpm -qa | grep java
$ sudo rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.el6_3.x86_64 tzdata-java-2012j-1.el6.noarch java-1.7.0-openjdk-1.7.0.9-2.3.4.1.el6_3.x86_64
7、安装自己的JDK
解压:$ tar -zxf jdk-7u67-linux-x64.tar.gz -C /opt/moduels/
配置环境变量:
vi /etc/profile
##JAVA_HOME
export JAVA_HOME=/opt/moduels/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
生效文件:
# source /etc/profile
查看是否配置成功:
$ java -version
8、配置Hadoop
-》解压:$ tar -zxf /opt/software/hadoop-2.5.0.tar.gz -C /opt/moduels/
-》清理工作:建议先将/opt/moduels/hadoop-2.5.0/share下的doc目录删除
-》在etc/hadoop/hadoop-env.sh文件修改指定Java的安装路径
-》另外的两个文件:mapred-env.sh和yarn-env.sh文件同样需要指定
export JAVA_HOME=/opt/moduels/jdk1.7.0_67
-》Hadoop的运行模式
Local (Standalone) Mode -》本地单机模式 -》本地文件系统
Pseudo-Distributed Mode -》伪分布式模式 -》HDFS文件系统
Fully-Distributed Mode -》完全分布式模式 -》HDFS文件系统(实际生产环境使用的集群)
-》所有的参数用户可以自定义
-》如果参数用户没有定义,系统会使用默认的值
-》修改core-site.xml文件,指定默认的文件系统,访问入口
-》指定NameNode主节点所在的机器位置以及交互端口号
-》9000是Hadoop1.x系列使用的旧的端口,Hadoop2.x使用8020端口
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata-senior01.ianybigdata.com:8020</value>
</property>
-》指定Hadoop系统生成文件的临时目录地址,自定义路径替换
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/moduels/hadoop-2.5.0/data/tmp</value>
</property>
-》修改hdfs-site.xml文件,指定副本数的个数
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
-》修改slaves文件
-》添加datanode的所在机器位置主机名
bigdata-senior01.ianybigdata.com
-》格式化namenode
$ bin/hdfs namenode -format
-》注意,不要格式化多次
-》启动namenode和datanode
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
-》使用jps查看Java进程
-》通过浏览器访问HDFS的外部UI界面,加上外部交互端口号:50070
http://bigdata-senior01.ianybigdata.com:50070
-》使用IP地址加端口同样也可以访问
-》出现无法访问的情况,可能是防火墙导致的,也可能是selinux导致的
-》还有可能是本地windows的hosts文件网络映射没有设置
-》测试HDFS环境
-》HDFS和Linux文件系统类似,有用户主目录的概念
-》创建:$ bin/hdfs dfs -mkdir -p /user/anybigdata/bf
-》上传:$ bin/hdfs dfs -put etc/hadoop/core-site.xml /user/anybigdata/bf
-》读取:$ bin/hdfs dfs -text /user/anybigdata/bf/core-site.xml
-》下载:$ bin/hdfs dfs -get /user/anybigdata/bf/core-site.xml /home/anybigdata/get-site.xml
=============================HDFS部分====================================
=============================yarn&MapReduce==============================
-》修改mapred-site.xml.template,mapred-site.xml去掉后缀
-》template代表默认不生效该文件
-》代表MapReduce运行yarn在之上
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
-》添加一个MapReduce运行的服务
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
-》【可配置项】指定resourcemanager主节点的机器位置,可配可不配
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata-senior01.ianybigdata.com</value>
</property>
-》启动:
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/yarn-daemon.sh start nodemanager 
-》外部访问UI界面,加上外部交互端口号8088
bigdata-senior01.ianybigdata.com:8088
-》运行wordconut单词统计程序测试环境
-》在HDFS上创建对应的路径
-》$ bin/hdfs dfs -mkdir -p mapreduce/input
-》在MapReduce中output的输出路径是不需要提前存在的
-》在yarn运行job时候都必须要打jar包
-》执行Wordcount程序:
$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/anybigdata/mapreduce/input /user/anybigdata/mapreduce/output
-》part-r-00000其中r代表reduce的输出结果
-》查看结果集:$ bin/hdfs dfs -text /user/anybigdata/mapreduce/output/p*
=============================搭建完成!==============================

九、Hadoop的日志文件
1、在hadoop-2.5.0/logs目录下存放了Hadoop的运行服务日志文件
2、记住查看日志文件一定要查看以 .log后缀的日志文件,切记
3、出错了以后一定要学会查看日志,定位错误才会准确

十、SecondaryNameNode
1、格式化namenode之后会生成元数据文件,文件系统会有一个根目录
2、元数据存放在namenode内存中(启动以后)
3、namenode在启动之前,元数据同样会在本地的文件系统中
4、fsimage元数据镜像文件-》存储元数据,namenode在启动的时候会读取fsimage文件
5、用户对于HDFS文件系统的任何行为操作都会导致元数据发生变化-》内存肯定会知道
6、对于HDFS用户行为操作的所有记录都会写到一个文件中,编辑日志文件中,edits文件
7、namenode主节点启动以后会先去读取fsimage文件,再去读取edits文件
8、一般工作中namenode不太会轻易的重启或者关闭
9、用户对于HDFS的操作行为越多,edits文件会越来越大,导致读取时间过长
10、SecondaryNameNode可以来解决这样的问题
-》合并fsimage文件和edits文件
-》减少namenode启动的时间
11、SecondaryNameNode回去读取fsimage文件和edits文件,加载到内存-》写到一个新的fsimage文件
12、初始的fsimage文件和edits文件=新的fsimage文件
13、再生成一个新的edits文件
14、下次namenode启动的时候回去直接读取新的fsimage文件,速度会快很多
15、修改hdfs-site.xml文件,指定secondarynamenode机器位置和交互端口号50090
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>bigdata-senior01.ianybigdata.com:50090</value>
    </property>
16、启动:
$ sbin/hadoop-daemon.sh start secondarynamenode
17、外部UI界面访问:
http://bigdata-senior01.ianybigdata.com:50090

十一、MapReduce自带历史服务器
1、修改mapred-site.xml文件,指定两个参数
<property>
<name>mapreduce.jobhistory.address</name>
<value>bigdata-senior01.ianybigdata.com:10020</value>
</property>

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bigdata-senior01.ianybigdata.com:19888</value>
</property>
2、启动:
$ sbin/mr-jobhistory-daemon.sh start historyserver
3、历史服务器是一个轻量级的

mapreduce.jobhistory.intermediate-done-dir
-》存放正在运行的Hadoop的作业记录
mapreduce.jobhistory.done-dir
-》存放已经完成的Hadoop的作业目录
-》由于历史服务作业记录很多,所以存储的形式是按照年/月/日形式存放在对应的目录中,便于查找和管理


十二、日志聚合
1、将MR允许时候产生的日志文件上传到HDFS对应的目录中
2、然后就可以从页面查看日志内容,直接读取HDFS上存储的数据
3、修改yarn-site.xml文件,指定开启聚合功能以及日志在HDFS上保存期限,秒:单位
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
    </property>

十三、HDFS的文件权限检测
1、HDFS的文件目录权限和Linux是完全一致的
2、修改hdfs-site.xml文件,指定默认不检测用户权限
<property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
3、指定Hadoop的http静态用户名,可配置项,随意
<property>
        <name>hadoop.http.staticuser.user</name>
        <value>anybigdata</value>
    </property>
4、配置完历史服务器和聚合之后需要重启HDFS和yarn的所有进程,生效
5、注意先启动HDFS再启动yarn

6、yarn.nodemanager.remote-app-log-dir代表日志转移到HDFS上的目录路径
-》默认路径/tmp/logs
-》可以用户自定义
-》对应到yarn-site.xml


十四、Hadoop的本地库
-》警告:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Subversion http://svn.apache.org/repos/asf/hadoop/common -r 1616291
Compiled by jenkins on 2014-08-06T17:31Z
Compiled with protoc 2.5.0
-》信息中并没有获取到这位编译者在什么系统上编译Hadoop源码的
-》解决方法一:编译Hadoop的源码
-》编译源码非常受网络环境影响
-》解决方法二:直接替换编译好的native本地库
-》注意:不要直接拷贝naive到lib下,以免产生冲突
-》可以先删除原来的目录再拷贝过来
-》或者先重命名旧的native再拷贝过来新的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值