精华内容
下载资源
问答
  • 企业信贷大数据云服务平台助力风险控制.pdf
  • 跨云端大数据平台是什么?有何实质性的价值呢?如何去实现跨云端大数据平台技术呢?这是耐人深思的话题。 高速发展的信息技术,不断扩张的数据库容量,互联网作为信息传播和再生的平台,“信息泛滥”、“数据爆炸”...

    跨云端大数据平台是什么?有何实质性的价值呢?如何去实现跨云端大数据平台技术呢?这是耐人深思的话题。

    高速发展的信息技术,不断扩张的数据库容量,互联网作为信息传播和再生的平台,“信息泛滥”、“数据爆炸”等现象不绝于耳,数据的量级不断升级、应用的不断深入大数据平台发挥着不可忽视的价值。Apache Hadoop大数据平台在目前互联网中又扮演着何种的角色,发挥着怎样的作用?

    大数据的发展现状?

    (1)数据资源开放共享程度低。数据质量不高,数据资源流通不畅,管理能力弱,数据价值难以被有效挖掘利用。

    (2)技术创新与支撑能力不强。在新型计算平台、分布式计算架构、大数据处理、分析和呈现方面与国外仍存在较大差距,对开源技术和相关生态系统影响力弱。

    (3)大数据应用水平不高。虽然大数据具有强劲的应用市场优势,但是目前还存在应用领域不广泛、应用程度不深、认识不到位等问题。

    (4)大数据安全体系不健全。数据所有权、隐私权等相关法律法规和信息安全、开放共享等标准规范不健全,尚未建立起兼顾安全与发展的数据开放、管理和信息安全保障体系。

    (5)人才队伍建设亟需加强。大数据基础研究、产品研发和业务应用等各类人才短缺,难以满足发展需要。

    大数据平台技术框架之Apache

    Hadoop大数据平台

    (1)Hadoop

    Hadoop是大数据开发的重要框架,其核心是HDFS和MapReduce,HDFS是Hadoop的主要分布式存储,一个HDFS集群主要由一个NameNode(管理文件系统的元数据)和存储实际数据的DataNode组成。MapReduce是一个软件框架,可方便地编写应用程序处理大量的数据(多是TB数据集),在服务器硬件数千个节点的大型集群上实现一个可靠的,容错的方式并行运行的系统。

    除此之外还需要掌握Hadoop集群、Hadoop集群管理、YARN以及Hadoop高级管理等相关技术与操作!

    (2)Apache Chukwa

    是一个开源大型分布式系统的数据采集监视系统。它是建立在Hadoop分布式文件系统(HDFS)和Map/ Reduce框架之上,并继承了Hadoop的可伸缩性和健壮性。 Chukwa还包括一个灵活而强大的工具包,用于显示,监测和分析结果,以便做出最佳地使用所收集的数据。

    (3)Apache Ambari

    是一个基于Web的工具,用于配置,管理和监控的Apache Hadoop集群,包括支持HBase,Hadoop的MapReduce,Hadoop的HDFS,蜂房Hive,HCatalog的ZooKeeper,Oozie,Pig和Sqoop。还提供了仪表盘查看集群的健康,如热图,并能够虚拟化查看MapReduce,Pig和Hive应用,以用户友好的方式来诊断其性能特点。

    (4)Apache Sqoop

    Apache Sqoop的是一个专为ApacheHadoop设计的转换工具,在与关系数据库的结构化数据存储之间高效地传输大量数据。

    (5)Apache Pig

    Apache Pig是一个用于分析大型数据集的平台。它包含一个高层次的编写数据分析程序的脚本语言,Pigde 程序的显着属性是它适合进行大量的并行化,轮流处理非常大的数据集。pig的基础设施层由产生的序列Map-Reduce程序的编译器组成。猪的语言称为Pig Latin,易于开发编程并考虑了扩展性与易用性。

    以及Apache HCatalog、ApacheMahout、 Apache Oozie、ApacheSqoop、Apache ZooKeeper、ApacheAmbari、Apache Chukwa、ApacheHive……

    Apache Hadoop2.7大数据平台解决方案

    (1)制造行业

    利用工业大数据提升制造业水平,包括产品故障诊断与预测、分析工艺流程、改进生产工艺,优化生产过程能耗、工业供应链分析与优化、生产计划与排程。

    (2)金融行业

    大数据在高频交易、社交情绪分析和信贷风险分析三大金融创新领域发挥重大作用。

    (3)教育行业

    学生借助大数据,可以更好的了解自己的学习状况,针对性的开展自主学习,提升学习效率,应用大数据技术全程实时分析,分析学生个体和班级的学习进度、学情反馈和阶段性成果,从而及时找到问题,对症下药,实现对学习过程和结果的动态管理。

    (4)政府部门

    利用大数据提升和改善公共服务,政府利用大数据技术构建强大的国家安全保障体系,公共安全领域的大数据分析应用,反恐维稳与各类案件分析的信息化手段,借助大数据预防犯罪。

    (5)汽车领域

    利用大数据和物联网技术的无人驾驶汽车,在不远的未来将走入我们的日常生活。

    (6)生物医学

    大数据可以帮助我们实现流行病预测、智慧医疗、健康管理,同时还可以帮助我们解读DNA,了解更多的生命奥秘。

    Hadoop跨平台大数据,数道云大数据可以自由混合和多云环境中部署大数据工作负载,不必依赖于供应商锁定的特定云架构,可以在任何云环境中无缝的创建和管理大型数据集群。

    原文链接:http://www.sdydata.com/hyxw/info_itemid_95.html

    转载于:https://blog.51cto.com/14191705/2390996

    展开全文
  • 大数据平台搭建详解

    万次阅读 2018-05-12 11:41:37
    大数据平台搭建(实验室版)1大数据介绍:1.1背景进入21世纪随着计算机科学的迅速发展,人民生活水平的提高,各种交易产生的数据也飞速增长,2016天猫双11谢幕,根据阿里公布的实时数据,截至11日24:00:00,2016天猫...

    大数据平台搭建(实验室版)

    1大数据介绍:

    1.1背景

    进入21世纪随着计算机科学的迅速发展,人民生活水平的提高,各种交易产生的数据也飞速增长,2016天猫双11谢幕,根据阿里公布的实时数据,截至1124:00:002016天猫双11全球狂欢节总交易额超1207亿,无线交易额占比81.87%,覆盖235个国家和地区,当然还包括京东618等,产生的数据都是相当可观的,如此大的数据计算,统计,分析,使用一台计算机是无法完成的,如果这些数据用一台机器计算,那么又需要多么强大的一台机器呢?小编也不太清楚,因此产生了分布式(就是将一份庞大的工作分发给多台计算机同时计算,最后将结果合并)这就是大数据

    1.2大数据的重要性

    在近几年随着大数据的迅速发展,越来越多的人开始学习大数据,甚至好多都是半路出家的,其中小编就是半路出家的,小编之前是做stl语言的,那么为什么大数据工资高?为什么那么多人去学大数据呢?因为大数据太重要了,大数据无处不在,涉及到的行业也太多了,比如以下举例

    1.2.1 金融业

    金融业涉及到的内容很多什么p2p等,做金融的公司靠什么盈利呢?和银行一样,通过卖理财产品,(如果不知道什么是理财产品,请自行百度),如果你买了理财产品,那么理财公司就把你的钱作为运营资金放贷款,公司放贷之前是需要对你的信用度进行审核的(业界称之为征信)那么征信就需要对你尽可能多的海量数据进行分析,因为数据量大,因此就需要大数据提供基础平台的数据。

    1.2.2 电信行业

    电信行业可以通过人建立模型分析出你下个月是不是会取消宽带。

    1.2.3电商业

    同样电商业也可以通过一定算法建立模型,分析出你喜欢的商品发送给你URL(业界叫精准推送)

    1.2.4机器学习

    机器学习也需要大量的数据让机器学习,比如监督式学习需要的大量训练数据都是来自大数据平台,设计到的行业很多,在这里不做过多介绍。

    2大数据平台搭建(实验室版)

    2.1平台搭建说明

    由于资源限制,只能是做实验室版搭建,而非真正的生产环境,生产环境和实验室环境思路相同,只不过是配置更高,面对生产问题需要做一些调整而已。本次搭建采用vmware搭建5台服务器,配置可根据个人电脑具体情况调节

    5台机器分别为node1到node5

    2.2 node1服务器搭建

    打开vm,点击新建,选择经典即可,点击下一步

    大数据平台搭建(实验室版)

    1大数据介绍:

    1.1背景

    进入21世纪随着计算机科学的迅速发展,人民生活水平的提高,各种交易产生的数据也飞速增长,2016天猫双11谢幕,根据阿里公布的实时数据,截至1124:00:002016天猫双11全球狂欢节总交易额超1207亿,无线交易额占比81.87%,覆盖235个国家和地区,当然还包括京东618等,产生的数据都是相当可观的,如此大的数据计算,统计,分析,使用一台计算机是无法完成的,如果这些数据用一台机器计算,那么又需要多么强大的一台机器呢?小编也不太清楚,因此产生了分布式(就是将一份庞大的工作分发给多台计算机同时计算,最后将结果合并)这就是大数据

    1.2大数据的重要性

    在近几年随着大数据的迅速发展,越来越多的人开始学习大数据,甚至好多都是半路出家的,其中小编就是半路出家的,小编之前是做stl语言的,那么为什么大数据工资高?为什么那么多人去学大数据呢?因为大数据太重要了,大数据无处不在,涉及到的行业也太多了,比如以下举例

    1.2.1 金融业

    金融业涉及到的内容很多什么p2p等,做金融的公司靠什么盈利呢?和银行一样,通过卖理财产品,(如果不知道什么是理财产品,请自行百度),如果你买了理财产品,那么理财公司就把你的钱作为运营资金放贷款,公司放贷之前是需要对你的信用度进行审核的(业界称之为征信)那么征信就需要对你尽可能多的海量数据进行分析,因为数据量大,因此就需要大数据提供基础平台的数据。

    1.2.2 电信行业

    电信行业可以通过人建立模型分析出你下个月是不是会取消宽带。

    1.2.3电商业

    同样电商业也可以通过一定算法建立模型,分析出你喜欢的商品发送给你URL(业界叫精准推送)

    1.2.4机器学习

    机器学习也需要大量的数据让机器学习,比如监督式学习需要的大量训练数据都是来自大数据平台,设计到的行业很多,在这里不做过多介绍。

    2大数据平台搭建(实验室版)

    2.1平台搭建说明

    由于资源限制,只能是做实验室版搭建,而非真正的生产环境,生产环境和实验室环境思路相同,只不过是配置更高,面对生产问题需要做一些调整而已。本次搭建采用vmware搭建5台服务器,配置可根据个人电脑具体情况调节

    5台机器分别为node1到node5

    2.2 node1服务器搭建

    打开vm,点击新建,选择经典即可,点击下一步

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

                                                                                                                                                          

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    然后选择centos64和linux,如下,然后点击下一步

     

     

     

     

     

     

     

    选择虚拟机上机器的名称已经安装机器的位置,然后下一步

     

     

     

     

     

     

     

     

    然后选择

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    选择自定义硬件,如下

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    如上图所示,内存,处理器等可以根据自己的需求自行设置,需要注意的是网络需要选择nat模式,自定义也可以,如果选择其他模式ip变化了,在集群运行时是会出问题的,小编的配置如下

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    接着上边说,配置完硬件后点击完成,点击开启虚拟机,为了简单以下截图而过了

     

     

     

     

     

     

     

    说明:

    1.install or upgrade an existing system
    安装或升级现有系统

    2.install system with basic video drive
    安装过程中采用基本的显卡驱动

    3.rescue installed system
    进入系统修复模式

    4.Boot from local drive
    退出安装从硬盘启动

    5.memory test
    内存检测

    6.press tab to edit options
    “tab”来编辑选项

    在这里选择1就可以了

    然后如下选择

     



     

     

    ,,

     

     

     

     

     

     

     

     

     

     

     

    6.选择英文或者中单都可以,在这里推荐选择英文

     

    然后选择美式键盘

     

     

     

    这里选择基本存储,无需要选择指定存储如下

     

    这里选择格式化任何数据

     

     

     

     

     

     

     

     

     

     

    小编的网络配置如下

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    根据自己具体的网络情况定义

    编辑完成后点击apply,此时已经退出编辑页面,然后点击下一步

    选择亚洲,上海

     

    设置服务器的密码

    然后选择使用使用所有空间,不再做过多分区介绍了,感兴趣自己研究下,如下

    然后选择如下,因为是实验环境为了方便在上边开发,我们安装了桌面模式,真正生产中是只选择基础模式就可以了,如下

     

     

     

     

     

     

     

     

     

     

     

    然后就是系统安装了,然后

     

     

    后边都直接选择默认即可。

    我们登录系统后需要通过root用户在根目录下创建个数据目录,来模仿企业的数据盘,同时将app目录授权给hadoop,执行命令如下

    chown -R hadoop.hadoop app我们将所有的安装,然后

    我们在app下建立两个目录,opt和pro,到这里我们的系统算是差不多了,需要用到的后边在补写。

    2.3大数据平台基础依赖安装

    2.3.1 jdk安装

    在这里首先说一下,系统默认会带openjdk,系统自带的这种不好用,我在这里就直接卸载了,命令如下

    以root权限执行rpm -qa | grep jdk ,如下

     

     

     

     

    然后 yum -y remove 你所过滤出来的包,我的卸载如下

    rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

    rpm -e --nodepsjava-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

    然后检查一下是否卸载了,我们可以执行个java,然后报错了,说明卸载干了

     

     

     

    在这里我们选择1.8,因为scala等还需要依赖(1.7也可以,不推荐1.6,1.6用的人很少了)

    具体jdk安装请查看百度,在这里不做过多的介绍,只做简单介绍

    我的JDK放在这个目录下了,如下图所示

    然后,我们配置系统级别的环境变量,命令如下

    vim /etc/profile

    然后在这里添加环境变量即可

    export JAVA_HOME=/app/opt/jdk/jdk1.8.0_141

    export PATH=$PATH:$JAVA_HOME/bin:

    然后source/etc/profile

    OK,这样我们的jdk就安装好了,可以验证一下

    OK,到这里说明jdk已经安装好了,环境变量也生效了

    2.3.2 scala安装

    由于后边我们玩spark,spark是用scala语言开发的,所以我们需要安装scala语言

    一般系统默认是不会自带scala的,所以不需要卸载,下面我们开始安装

    同样下载scala tar包,我这里下载的是

    我的安装目录在这里

     

     

     

    然后vm/etc/profile

     

     

     

    然后source/etc/profile

    验证和java相同,在这里就不再介绍了

    2.3.3 Python

    由于系统自带的Python是2.6.6,可以满足我们可基本需求,在这里我就不再安装了,需要安装的请自行百度,很简单的!

    2.3.4系统准备

    2.3.4.1准备五台服务器

    我们将现有的一台服务复制5份,找一个大于100GB的空间,我这里笔记本资源不多了,为了方便起见,我放在移动硬盘上了,分别命名为node1,node2,node3,node4,node5,当然你也可以克隆

    2.3.4.2 其他设置

    1 分别将5台服务器机IP改成192.168.21.161到192.168.21.165,(由于是虚拟机复制(在复制时候,会再次生成一个非eth0的网卡,这是由于复制过程中又生成了新的mac地址),会导致网卡从eth0依次增加,为了网卡统一,我们需要将所有的网卡修改成eth0),首先启动你刚才复制的机器

    1        cd /etc/udev/rules.d/

     

    2         现将cp 70-persistent-net.rules70-persistent-net.rules.bak 文件备份一下在编辑,以防出错

    3        vim 70-persistent-net.rules eth0那行注释掉,将eth1改成eth0,如下

     

     

    4        vim /etc/sysconfig/network-scripts/ifcfg-eth0 HWADDR改成上面那个信息(也就是新改成那行的HWADDR的后边的吗),就是MAC地址,并配置IP,同时记得将ONBOOT改为yes(默认是noyes是启用开机自动启动网卡功能)如下

     

     

     

     

     

     

     

     

     

     

     

     

    然后重启网卡,servicenetwork restart即可生效,

    5        因为是复制的虚拟机,需要将机器名依次修改成node1node5

    6        命令 hostname node2   临时将机器名修改为node2,如果重启机器又会恢复原来的机器名,故需要永久修改,修改命令如下

    vim /etc/sysconfig/network  如下

     

     

     

    7        关闭selinu,默认是开启的,需要关闭,常用命令如下

    sestatus   查看状态

     

     

     

     

     

     

    setenforce 0   临时关闭

    vim /etc/selinux/config  将SELINUX=enforcing修改为disabled

    8        关闭防护墙

    serviceiptables status  查看防火墙状态

    serviceiptables stop 关闭防火墙

    chkconfigiptables off  永久关闭防火墙

    9      修改系统最大打开文件数量,默认为1024,我们将其修改为65535

    解除Linux 系统的最大进程数和最大文件打开数限制:

    修改所有linux 用户的环境变量文件

    ulimit –a  查看linux相关信息

    ulimit -n 65535   临时修改为这么大

    永久修改如下

    vim/etc/security/limits.conf    具体需要修改的东西,根据具体情况修改即可,授权给所有用户也可以修改/etc/profile  ,我这里把open files数量修改为65535,max user processes 修改为257612

    将开机启动默认设置为字符界面,vim  /etc/inittab   id:5:修改为id:3重启即可

    到这里系统级别的依赖基本上差不多了,组件需要我们在后边在安装,比如ntp

    11 这样我们将5台机器出了IP和机器名都配置不同,其他配置全部相同(当然硬件配置可以根据主从节点修改)

    12 免秘钥登录 以hadoop权限做免秘钥登录(因为hadoop集群主从节点访问需要免秘钥访问,严格来说,只需要将做主节点到从节点免秘钥即可,但是为了方便我全部做免秘钥了,以便以后同步一些东西方便)

    以node1的hadoop用户为例

    进入/home/hadoop/.ssh目录

    执行 ssh-keygen -t dsa 生成公钥和私钥

    然后将公钥追加到一个文件  cat id_dsa.pub >> authorized_keys

    然后将authorized_keys拷贝到node2,3,4,5服务器上

    最后在node下执行chmod 600 authorized_keys即可实现node1到其他节点的免秘钥登录,其他节点同理,这里不再累赘了!

     

     

    2.4 hadoop安装

    2.4.1 hadoop的下载,官方下载hadoop编译好的包也可以下载源码自行编译,在这里我们下载官方预编译版本2.7.3吧,用一下新版本

    2.4.1解压

     将hadoop-2.7.3.tar.gz包放再/app/opt/hadoop/下然后解压

     

     

     

     

    2.4.2目录介绍

     进入cdhadoop-2.7.3/       ll

     

     

     

     

     

     

     

     

     

    目录介绍

    2.4.2.1 bin

    bin 目录介绍

    主要是存放一下hadoop命令

    container-executor  执行container

    hadoop     执行hadoop相关命令,比如hadoop fs等(linux环境运用)

    hadoop.cmd 执行hadoop相关命令,比如hadoop fs等(windows环境运用)

    hdfs        执行hdfs相关命令,比如hdds  dfsadmin等(linux环境运用)

    hdfs.cmd    执行hdfs相关命令,比如hdds  dfsadmin等(windows环境运用)

    mapred     执行map命令(linux运用)

    mapred.cmd 执行map命令(windows运用)

    rcc         用来生成 java和c++的hadoop Record 类代码

    test-container-executor   用来测试container-executor

    yarn      用来执行yarn的相关命令比如yarn  –node list(linux)

    yarn.cmd  用来执行yarn的相关命令比如yarn  –node list(windows)

    具体详细命令请查看官方文档或者帮助文件

    2.4.2.2 etc

     etc下边的hadoop目录下存放着hadoop的配置文件,默认如下

    capacity-scheduler.xml       capacity调度相关配置文件,主要是和yarn结合使用

    configuration.xsl            根元素配置(不是特别清楚)

     

     

     

    container-executor.cfg      container-executor执行先关配置

    core-site.xml             hadoop核心配置文件

    hadoop-env.cmd          hadoop启动运行环境(windows)

    hadoop-env.sh            hadoop启动运行环境(linux)

    hadoop-metrics2.properties 控制Hadoop报告

    hadoop-metrics.properties  控制Hadoop报告

    hadoop-policy.xml         权限管理相关配置

    hdfs-site.xml              hdfs配置文件

    httpfs-env.sh              httpfs启动环境配置

    httpfs-log4j.properties      httpfs-log4j配合模板

    httpfs-signature.secret      好像是一个认证密令的配置(不太清楚)

    httpfs-site.xml             httpfs配置

    kms-acls.xml               kms安装认证

    kms-env.sh                kms启动运行环境

    kms-log4j.properties         kms 日志模板

    kms-site.xml               kms配置

    log4j.properties            log4j模板

    mapred-env.cmd            map启动运行时环境(windows)

    mapred-env.sh              map启动运行时环境(linux)

    mapred-queues.xml.template  map队列模板配置

    mapred-site.xml.template     map配置文件

    slaves                     从节点配置

    ssl-client.xml.example        ssl客户端配置模板

    ssl-server.xml.example        ssh服务端配置模板

    yarn-env.cmd                yarn启动时运行环境(windows)

    yarn-env.sh                  yarn启动时运行环境(linux)

    yarn-site.xml                 yarn配置文件

    2.4.2.4 include

    对外提供的编程库文件,与lib结合相关,这些头文件均是用C++定义的,通常用于C++访问dfs和编写mr

    2.4.2.5 lib

    该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用

    2.4.2.6 libexec

    用来提供hadoop相关启动命令的shell初始化调用。

    2.4.2.7 sbin

    distribute-exclude.sh         没用过,不太清楚      

    hadoop-daemon.sh          启动单个任务

    hadoop-daemons.sh         启动多个任务

    hdfs-config.cmd             hdfs-config调用(windows)

    hdfs-config.sh               hdfs-config调用(linux)

    httpfs.sh                   httpfs执行脚本

    kms.sh                    kms执行脚本

    mr-jobhistory-daemon.sh     mr启动job历史服务

    refresh-namenodes.sh       恢复namenode脚本

    slaves.sh                  执行datanode节点

    start-all.cmd              启动所有组件(windows)

    start-all.sh                启动所有组件(linux)

    start-balancer.sh           手动负载均衡

    start-dfs.cmd              启动dfs(windows)

    start-dfs.sh                启动dfs(linux)

    start-secure-dns.sh         启动secure-dns      

    start-yarn.cmd             启动yarn(windows)

    start-yarn.sh              启动yarn(linux)

    stop-all.cmd              停止hadoop所有组件(windows)

    stop-all.sh                停止hadoop所有组件(linux)

    stop-balancer.sh           停止负载均衡

    stop-dfs.cmd              停止dfs(windows)

    stop-dfs.sh                停止dfs(linux)

    stop-secure-dns.sh         停止secure-dns

    stop-yarn.cmd             停止yarn(windows)

    stop-yarn.sh               停止yarn(linux)

    yarn-daemon.sh            停止yarn的单个节点的yarn相关组件

    yarn-daemons.sh           停止yarn的多个节点的yarn相关组件

    2.4.2.8 share

    共享的demo和编译后的相关jar包等

    2.4.3 hadoop配置文件配置

    2.4.3.1 capacity-scheduler.xml配置

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

    <configuration>

    <!-- Resource Allcation -->

     <property>

         <name>yarn.scheduler.capacity.root.queues</name>

         <value>offline,online,default</value>

         <description>The sub queues in the newly created root queueinclude offline queues, online queues, default queues</description>

     </property>

       <!-- offline -->

      <property>

         <name>yarn.scheduler.capacity.root.offline.capacity</name>

         <value>30</value>

         <description>Offline occupancy ratio</description>

     </property>

       <property>

         <name>yarn.scheduler.capacity.root.offline.queues</name>

         <value>hive,sqoop,spark_thrift</value>

      </property>

             <!--hive -->

      <property>

        <name>yarn.scheduler.capacity.root.offline.hive.capacity</name>

        <value>30</value>

      </property>

      <property>

                  <name>yarn.scheduler.capacity.root.offline.hive.user-limit-factor</name>

                                   <value>5</value>

                  <description>the limit ofeveryuser use resource</description>

      </property>

     

      <property>

                  <name>yarn.scheduler.capacity.root.offline.hive.maximum-capacity</name>

                  <value>100</value>

      </property>

      <!--sqoop-->

             <property>

                            <name>yarn.scheduler.capacity.root.offline.sqoop.capacity</name>

                                            <value>30</value>

             </property>

     

             <property>

                             <name>yarn.scheduler.capacity.root.offline.sqoop.user-limit-factor</name>

                                             <value>5</value>

             </property>

     

            <property>

                            <name>yarn.scheduler.capacity.root.offline.sqoop.maximum-capacity</name>

                                            <value>70</value>

             </property>

                 <!-- spark_thrift -->

               <property>

                            <name>yarn.scheduler.capacity.root.offline.spark_thrift.capacity</name>

                                              <value>40</value>

               </property>

     

               <property>

                            <name>yarn.scheduler.capacity.root.offline.spark_thrift.user-limit-factor</name>

                                              <value>5</value>

               </property>

     

               <property>

                             <name>yarn.scheduler.capacity.root.offline.spark_thrift.maximum-capacity</name>

                                               <value>80</value>

               </property>

         <!-- online -->

             <property>

                  <name>yarn.scheduler.capacity.root.online.maximum-capacity</name>

                                        <value>-1</value>

                  <description>

                        The maximum capacity of thedefault queue.

                  </description>

             </property>

     

           <property>

                     <name>yarn.scheduler.capacity.root.online.capacity</name>

                                       <value>60</value>

           </property>

     

     <property>

       <name>yarn.scheduler.capacity.maximum-applications</name>

       <value>10000</value>

       <description>

         Maximum number of applications that can be pending and running.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>

       <value>0.1</value>

       <description>

         Maximum percent of resources in the cluster which can be used to run

         application masters i.e. controls number of concurrent running

         applications.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.resource-calculator</name>

       <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>

       <description>

         The ResourceCalculator implementation to be used to compare

         Resources in the scheduler.

         The default i.e. DefaultResourceCalculator only uses Memory while

         DominantResourceCalculator uses dominant-resource to compare

         multi-dimensional resources such as Memory, CPU etc.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.queues</name>

       <value>default</value>

       <description>

         The queues at the this level (root is the root queue).

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.capacity</name>

       <value>100</value>

       <description>Default queue target capacity.</description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.user-limit-factor</name>

       <value>1</value>

       <description>

         Default queue user limit a percentage from 0.0 to 1.0.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>

       <value>100</value>

       <description>

         The maximum capacity of the default queue.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.state</name>

       <value>RUNNING</value>

       <description>

         The state of the default queue. State can be one of RUNNING or STOPPED.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>

       <value>*</value>

       <description>

         The ACL of who can submit jobs to the default queue.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>

       <value>*</value>

       <description>

         The ACL of who can administer jobs on the default queue.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.node-locality-delay</name>

       <value>40</value>

       <description>

         Number of missed scheduling opportunities after which theCapacityScheduler

         attempts to schedule rack-local containers.

         Typically this should be set to number of nodes in the cluster, Bydefault is setting

         approximately number of nodes in one rack which is 40.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.queue-mappings</name>

       <value></value>

       <description>

         A list of mappings that will be used to assign jobs to queues

         The syntax for this list is [u|g]:[name]:[queue_name][,next mapping]*

         Typically this list will be used to map users to queues,

         for example, u:%user:%user maps all users to queues with the same name

         as the user.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.queue-mappings-override.enable</name>

       <value>false</value>

       <description>

         If a queue mapping is present, will it override the value specified

         by the user? This can be used by administrators to place jobs in queues

         that are different than the one specified by the user.

         The default is false.

       </description>

     </property>

     

    </configuration>

     

    2.4.3.2 core-site.xml配置

    <?xml version="1.0"encoding="UTF-8"?>

    <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

     

    <!-- Put site-specific propertyoverrides in this file. -->

     

    <configuration>

             <property>

                      <name>fs.defaultFS</name>

                      <value>hdfs://ns/</value>

             </property>

             <property>

                      <name>hadoop.tmp.dir</name>

                      <value>/app/data/hadoop/hdfs/tmp</value>

             </property>

             <property>

                      <name>ha.zookeeper.quorum</name>

                      <value>node3:2181,node4:2181,node5:2181</value>

             </property>

             <property>

                      <name>dfs.datanode.max.transfer.threads</name>

                     <value>4096</value>

             </property>

             <property>

             <name>hadoop.proxyuser.hue.hosts</name>

             <value>*</value>

             </property>

     

             <property>

                      <name>hadoop.proxyuser.hue.groups</name>

                      <value>*</value>

             </property>

     

             <property>

                      <name>hadoop.security.instrumentation.requires.admin</name>

                      <value>false</value>

             </property>

    </configuration>

    2.4.3.3 hadoop-env.sh 配置

    # Licensed to the Apache SoftwareFoundation (ASF) under one

    # or more contributor licenseagreements.  See the NOTICE file

    # distributed with this work for additionalinformation

    # regarding copyright ownership.  The ASF licenses this file

    # to you under the Apache License, Version2.0 (the

    # "License"); you may not usethis file except in compliance

    # with the License.  You may obtain a copy of the License at

    #

    #    http://www.apache.org/licenses/LICENSE-2.0

    #

    # Unless required by applicable law oragreed to in writing, software

    # distributed under the License isdistributed on an "AS IS" BASIS,

    # WITHOUT WARRANTIES OR CONDITIONS OF ANYKIND, either express or implied.

    # See the License for the specific languagegoverning permissions and

    # limitations under the License.

     

    # Set Hadoop-specific environment variableshere.

     

    # The only required environment variable isJAVA_HOME.  All others are

    # optional. When running a distributed configuration it is best to

    # set JAVA_HOME in this file, so that it iscorrectly defined on

    # remote nodes.

     

    # The java implementation to use.

    export JAVA_HOME=/app/opt/jdk/jdk1.8.0_141

     

    # The jsvc implementation to use. Jsvc isrequired to run secure datanodes

    # that bind to privileged ports to provide authenticationof data transfer

    # protocol. Jsvc is not required if SASL is configured for authentication of

    # data transfer protocol usingnon-privileged ports.

    #export JSVC_HOME=${JSVC_HOME}

     

    exportHADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}

     

    # Extra Java CLASSPATH elements.  Automatically insert capacity-scheduler.

    for f in$HADOOP_HOME/contrib/capacity-scheduler/*.jar; do

      if[ "$HADOOP_CLASSPATH" ]; then

       export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f

     else

       export HADOOP_CLASSPATH=$f

      fi

    done

     

    # The maximum amount of heap to use, in MB.Default is 1000.

    #export HADOOP_HEAPSIZE=

    #exportHADOOP_NAMENODE_INIT_HEAPSIZE=""

     

    # Extra Java runtime options.  Empty by default.

    export HADOOP_OPTS="$HADOOP_OPTS-Djava.net.preferIPv4Stack=true"

     

    # Command specific options appended toHADOOP_OPTS when specified

    exportHADOOP_NAMENODE_OPTS="-XX:NewSize=228m -XX:MaxNewSize=512m -Xms2048m-Xmx2048m -XX:PermSize=228m -XX:MaxPermSize=356m-Xloggc:/app/logs/hadoop/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails-XX:+PrintGCTimeStamps -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS}-Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender}$HADOOP_NAMENODE_OPTS"

    exportHADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"

     

    exportHADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS}-Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender}$HADOOP_SECONDARYNAMENODE_OPTS"

     

    exportHADOOP_NFS3_OPTS="$HADOOP_NFS3_OPTS"

    export HADOOP_PORTMAP_OPTS="-Xmx512m$HADOOP_PORTMAP_OPTS"

     

    # The following applies to multiplecommands (fs, dfs, fsck, distcp etc)

    export HADOOP_CLIENT_OPTS="-Xmx512m$HADOOP_CLIENT_OPTS"

    #HADOOP_JAVA_PLATFORM_OPTS="-XX:-UsePerfData$HADOOP_JAVA_PLATFORM_OPTS"

     

    # On secure datanodes, user to run thedatanode as after dropping privileges.

    # This **MUST** be uncommented to enablesecure HDFS if using privileged ports

    # to provide authentication of datatransfer protocol.  This **MUST NOT** be

    # defined if SASL is configured forauthentication of data transfer protocol

    # using non-privileged ports.

    exportHADOOP_SECURE_DN_USER=${HADOOP_SECURE_DN_USER}

     

    # Where log files are stored.  $HADOOP_HOME/logs by default.

    export HADOOP_LOG_DIR=/app/logs/hadoop

     

    # Where log files are stored in the securedata environment.

    exportHADOOP_SECURE_DN_LOG_DIR=${HADOOP_LOG_DIR}/${HADOOP_HDFS_USER}

     

    ###

    # HDFS Mover specific parameters

    ###

    # Specify the JVM options to be used whenstarting the HDFS Mover.

    # These options will be appended to theoptions specified as HADOOP_OPTS

    # and therefore may override any similarflags set in HADOOP_OPTS

    #

    # export HADOOP_MOVER_OPTS=""

     

    ###

    # Advanced Users Only!

    ###

     

    # The directory where pid files are stored./tmp by default.

    # NOTE: this should be set to a directorythat can only be written to by

    #      the user that will run the hadoop daemons.  Otherwise there is the

    #      potential for a symlink attack.

    export HADOOP_PID_DIR=/app/data/hadoop/pids

    export HADOOP_SECURE_DN_PID_DIR=/app/data/hadoop/pids

     

    # A string representing this instance ofhadoop. $USER by default.

    export HADOOP_IDENT_STRING=$USER

    2.4.3.4 hdfs-site.xml配置

    <?xml version="1.0"encoding="UTF-8"?>

    <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

     

    <!-- Put site-specific propertyoverrides in this file. -->

     

    <configuration>

     <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致-->   

       <property>   

               <name>dfs.nameservices</name>   

                       <value>ns</value>   

                            </property> 

     

       <!-- ns下面有两个NameNode,分别是nn1,nn2 -->

       <property>

              <name>dfs.ha.namenodes.ns</name>

                     <value>nn1,nn2</value>

                          </property>

     

       <!-- nn1的RPC通信地址 -->

       <property>

              <name>dfs.namenode.rpc-address.ns.nn1</name>

                     <value>node1:9000</value>

                          </property>

     

       <!-- nn1的http通信地址 -->

       <property>

               <name>dfs.namenode.http-address.ns.nn1</name>

                       <value>node1:50070</value>

                            </property>

     

       <!-- nn2的RPC通信地址 -->

       <property>

               <name>dfs.namenode.rpc-address.ns.nn2</name>

                       <value>node2:9000</value>

                            </property>

     

       <!-- nn2的http通信地址 -->

       <property>

               <name>dfs.namenode.http-address.ns.nn2</name>

                       <value>node2:50070</value>

                            </property>

     

       <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

       <property>

                <name>dfs.namenode.shared.edits.dir</name>

                         <value>qjournal://node3:8485;node4:8485;node5:8485/ns</value>

                              </property>

                                 

    <!-- 指定JournalNode在本地磁盘存放数据的位置-->

       <property>

                 <name>dfs.journalnode.edits.dir</name>

                           <value>/app/data/hadoop/hdfs/journal</value>

                                </property>

                                 

     <!-- 开启NameNode故障时自动切换 -->

        <property>

                 <name>dfs.ha.automatic-failover.enabled</name>

                           <value>true</value>

                                </property>

                                   

    <!-- 配置失败自动切换实现方式 -->

       <property>

                    <name>dfs.client.failover.proxy.provider.ns</name>

                               <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

                                   </property>

                                      

     <!-- 配置隔离机制 -->

       <property>

                    <name>dfs.ha.fencing.methods</name>

                                 <value>sshfence</value>

                                     </property>

                                        

     <!-- 使用隔离机制时需要ssh免登陆 -->

       <property>

                   <name>dfs.ha.fencing.ssh.private-key-files</name>

                               <value>/home/hadoop/.ssh/id_rsa</value>

                                   </property>

                                                                 

       <property>   

                <name>dfs.namenode.name.dir</name>   

                       <value>file:///app/data/hadoop/hdfs/name</value>   

                            </property>   

                               

       <property>   

               <name>dfs.datanode.data.dir</name>   

                       <value>file:///app/data/hadoop/hdfs/data</value>   

                            </property>   

                               

       <property>   

              <name>dfs.replication</name>   

                     <value>3</value>   

                          </property>  

    </configuration>

    2.4.3.5 mapred-site.xml配置

    <?xml version="1.0"?>

    <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

     

    <!-- Put site-specific propertyoverrides in this file. -->

     

    <configuration>

    <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    <!-- map reduce memory config -->

    <property>

     <name>mapreduce.map.java.opts</name>

     <value>-Xmx80m</value>

     </property>

     

    <!-- close gc -verbose:gc-Xloggc:/app/logs/hadoop/@taskid@.gc -->

    <property>

     <name>mapreduce.reduce.java.opts</name>

     <value>-Xmx80m</value>

     </property>

      

    <property>

     <name>yarn.app.mapreduce.am.resource.mb</name>

     <value>100</value>

     </property>

              

     

     

    <!-- temporarily ignore compression-->

    <property>

     <name>mapreduce.map.output.compress</name>

      <value>false</value>

       </property>

     

    <property>

     <name>mapreduce.output.fileoutputformat.compress</name>

      <value>false</value>

       </property>

     

    <property>

     <name>mapreduce.output.fileoutputformat.compress.type</name>

      <value>BLOCK</value>

      </property>

      <property>

       <name>mapreduce.jobhistory.address</name>

         <value>ns:10020</value>

         </property>

         <property>

          <name>mapreduce.jobhistory.webapp.address</name>

            <value>ns:19888</value>

            </property>

     

     

    <property>

     <name>mapreduce.fileoutputcommitter.marksuccessfuljobs</name>

      <value>false</value>

      </property>

    </configuration>

    2.4.3.6 slave配置

    node2

    node3

    node4

    node5

    2.4.3.6 yarn-site-xml 配置

    <?xml version="1.0"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

    <configuration>

     

    <!-- Site specific YARN configurationproperties -->

    <!-- 指定nodemanager启动时加载server的方式为shuffleserver -->

        <property>   

            <name>yarn.nodemanager.aux-services</name>   

                  <value>mapreduce_shuffle</value>   

        </property>              

        <property>

            <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

            <value>org.apache.hadoop.mapred.ShuffleHandler</value>

         </property>

         <property>

     <!--yarn-HA -->

         <name>yarn.resourcemanager.ha.enabled</name>

         <value>true</value>

         </property>

         <property>

         <name>yarn.resourcemanager.cluster-id</name>

         <value>yrc</value>

         </property>

         <property>

         <name>yarn.resourcemanager.ha.rm-ids</name>

         <value>rm1,rm2</value>

         </property>

         <property>

         <name>yarn.resourcemanager.hostname.rm1</name>

         <value>node1</value>

         </property>

         <property>

         <name>yarn.resourcemanager.hostname.rm2</name>

         <value>node2</value>

         </property>

         <property>

         <name>yarn.resourcemanager.webapp.address.rm1</name>

         <value>node1:8088</value>

         </property>

         <property>

         <name>yarn.resourcemanager.webapp.address.rm2</name>

         <value>node2:8088</value>

         </property>

         <property>

         <name>yarn.resourcemanager.zk-address</name>

         <value>node3:2181,node4:2181,node5:2181</value>

         </property>

         <!-- memory of yarn used -->

        <property>

        <name>yarn.nodemanager.resource.memory-mb</name>

        <value>256</value>

        </property>

        <property>

        <name>yarn.scheduler.maximum-allocation-mb</name>

        <value>128</value>

        </property>

        <property>

        <name>yarn.scheduler.minimum-allocation-mb</name>

        <value>32</value>

        </property>

        <property>

        <name>yarn.nodemanager.vmem-check-enabled</name>

        <value>false</value>

        <description>Whether virtual memory limits will be enforcedfor    containers</description>

        </property>

        <property>

        <name>yarn.nodemanager.vmem-pmem-ratio</name>

        <value>2.1</value>

        <description>Ratio between virtual memory to physical memory whensetting memory limits for containers</description>

        </property>

       <!--the cores of cpu used by yarn -->

    <property>

             <name>yarn.nodemanager.resource.cpu-vcores</name>

                 <value>2</value>

                 </property>

     

    <property>

             <name>yarn.scheduler.maximum-allocation-vcores</name>

                 <value>2</value>

                 </property>

     

    <property>

             <name>yarn.scheduler.minium-allocation-vcores</name>

                 <value>1</value>

                 </property>

     

    <!-- yarn scheduler -->

    <property>

    <name>yarn.resourcemanager.scheduler.class</name>

    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>

    </property>

     

    <!-- yarn log -->

    <property>

    <name>yarn.nodemanager.log-dirs</name>

    <value>/app/logs/yarn/</value>

    </property>

     

    <property>

    <name>yarn.log-aggregation-enable</name>

    <value>true</value>

    </property>

     

     

    </configuration>

     

     

     

     

     

    目前我们先配置到这里吧,如果有其他需要改动的,或则修改的配置,我们可以再修改,水平有限,多多包涵!

    2.4.4 zookeeper安装

    2.4.4.1 zookeeper简单介绍

    什么是ZooKeeper?

    ZooKeeper是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务。所有这些类型的服务以分布式应用程序以某种形式或另一种形式使用。每次执行它们时,都会有很多工作用于修复不可避免的错误和竞争条件。由于实施这些服务的困难,应用程序最初通常会吝啬,这使得它们在变化存在时变脆,难以管理。即使正确完成,这些服务的不同实现也会导致应用程序部署时的管理复杂性

    1 基础扫盲

    zookeeper以角色的形式存在,那么zookeeper设计到的角色有哪些呢?

    leader leader是zookeeper中角色之一,其作用是负责投票的发起和决议,以及更新系统状态,集群中有且只(允许)有一个leader,其实说白了就是zookeeper集群中的主节点

    Follower follower用来接收客户端(默认2181)端口发来的消息,将处理结果返回给客户端,并且参与leader选举投票

    Observer Observer是用来接收客户端请求,转发给leader的功能,不参与投票

    Client   Client作用是向zookeeper集群发起请求

    2 zookeeper总架构

    组成Zookeeper的各个服务器必须要能相互通信。他们在内存中保存了服务器状态,也保存了操作的日志,并且持久化快照。只要大多数的服务器是可用的,那么Zookeeper就是可用的。

    客户端连接到一个Zookeeper服务器,并且维持TCP连接。并且发送请求,获取回复,获取事件,并且发送连接信号。如果这个TCP连接断掉了,那么客户端可以连接另外一个服务器。

    (2)Zookeeper是有序的

    Zookeeper使用数字来对每一个更新进行标记。这样能保证Zookeeper交互的有序。后续的操作可以根据这个顺序实现诸如同步操作这样更高更抽象的服务。

    (3)Zookeeper是高效的

    Zookeeper的高效更表现在以读为主的系统上。Zookeeper可以在千台服务器组成的读写比例大约为10:1的分布系统上表现优异。

     

    (4)数据结构和分等级的命名空间

    Zookeeper的命名空间的结构和文件系统很像。一个名字和文件一样使用/的路径表现,zookeeper的每个节点都是被路径唯一标识

     

    3 zookeeper存储架构

    zookeeper中的数据是按照结构进行存储的。而且znode节点还分为4中不同的类型。

    (1)、znode

    根据本小结第一部分的描述,很显然zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每一个节点,我们称之为“znode”。如下如所示:

    ·       每一个znode默认能够存储1MB的数据(对于记录状态性质的数据来说,够了)

    ·       可以使用zkCli命令,登录到zookeeper上,并通过lscreatedeletesync等命令操作这些znode节点

    ·       znode除了名称、数据以外,还有一套属性:zxid。这套zid与时间戳对应,记录zid不同的状态(后续我们将用到)

    那么每个znode结构又是什么样的呢?如下图所示:

    此外,znode还有操作权限。如果我们把以上几类属性细化,又可以得到以下属性的细节:

    • czxid:创建节点的事务的zxid
    • mzxid:对znode最近修改的zxid
    • ctime:以距离时间原点(epoch)的毫秒数表示的znode创建时间
    • mtime:以距离时间原点(epoch)的毫秒数表示的znode最近修改时间
    • version:znode数据的修改次数
    • cversion:znode子节点修改次数
    • aversion:znode的ACL修改次数
    • ephemeralOwner:如果znode是临时节点,则指示节点所有者的会话ID;如果不是临时节点,则为零。
    • dataLength:znode数据长度。
    • numChildren:znode子节点个数。

    (2)、znode中的存在类型

    我们知道了zookeeper内部维护了一套数据结构:由znode构成的集合,znode的集合又是一个树形结构。每一个znode又有很多属性进行描述。并且znode的存在性还分为四类,如下如所示:

    znode是由客户端创建的,它和创建它的客户端的内在联系,决定了它的存在性:

    ·       PERSISTENT-持久化节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点也不会被删除(除非您使用API强制删除)。

    ·       PERSISTENT_SEQUENTIAL-持久化顺序编号节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znodezxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当客户端与zookeeper服务的连接断开后,这个节点也不会被删除。

    ·       EPHEMERAL-临时目录节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点(还有涉及到的子节点)就会被删除。

    ·       EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znodezxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当创建这个节点的客户端与zookeeper服务的连接断开后,这个节点被删除。

    ·       另外,无论是EPHEMERAL还是EPHEMERAL_SEQUENTIAL节点类型,在zookeeperclient异常终止后,节点也会被删除。

    4 Zookeeper 数据结构

                                                     

    Zookeeper这种数据结构有如下这些特点:

    1. 每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1
    2. znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录
    3. znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
    4. znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
    5. znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
    6. znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍

    (3)、zk中的选举FastLeaderELection

    我们已经知道了一个zookeeper集群中,有一个处于leader身份的节点,其他的节点都是flower状态。那么一个leader是怎么产生的呢?这就是zookeeper中的选举规则,默认的选举规则称为:FastLeaderELection(网上的资料还有提到另外的选举算法,实际上它们的核心思想都是一样的)

    3.1、选举算法的中心思想

    网上的资料有使用纯文字进行算法描述的,也有使用流程图进行算法描述的,但是如果读者不仔细看,还是容易昏头转向,这里我们使用一张过程图和文字相结合的方式对FastLeaderELection选举算法进行描述。实际上FastLeaderELection说的中心思想无外乎以下几个关键点:

    ·       全天下我最牛,在我没有发现比我牛的推荐人的情况下,我就一直推举我当leader。第一次投票那必须推举我自己当leader

    ·       每当我接收到其它的被推举者,我都要回馈一个信息,表明我还是不是推举我自己。如果被推举者没我大,我就一直推举我当leader,是我是我还是我!

    ·       我有一个票箱,和我属于同一轮的投票情况都在这个票箱里面。一人一票 重复的或者过期的票,我都不接受。

    ·       一旦我不再推举我自己了(这时我发现别人推举的人比我推荐的更牛),我就把我的票箱清空,重新发起一轮投票(这时我的票箱一定有两票了,都是选的我认为最牛的人)。

    ·       一旦我发现收到的推举信息中投票轮要高于我的投票轮,我也要清空我的票箱。并且还是投当初我觉得最牛的那个人(除非当前的人比我最初的推荐牛,我就顺带更新我的推荐)。

    ·       不断的重复上面的过程,不断的告诉别人我的投票是第几轮我推举的人是谁。直到我的票箱中我推举的最牛的人收到了不少于 N /2 + 1的推举投票。

    ·       这时我就可以决定我是flower还是leader了(如果至始至终都是我最牛,那我就是leader咯,其它情况就是follower咯)。并且不论随后收到谁的投票,都向它直接反馈我的结果

     

    上图是网络上的一张选举过程图,步骤是怎么样的,笔者我就不再多说了,只希望这个能辅助大家更好的理解选举过程。

    哦,现在您知道为什么zookeeper在少于 N + 1 / 2的节点处于工作状态的情况下会崩溃了吧。因为,无论怎么选也没有任何节点能够获得 N + 1 / 2 的票数。

    以上参考资料来至互联网部分博客,请尊重原创!

     

     

     

    2.4.4.2 下载或则上传tar包到

    注意:zookeeper我们只装在node3,node4,node5上即可(安装台数要是基数)

    去官网下载zookeeper-3.4.8tar包,直接下载到/app/opt/zookeeper/目录下,也可以下载到本地,然后上传至服务器的/app/opt/zookeeper目录下,然后解压

    2.4.4.3 安装配置

    解压后进入zookeeper的conf目录下

     

     

    然后cp zoo_sample.cfg  zoo.cfg之后vim zoo.cfg文件,我的配置如下

    # The number of milliseconds of each tick

    tickTime=2000

    # The number of ticks that the initial

    # synchronization phase can take

    initLimit=10

    # The number of ticks that can pass between

    # sending a request and getting anacknowledgement

    syncLimit=5

    # the directory where the snapshot is stored.

    # do not use /tmp for storage, /tmp here isjust

    # example sakes.

    dataDir=/app/data/zookeeper/data

    dataLogDir=/app/logs/zookeeper

    # the port at which the clients will connect

    clientPort=2181

    # the maximum number of client connections.

    # increase this if you need to handle moreclients

    #maxClientCnxns=60

    #

    # Be sure to read the maintenance section ofthe

    # administrator guide before turning onautopurge.

    #

    #http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

    #

    # The number of snapshots to retain in dataDir

    #autopurge.snapRetainCount=3

    # Purge task interval in hours

    # Set to "0" to disable auto purgefeature

    #autopurge.purgeInterval=1

    server.3=node3:2888:3888

    server.4=node4:2888:3888

    server.5=node5:2888:3888

    然后分别在node3,node4,node5的/app/data/zookeeper/data/目录下创建myid文件,文件内容分别为3,4,5

    然后我们把zookeeper的启动脚本添加到环境变量里边,添加环境变量在这里就不啰嗦了。

    OK。到此zookeeper安装完成,下面我们启动zookeeper集群

    分别在node3,node4,node5上启动zookeeper

    /app/opt/zookeeper/zookeeper-3.4.8//bin/zkServer.shstart 启动

    /app/opt/zookeeper/zookeeper-3.4.8//bin/zkServer.shstop 停止

    /app/opt/zookeeper/zookeeper-3.4.8//bin/zkServer.shstatus 查兰状态

    至此,zookeeper集群就已经OK

    2.4.4.4 Hadoop格式化启动

    进入五台服务器的/app/opt/hadoop/hadoop-2.7.3/sbin目录下

    1 在node1上执行

    hdfszkfc -formatZK    使hadoop和zk集群发生关联

     

    发生关系成功,接下来进行下一步

    2 分别在node3,node4,node5上执行hadoop-daemon.sh start journalnode

    用来启动journalnode服务

    3 格式化namenode、启动namenode

    在node1服务器hadoop主服务器的bin下执行(我们用node作为主节点,node2作为备用节点)

    hdfsnamenode –format

    格式化成功,进入下一步

    在sbin下启动namenode

    hadoop-daemon.sh start namenode

    在node2上执行bin/hdfsnamenode –bootstrapStandby

     

    然后在node2上执行hadoop-daemon.sh start namenode

    此时node备用的namenode已经启动

    4启动datanode

    在node1上执行hadoop-daemons.sh start datanode  

    Datanode会在node2,node3,node4,node5上自动启动

    4 启动ZKFC

    在node1,node2上分别启动hadoop-daemon.sh start zkfc

    至此namenode的高可用已经完全启动,下面我们就行验证

    2.4.5 namenode高可用验证

    1 首先通过浏览器访问192.168.21.161:50070

    从上图可以看出node1是活跃状态,下边看看node2

     

     

     

     

     

     

     

     

     

     

     

    从上图可以看到node2是备用状态,那么现在我们杀死node1的namenode进程,在查看node1已经无法访问了

    那么我们看看node2

     

     

     

     

     

     

     

     

     

    OK,这说明node1出问题时,node2会自动转化为活跃状态,那么我们再次启动node1,看看node1是不是备用状态,如果是,那么就OK了

    到这里namenode高可用验证成功,就OK了

    2.4.6 resourcemanage高可用

    在node1上执行start-yarn.sh,效果如下

     

     

     

     

     

     

    然后在node2上执行yarn-daemon.shstart resourcemanager,我们发现无论我们怎么访问node2:8088,还是直接转移到node1上了,这说明高可用是生效的,那么我们不妨关闭node1resourcemanage进程试试看

     

    说明node2已经代替了node1,然后我们在启动node1rm进程,访问node1:8088结果又转移到了node2上,到这里hadoop集群就算是完成了,其实这些东西用起来很简单的哦!

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

                                                                                                                                                          

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    然后选择centos64和linux,如下,然后点击下一步

     

     

     

     

     

     

     

    选择虚拟机上机器的名称已经安装机器的位置,然后下一步

     

     

     

     

     

     

     

     

    然后选择

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    选择自定义硬件,如下

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    如上图所示,内存,处理器等可以根据自己的需求自行设置,需要注意的是网络需要选择nat模式,自定义也可以,如果选择其他模式ip变化了,在集群运行时是会出问题的,小编的配置如下

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    接着上边说,配置完硬件后点击完成,点击开启虚拟机,为了简单以下截图而过了

     

     

     

     

     

     

     

    说明:

    1.install or upgrade an existing system
    安装或升级现有系统

    2.install system with basic video drive
    安装过程中采用基本的显卡驱动

    3.rescue installed system
    进入系统修复模式

    4.Boot from local drive
    退出安装从硬盘启动

    5.memory test
    内存检测

    6.press tab to edit options
    “tab”来编辑选项

    在这里选择1就可以了

    然后如下选择

     



     

     

    ,,

     

     

     

     

     

     

     

     

     

     

     

    6.选择英文或者中单都可以,在这里推荐选择英文

     

    然后选择美式键盘

     

     

     

    这里选择基本存储,无需要选择指定存储如下

     

    这里选择格式化任何数据

     

     

     

     

     

     

     

     

     

     

    小编的网络配置如下

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    根据自己具体的网络情况定义

    编辑完成后点击apply,此时已经退出编辑页面,然后点击下一步

    选择亚洲,上海

     

    设置服务器的密码

    然后选择使用使用所有空间,不再做过多分区介绍了,感兴趣自己研究下,如下

    然后选择如下,因为是实验环境为了方便在上边开发,我们安装了桌面模式,真正生产中是只选择基础模式就可以了,如下

     

     

     

     

     

     

     

     

     

     

     

    然后就是系统安装了,然后

     

     

    后边都直接选择默认即可。

    我们登录系统后需要通过root用户在根目录下创建个数据目录,来模仿企业的数据盘,同时将app目录授权给hadoop,执行命令如下

    chown -R hadoop.hadoop app我们将所有的安装,然后

    我们在app下建立两个目录,opt和pro,到这里我们的系统算是差不多了,需要用到的后边在补写。

    2.3大数据平台基础依赖安装

    2.3.1 jdk安装

    在这里首先说一下,系统默认会带openjdk,系统自带的这种不好用,我在这里就直接卸载了,命令如下

    以root权限执行rpm -qa | grep jdk ,如下

     

     

     

     

    然后 yum -y remove 你所过滤出来的包,我的卸载如下

    rpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64

    rpm -e --nodepsjava-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64

    然后检查一下是否卸载了,我们可以执行个java,然后报错了,说明卸载干了

     

     

     

    在这里我们选择1.8,因为scala等还需要依赖(1.7也可以,不推荐1.6,1.6用的人很少了)

    具体jdk安装请查看百度,在这里不做过多的介绍,只做简单介绍

    我的JDK放在这个目录下了,如下图所示

    然后,我们配置系统级别的环境变量,命令如下

    vim /etc/profile

    然后在这里添加环境变量即可

    export JAVA_HOME=/app/opt/jdk/jdk1.8.0_141

    export PATH=$PATH:$JAVA_HOME/bin:

    然后source/etc/profile

    OK,这样我们的jdk就安装好了,可以验证一下

    OK,到这里说明jdk已经安装好了,环境变量也生效了

    2.3.2 scala安装

    由于后边我们玩spark,spark是用scala语言开发的,所以我们需要安装scala语言

    一般系统默认是不会自带scala的,所以不需要卸载,下面我们开始安装

    同样下载scala tar包,我这里下载的是

    我的安装目录在这里

     

     

     

    然后vm/etc/profile

     

     

     

    然后source/etc/profile

    验证和java相同,在这里就不再介绍了

    2.3.3 Python

    由于系统自带的Python是2.6.6,可以满足我们可基本需求,在这里我就不再安装了,需要安装的请自行百度,很简单的!

    2.3.4系统准备

    2.3.4.1准备五台服务器

    我们将现有的一台服务复制5份,找一个大于100GB的空间,我这里笔记本资源不多了,为了方便起见,我放在移动硬盘上了,分别命名为node1,node2,node3,node4,node5,当然你也可以克隆

    2.3.4.2 其他设置

    1 分别将5台服务器机IP改成192.168.21.161到192.168.21.165,(由于是虚拟机复制(在复制时候,会再次生成一个非eth0的网卡,这是由于复制过程中又生成了新的mac地址),会导致网卡从eth0依次增加,为了网卡统一,我们需要将所有的网卡修改成eth0),首先启动你刚才复制的机器

    1        cd /etc/udev/rules.d/

     

    2         现将cp 70-persistent-net.rules70-persistent-net.rules.bak 文件备份一下在编辑,以防出错

    3        vim 70-persistent-net.rules eth0那行注释掉,将eth1改成eth0,如下

     

     

    4        vim /etc/sysconfig/network-scripts/ifcfg-eth0 HWADDR改成上面那个信息(也就是新改成那行的HWADDR的后边的吗),就是MAC地址,并配置IP,同时记得将ONBOOT改为yes(默认是noyes是启用开机自动启动网卡功能)如下

     

     

     

     

     

     

     

     

     

     

     

     

    然后重启网卡,servicenetwork restart即可生效,

    5        因为是复制的虚拟机,需要将机器名依次修改成node1node5

    6        命令 hostname node2   临时将机器名修改为node2,如果重启机器又会恢复原来的机器名,故需要永久修改,修改命令如下

    vim /etc/sysconfig/network  如下

     

     

     

    7        关闭selinu,默认是开启的,需要关闭,常用命令如下

    sestatus   查看状态

     

     

     

     

     

     

    setenforce 0   临时关闭

    vim /etc/selinux/config  将SELINUX=enforcing修改为disabled

    8        关闭防护墙

    serviceiptables status  查看防火墙状态

    serviceiptables stop 关闭防火墙

    chkconfigiptables off  永久关闭防火墙

    9      修改系统最大打开文件数量,默认为1024,我们将其修改为65535

    解除Linux 系统的最大进程数和最大文件打开数限制:

    修改所有linux 用户的环境变量文件

    ulimit –a  查看linux相关信息

    ulimit -n 65535   临时修改为这么大

    永久修改如下

    vim/etc/security/limits.conf    具体需要修改的东西,根据具体情况修改即可,授权给所有用户也可以修改/etc/profile  ,我这里把open files数量修改为65535,max user processes 修改为257612

    将开机启动默认设置为字符界面,vim  /etc/inittab   id:5:修改为id:3重启即可

    到这里系统级别的依赖基本上差不多了,组件需要我们在后边在安装,比如ntp

    11 这样我们将5台机器出了IP和机器名都配置不同,其他配置全部相同(当然硬件配置可以根据主从节点修改)

    12 免秘钥登录 以hadoop权限做免秘钥登录(因为hadoop集群主从节点访问需要免秘钥访问,严格来说,只需要将做主节点到从节点免秘钥即可,但是为了方便我全部做免秘钥了,以便以后同步一些东西方便)

    以node1的hadoop用户为例

    进入/home/hadoop/.ssh目录

    执行 ssh-keygen -t dsa 生成公钥和私钥

    然后将公钥追加到一个文件  cat id_dsa.pub >> authorized_keys

    然后将authorized_keys拷贝到node2,3,4,5服务器上

    最后在node下执行chmod 600 authorized_keys即可实现node1到其他节点的免秘钥登录,其他节点同理,这里不再累赘了!

     

     

    2.4 hadoop安装

    2.4.1 hadoop的下载,官方下载hadoop编译好的包也可以下载源码自行编译,在这里我们下载官方预编译版本2.7.3吧,用一下新版本

    2.4.1解压

     将hadoop-2.7.3.tar.gz包放再/app/opt/hadoop/下然后解压

     

     

     

     

    2.4.2目录介绍

     进入cdhadoop-2.7.3/       ll

     

     

     

     

     

     

     

     

     

    目录介绍

    2.4.2.1 bin

    bin 目录介绍

    主要是存放一下hadoop命令

    container-executor  执行container

    hadoop     执行hadoop相关命令,比如hadoop fs等(linux环境运用)

    hadoop.cmd 执行hadoop相关命令,比如hadoop fs等(windows环境运用)

    hdfs        执行hdfs相关命令,比如hdds  dfsadmin等(linux环境运用)

    hdfs.cmd    执行hdfs相关命令,比如hdds  dfsadmin等(windows环境运用)

    mapred     执行map命令(linux运用)

    mapred.cmd 执行map命令(windows运用)

    rcc         用来生成 java和c++的hadoop Record 类代码

    test-container-executor   用来测试container-executor

    yarn      用来执行yarn的相关命令比如yarn  –node list(linux)

    yarn.cmd  用来执行yarn的相关命令比如yarn  –node list(windows)

    具体详细命令请查看官方文档或者帮助文件

    2.4.2.2 etc

     etc下边的hadoop目录下存放着hadoop的配置文件,默认如下

    capacity-scheduler.xml       capacity调度相关配置文件,主要是和yarn结合使用

    configuration.xsl            根元素配置(不是特别清楚)

     

     

     

    container-executor.cfg      container-executor执行先关配置

    core-site.xml             hadoop核心配置文件

    hadoop-env.cmd          hadoop启动运行环境(windows)

    hadoop-env.sh            hadoop启动运行环境(linux)

    hadoop-metrics2.properties 控制Hadoop报告

    hadoop-metrics.properties  控制Hadoop报告

    hadoop-policy.xml         权限管理相关配置

    hdfs-site.xml              hdfs配置文件

    httpfs-env.sh              httpfs启动环境配置

    httpfs-log4j.properties      httpfs-log4j配合模板

    httpfs-signature.secret      好像是一个认证密令的配置(不太清楚)

    httpfs-site.xml             httpfs配置

    kms-acls.xml               kms安装认证

    kms-env.sh                kms启动运行环境

    kms-log4j.properties         kms 日志模板

    kms-site.xml               kms配置

    log4j.properties            log4j模板

    mapred-env.cmd            map启动运行时环境(windows)

    mapred-env.sh              map启动运行时环境(linux)

    mapred-queues.xml.template  map队列模板配置

    mapred-site.xml.template     map配置文件

    slaves                     从节点配置

    ssl-client.xml.example        ssl客户端配置模板

    ssl-server.xml.example        ssh服务端配置模板

    yarn-env.cmd                yarn启动时运行环境(windows)

    yarn-env.sh                  yarn启动时运行环境(linux)

    yarn-site.xml                 yarn配置文件

    2.4.2.4 include

    对外提供的编程库文件,与lib结合相关,这些头文件均是用C++定义的,通常用于C++访问dfs和编写mr

    2.4.2.5 lib

    该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用

    2.4.2.6 libexec

    用来提供hadoop相关启动命令的shell初始化调用。

    2.4.2.7 sbin

    distribute-exclude.sh         没用过,不太清楚      

    hadoop-daemon.sh          启动单个任务

    hadoop-daemons.sh         启动多个任务

    hdfs-config.cmd             hdfs-config调用(windows)

    hdfs-config.sh               hdfs-config调用(linux)

    httpfs.sh                   httpfs执行脚本

    kms.sh                    kms执行脚本

    mr-jobhistory-daemon.sh     mr启动job历史服务

    refresh-namenodes.sh       恢复namenode脚本

    slaves.sh                  执行datanode节点

    start-all.cmd              启动所有组件(windows)

    start-all.sh                启动所有组件(linux)

    start-balancer.sh           手动负载均衡

    start-dfs.cmd              启动dfs(windows)

    start-dfs.sh                启动dfs(linux)

    start-secure-dns.sh         启动secure-dns      

    start-yarn.cmd             启动yarn(windows)

    start-yarn.sh              启动yarn(linux)

    stop-all.cmd              停止hadoop所有组件(windows)

    stop-all.sh                停止hadoop所有组件(linux)

    stop-balancer.sh           停止负载均衡

    stop-dfs.cmd              停止dfs(windows)

    stop-dfs.sh                停止dfs(linux)

    stop-secure-dns.sh         停止secure-dns

    stop-yarn.cmd             停止yarn(windows)

    stop-yarn.sh               停止yarn(linux)

    yarn-daemon.sh            停止yarn的单个节点的yarn相关组件

    yarn-daemons.sh           停止yarn的多个节点的yarn相关组件

    2.4.2.8 share

    共享的demo和编译后的相关jar包等

    2.4.3 hadoop配置文件配置

    2.4.3.1 capacity-scheduler.xml配置

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

    <configuration>

    <!-- Resource Allcation -->

     <property>

         <name>yarn.scheduler.capacity.root.queues</name>

         <value>offline,online,default</value>

         <description>The sub queues in the newly created root queueinclude offline queues, online queues, default queues</description>

     </property>

       <!-- offline -->

      <property>

         <name>yarn.scheduler.capacity.root.offline.capacity</name>

         <value>30</value>

         <description>Offline occupancy ratio</description>

     </property>

       <property>

         <name>yarn.scheduler.capacity.root.offline.queues</name>

         <value>hive,sqoop,spark_thrift</value>

      </property>

             <!--hive -->

      <property>

        <name>yarn.scheduler.capacity.root.offline.hive.capacity</name>

        <value>30</value>

      </property>

      <property>

                  <name>yarn.scheduler.capacity.root.offline.hive.user-limit-factor</name>

                                   <value>5</value>

                  <description>the limit ofeveryuser use resource</description>

      </property>

     

      <property>

                  <name>yarn.scheduler.capacity.root.offline.hive.maximum-capacity</name>

                  <value>100</value>

      </property>

      <!--sqoop-->

             <property>

                            <name>yarn.scheduler.capacity.root.offline.sqoop.capacity</name>

                                            <value>30</value>

             </property>

     

             <property>

                             <name>yarn.scheduler.capacity.root.offline.sqoop.user-limit-factor</name>

                                             <value>5</value>

             </property>

     

            <property>

                            <name>yarn.scheduler.capacity.root.offline.sqoop.maximum-capacity</name>

                                            <value>70</value>

             </property>

                 <!-- spark_thrift -->

               <property>

                            <name>yarn.scheduler.capacity.root.offline.spark_thrift.capacity</name>

                                              <value>40</value>

               </property>

     

               <property>

                            <name>yarn.scheduler.capacity.root.offline.spark_thrift.user-limit-factor</name>

                                              <value>5</value>

               </property>

     

               <property>

                             <name>yarn.scheduler.capacity.root.offline.spark_thrift.maximum-capacity</name>

                                               <value>80</value>

               </property>

         <!-- online -->

             <property>

                  <name>yarn.scheduler.capacity.root.online.maximum-capacity</name>

                                        <value>-1</value>

                  <description>

                        The maximum capacity of thedefault queue.

                  </description>

             </property>

     

           <property>

                     <name>yarn.scheduler.capacity.root.online.capacity</name>

                                       <value>60</value>

           </property>

     

     <property>

       <name>yarn.scheduler.capacity.maximum-applications</name>

       <value>10000</value>

       <description>

         Maximum number of applications that can be pending and running.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.maximum-am-resource-percent</name>

       <value>0.1</value>

       <description>

         Maximum percent of resources in the cluster which can be used to run

         application masters i.e. controls number of concurrent running

         applications.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.resource-calculator</name>

       <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value>

       <description>

         The ResourceCalculator implementation to be used to compare

         Resources in the scheduler.

         The default i.e. DefaultResourceCalculator only uses Memory while

         DominantResourceCalculator uses dominant-resource to compare

         multi-dimensional resources such as Memory, CPU etc.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.queues</name>

       <value>default</value>

       <description>

         The queues at the this level (root is the root queue).

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.capacity</name>

       <value>100</value>

       <description>Default queue target capacity.</description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.user-limit-factor</name>

       <value>1</value>

       <description>

         Default queue user limit a percentage from 0.0 to 1.0.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>

       <value>100</value>

       <description>

         The maximum capacity of the default queue.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.state</name>

       <value>RUNNING</value>

       <description>

         The state of the default queue. State can be one of RUNNING or STOPPED.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>

       <value>*</value>

       <description>

         The ACL of who can submit jobs to the default queue.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>

       <value>*</value>

       <description>

         The ACL of who can administer jobs on the default queue.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.node-locality-delay</name>

       <value>40</value>

       <description>

         Number of missed scheduling opportunities after which theCapacityScheduler

         attempts to schedule rack-local containers.

         Typically this should be set to number of nodes in the cluster, Bydefault is setting

         approximately number of nodes in one rack which is 40.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.queue-mappings</name>

       <value></value>

       <description>

         A list of mappings that will be used to assign jobs to queues

         The syntax for this list is [u|g]:[name]:[queue_name][,next mapping]*

         Typically this list will be used to map users to queues,

         for example, u:%user:%user maps all users to queues with the same name

         as the user.

       </description>

     </property>

     

     <property>

       <name>yarn.scheduler.capacity.queue-mappings-override.enable</name>

       <value>false</value>

       <description>

         If a queue mapping is present, will it override the value specified

         by the user? This can be used by administrators to place jobs in queues

         that are different than the one specified by the user.

         The default is false.

       </description>

     </property>

     

    </configuration>

     

    2.4.3.2 core-site.xml配置

    <?xml version="1.0"encoding="UTF-8"?>

    <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

     

    <!-- Put site-specific propertyoverrides in this file. -->

     

    <configuration>

             <property>

                      <name>fs.defaultFS</name>

                      <value>hdfs://ns/</value>

             </property>

             <property>

                      <name>hadoop.tmp.dir</name>

                      <value>/app/data/hadoop/hdfs/tmp</value>

             </property>

             <property>

                      <name>ha.zookeeper.quorum</name>

                      <value>node3:2181,node4:2181,node5:2181</value>

             </property>

             <property>

                      <name>dfs.datanode.max.transfer.threads</name>

                     <value>4096</value>

             </property>

             <property>

             <name>hadoop.proxyuser.hue.hosts</name>

             <value>*</value>

             </property>

     

             <property>

                      <name>hadoop.proxyuser.hue.groups</name>

                      <value>*</value>

             </property>

     

             <property>

                      <name>hadoop.security.instrumentation.requires.admin</name>

                      <value>false</value>

             </property>

    </configuration>

    2.4.3.3 hadoop-env.sh 配置

    # Licensed to the Apache SoftwareFoundation (ASF) under one

    # or more contributor licenseagreements.  See the NOTICE file

    # distributed with this work for additionalinformation

    # regarding copyright ownership.  The ASF licenses this file

    # to you under the Apache License, Version2.0 (the

    # "License"); you may not usethis file except in compliance

    # with the License.  You may obtain a copy of the License at

    #

    #    http://www.apache.org/licenses/LICENSE-2.0

    #

    # Unless required by applicable law oragreed to in writing, software

    # distributed under the License isdistributed on an "AS IS" BASIS,

    # WITHOUT WARRANTIES OR CONDITIONS OF ANYKIND, either express or implied.

    # See the License for the specific languagegoverning permissions and

    # limitations under the License.

     

    # Set Hadoop-specific environment variableshere.

     

    # The only required environment variable isJAVA_HOME.  All others are

    # optional. When running a distributed configuration it is best to

    # set JAVA_HOME in this file, so that it iscorrectly defined on

    # remote nodes.

     

    # The java implementation to use.

    export JAVA_HOME=/app/opt/jdk/jdk1.8.0_141

     

    # The jsvc implementation to use. Jsvc isrequired to run secure datanodes

    # that bind to privileged ports to provide authenticationof data transfer

    # protocol. Jsvc is not required if SASL is configured for authentication of

    # data transfer protocol usingnon-privileged ports.

    #export JSVC_HOME=${JSVC_HOME}

     

    exportHADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}

     

    # Extra Java CLASSPATH elements.  Automatically insert capacity-scheduler.

    for f in$HADOOP_HOME/contrib/capacity-scheduler/*.jar; do

      if[ "$HADOOP_CLASSPATH" ]; then

       export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f

     else

       export HADOOP_CLASSPATH=$f

      fi

    done

     

    # The maximum amount of heap to use, in MB.Default is 1000.

    #export HADOOP_HEAPSIZE=

    #exportHADOOP_NAMENODE_INIT_HEAPSIZE=""

     

    # Extra Java runtime options.  Empty by default.

    export HADOOP_OPTS="$HADOOP_OPTS-Djava.net.preferIPv4Stack=true"

     

    # Command specific options appended toHADOOP_OPTS when specified

    exportHADOOP_NAMENODE_OPTS="-XX:NewSize=228m -XX:MaxNewSize=512m -Xms2048m-Xmx2048m -XX:PermSize=228m -XX:MaxPermSize=356m-Xloggc:/app/logs/hadoop/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails-XX:+PrintGCTimeStamps -Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS}-Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender}$HADOOP_NAMENODE_OPTS"

    exportHADOOP_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS $HADOOP_DATANODE_OPTS"

     

    exportHADOOP_SECONDARYNAMENODE_OPTS="-Dhadoop.security.logger=${HADOOP_SECURITY_LOGGER:-INFO,RFAS}-Dhdfs.audit.logger=${HDFS_AUDIT_LOGGER:-INFO,NullAppender}$HADOOP_SECONDARYNAMENODE_OPTS"

     

    exportHADOOP_NFS3_OPTS="$HADOOP_NFS3_OPTS"

    export HADOOP_PORTMAP_OPTS="-Xmx512m$HADOOP_PORTMAP_OPTS"

     

    # The following applies to multiplecommands (fs, dfs, fsck, distcp etc)

    export HADOOP_CLIENT_OPTS="-Xmx512m$HADOOP_CLIENT_OPTS"

    #HADOOP_JAVA_PLATFORM_OPTS="-XX:-UsePerfData$HADOOP_JAVA_PLATFORM_OPTS"

     

    # On secure datanodes, user to run thedatanode as after dropping privileges.

    # This **MUST** be uncommented to enablesecure HDFS if using privileged ports

    # to provide authentication of datatransfer protocol.  This **MUST NOT** be

    # defined if SASL is configured forauthentication of data transfer protocol

    # using non-privileged ports.

    exportHADOOP_SECURE_DN_USER=${HADOOP_SECURE_DN_USER}

     

    # Where log files are stored.  $HADOOP_HOME/logs by default.

    export HADOOP_LOG_DIR=/app/logs/hadoop

     

    # Where log files are stored in the securedata environment.

    exportHADOOP_SECURE_DN_LOG_DIR=${HADOOP_LOG_DIR}/${HADOOP_HDFS_USER}

     

    ###

    # HDFS Mover specific parameters

    ###

    # Specify the JVM options to be used whenstarting the HDFS Mover.

    # These options will be appended to theoptions specified as HADOOP_OPTS

    # and therefore may override any similarflags set in HADOOP_OPTS

    #

    # export HADOOP_MOVER_OPTS=""

     

    ###

    # Advanced Users Only!

    ###

     

    # The directory where pid files are stored./tmp by default.

    # NOTE: this should be set to a directorythat can only be written to by

    #      the user that will run the hadoop daemons.  Otherwise there is the

    #      potential for a symlink attack.

    export HADOOP_PID_DIR=/app/data/hadoop/pids

    export HADOOP_SECURE_DN_PID_DIR=/app/data/hadoop/pids

     

    # A string representing this instance ofhadoop. $USER by default.

    export HADOOP_IDENT_STRING=$USER

    2.4.3.4 hdfs-site.xml配置

    <?xml version="1.0"encoding="UTF-8"?>

    <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

     

    <!-- Put site-specific propertyoverrides in this file. -->

     

    <configuration>

     <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致-->   

       <property>   

               <name>dfs.nameservices</name>   

                       <value>ns</value>   

                            </property> 

     

       <!-- ns下面有两个NameNode,分别是nn1,nn2 -->

       <property>

              <name>dfs.ha.namenodes.ns</name>

                     <value>nn1,nn2</value>

                          </property>

     

       <!-- nn1的RPC通信地址 -->

       <property>

              <name>dfs.namenode.rpc-address.ns.nn1</name>

                     <value>node1:9000</value>

                          </property>

     

       <!-- nn1的http通信地址 -->

       <property>

               <name>dfs.namenode.http-address.ns.nn1</name>

                       <value>node1:50070</value>

                            </property>

     

       <!-- nn2的RPC通信地址 -->

       <property>

               <name>dfs.namenode.rpc-address.ns.nn2</name>

                       <value>node2:9000</value>

                            </property>

     

       <!-- nn2的http通信地址 -->

       <property>

               <name>dfs.namenode.http-address.ns.nn2</name>

                       <value>node2:50070</value>

                            </property>

     

       <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

       <property>

                <name>dfs.namenode.shared.edits.dir</name>

                         <value>qjournal://node3:8485;node4:8485;node5:8485/ns</value>

                              </property>

                                 

    <!-- 指定JournalNode在本地磁盘存放数据的位置-->

       <property>

                 <name>dfs.journalnode.edits.dir</name>

                           <value>/app/data/hadoop/hdfs/journal</value>

                                </property>

                                 

     <!-- 开启NameNode故障时自动切换 -->

        <property>

                 <name>dfs.ha.automatic-failover.enabled</name>

                           <value>true</value>

                                </property>

                                   

    <!-- 配置失败自动切换实现方式 -->

       <property>

                    <name>dfs.client.failover.proxy.provider.ns</name>

                               <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

                                   </property>

                                      

     <!-- 配置隔离机制 -->

       <property>

                    <name>dfs.ha.fencing.methods</name>

                                 <value>sshfence</value>

                                     </property>

                                        

     <!-- 使用隔离机制时需要ssh免登陆 -->

       <property>

                   <name>dfs.ha.fencing.ssh.private-key-files</name>

                               <value>/home/hadoop/.ssh/id_rsa</value>

                                   </property>

                                                                 

       <property>   

                <name>dfs.namenode.name.dir</name>   

                       <value>file:///app/data/hadoop/hdfs/name</value>   

                            </property>   

                               

       <property>   

               <name>dfs.datanode.data.dir</name>   

                       <value>file:///app/data/hadoop/hdfs/data</value>   

                            </property>   

                               

       <property>   

              <name>dfs.replication</name>   

                     <value>3</value>   

                          </property>  

    </configuration>

    2.4.3.5 mapred-site.xml配置

    <?xml version="1.0"?>

    <?xml-stylesheettype="text/xsl" href="configuration.xsl"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

     

    <!-- Put site-specific propertyoverrides in this file. -->

     

    <configuration>

    <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    <!-- map reduce memory config -->

    <property>

     <name>mapreduce.map.java.opts</name>

     <value>-Xmx80m</value>

     </property>

     

    <!-- close gc -verbose:gc-Xloggc:/app/logs/hadoop/@taskid@.gc -->

    <property>

     <name>mapreduce.reduce.java.opts</name>

     <value>-Xmx80m</value>

     </property>

      

    <property>

     <name>yarn.app.mapreduce.am.resource.mb</name>

     <value>100</value>

     </property>

              

     

     

    <!-- temporarily ignore compression-->

    <property>

     <name>mapreduce.map.output.compress</name>

      <value>false</value>

       </property>

     

    <property>

     <name>mapreduce.output.fileoutputformat.compress</name>

      <value>false</value>

       </property>

     

    <property>

     <name>mapreduce.output.fileoutputformat.compress.type</name>

      <value>BLOCK</value>

      </property>

      <property>

       <name>mapreduce.jobhistory.address</name>

         <value>ns:10020</value>

         </property>

         <property>

          <name>mapreduce.jobhistory.webapp.address</name>

            <value>ns:19888</value>

            </property>

     

     

    <property>

     <name>mapreduce.fileoutputcommitter.marksuccessfuljobs</name>

      <value>false</value>

      </property>

    </configuration>

    2.4.3.6 slave配置

    node2

    node3

    node4

    node5

    2.4.3.6 yarn-site-xml 配置

    <?xml version="1.0"?>

    <!--

     Licensed under the Apache License, Version 2.0 (the"License");

      youmay not use this file except in compliance with the License.

      Youmay obtain a copy of the License at

     

       http://www.apache.org/licenses/LICENSE-2.0

     

     Unless required by applicable law or agreed to in writing, software

     distributed under the License is distributed on an "AS IS"BASIS,

     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

      Seethe License for the specific language governing permissions and

     limitations under the License. See accompanying LICENSE file.

    -->

    <configuration>

     

    <!-- Site specific YARN configurationproperties -->

    <!-- 指定nodemanager启动时加载server的方式为shuffleserver -->

        <property>   

            <name>yarn.nodemanager.aux-services</name>   

                  <value>mapreduce_shuffle</value>   

        </property>              

        <property>

            <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

            <value>org.apache.hadoop.mapred.ShuffleHandler</value>

         </property>

         <property>

     <!--yarn-HA -->

         <name>yarn.resourcemanager.ha.enabled</name>

         <value>true</value>

         </property>

         <property>

         <name>yarn.resourcemanager.cluster-id</name>

         <value>yrc</value>

         </property>

         <property>

         <name>yarn.resourcemanager.ha.rm-ids</name>

         <value>rm1,rm2</value>

         </property>

         <property>

         <name>yarn.resourcemanager.hostname.rm1</name>

         <value>node1</value>

         </property>

         <property>

         <name>yarn.resourcemanager.hostname.rm2</name>

         <value>node2</value>

         </property>

         <property>

         <name>yarn.resourcemanager.webapp.address.rm1</name>

         <value>node1:8088</value>

         </property>

         <property>

         <name>yarn.resourcemanager.webapp.address.rm2</name>

         <value>node2:8088</value>

         </property>

         <property>

         <name>yarn.resourcemanager.zk-address</name>

         <value>node3:2181,node4:2181,node5:2181</value>

         </property>

         <!-- memory of yarn used -->

        <property>

        <name>yarn.nodemanager.resource.memory-mb</name>

        <value>256</value>

        </property>

        <property>

        <name>yarn.scheduler.maximum-allocation-mb</name>

        <value>128</value>

        </property>

        <property>

        <name>yarn.scheduler.minimum-allocation-mb</name>

        <value>32</value>

        </property>

        <property>

        <name>yarn.nodemanager.vmem-check-enabled</name>

        <value>false</value>

        <description>Whether virtual memory limits will be enforcedfor    containers</description>

        </property>

        <property>

        <name>yarn.nodemanager.vmem-pmem-ratio</name>

        <value>2.1</value>

        <description>Ratio between virtual memory to physical memory whensetting memory limits for containers</description>

        </property>

       <!--the cores of cpu used by yarn -->

    <property>

             <name>yarn.nodemanager.resource.cpu-vcores</name>

                 <value>2</value>

                 </property>

     

    <property>

             <name>yarn.scheduler.maximum-allocation-vcores</name>

                 <value>2</value>

                 </property>

     

    <property>

             <name>yarn.scheduler.minium-allocation-vcores</name>

                 <value>1</value>

                 </property>

     

    <!-- yarn scheduler -->

    <property>

    <name>yarn.resourcemanager.scheduler.class</name>

    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>

    </property>

     

    <!-- yarn log -->

    <property>

    <name>yarn.nodemanager.log-dirs</name>

    <value>/app/logs/yarn/</value>

    </property>

     

    <property>

    <name>yarn.log-aggregation-enable</name>

    <value>true</value>

    </property>

     

     

    </configuration>

     

     

     

     

     

    目前我们先配置到这里吧,如果有其他需要改动的,或则修改的配置,我们可以再修改,水平有限,多多包涵!

    2.4.4 zookeeper安装

    2.4.4.1 zookeeper简单介绍

    什么是ZooKeeper?

    ZooKeeper是用于维护配置信息,命名,提供分布式同步和提供组服务的集中式服务。所有这些类型的服务以分布式应用程序以某种形式或另一种形式使用。每次执行它们时,都会有很多工作用于修复不可避免的错误和竞争条件。由于实施这些服务的困难,应用程序最初通常会吝啬,这使得它们在变化存在时变脆,难以管理。即使正确完成,这些服务的不同实现也会导致应用程序部署时的管理复杂性

    1 基础扫盲

    zookeeper以角色的形式存在,那么zookeeper设计到的角色有哪些呢?

    leader leader是zookeeper中角色之一,其作用是负责投票的发起和决议,以及更新系统状态,集群中有且只(允许)有一个leader,其实说白了就是zookeeper集群中的主节点

    Follower follower用来接收客户端(默认2181)端口发来的消息,将处理结果返回给客户端,并且参与leader选举投票

    Observer Observer是用来接收客户端请求,转发给leader的功能,不参与投票

    Client   Client作用是向zookeeper集群发起请求

    2 zookeeper总架构

    组成Zookeeper的各个服务器必须要能相互通信。他们在内存中保存了服务器状态,也保存了操作的日志,并且持久化快照。只要大多数的服务器是可用的,那么Zookeeper就是可用的。

    客户端连接到一个Zookeeper服务器,并且维持TCP连接。并且发送请求,获取回复,获取事件,并且发送连接信号。如果这个TCP连接断掉了,那么客户端可以连接另外一个服务器。

    (2)Zookeeper是有序的

    Zookeeper使用数字来对每一个更新进行标记。这样能保证Zookeeper交互的有序。后续的操作可以根据这个顺序实现诸如同步操作这样更高更抽象的服务。

    (3)Zookeeper是高效的

    Zookeeper的高效更表现在以读为主的系统上。Zookeeper可以在千台服务器组成的读写比例大约为10:1的分布系统上表现优异。

     

    (4)数据结构和分等级的命名空间

    Zookeeper的命名空间的结构和文件系统很像。一个名字和文件一样使用/的路径表现,zookeeper的每个节点都是被路径唯一标识

     

    3 zookeeper存储架构

    zookeeper中的数据是按照结构进行存储的。而且znode节点还分为4中不同的类型。

    (1)、znode

    根据本小结第一部分的描述,很显然zookeeper集群自身维护了一套数据结构。这个存储结构是一个树形结构,其上的每一个节点,我们称之为“znode”。如下如所示:

    ·       每一个znode默认能够存储1MB的数据(对于记录状态性质的数据来说,够了)

    ·       可以使用zkCli命令,登录到zookeeper上,并通过lscreatedeletesync等命令操作这些znode节点

    ·       znode除了名称、数据以外,还有一套属性:zxid。这套zid与时间戳对应,记录zid不同的状态(后续我们将用到)

    那么每个znode结构又是什么样的呢?如下图所示:

    此外,znode还有操作权限。如果我们把以上几类属性细化,又可以得到以下属性的细节:

    • czxid:创建节点的事务的zxid
    • mzxid:对znode最近修改的zxid
    • ctime:以距离时间原点(epoch)的毫秒数表示的znode创建时间
    • mtime:以距离时间原点(epoch)的毫秒数表示的znode最近修改时间
    • version:znode数据的修改次数
    • cversion:znode子节点修改次数
    • aversion:znode的ACL修改次数
    • ephemeralOwner:如果znode是临时节点,则指示节点所有者的会话ID;如果不是临时节点,则为零。
    • dataLength:znode数据长度。
    • numChildren:znode子节点个数。

    (2)、znode中的存在类型

    我们知道了zookeeper内部维护了一套数据结构:由znode构成的集合,znode的集合又是一个树形结构。每一个znode又有很多属性进行描述。并且znode的存在性还分为四类,如下如所示:

    znode是由客户端创建的,它和创建它的客户端的内在联系,决定了它的存在性:

    ·       PERSISTENT-持久化节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点也不会被删除(除非您使用API强制删除)。

    ·       PERSISTENT_SEQUENTIAL-持久化顺序编号节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znodezxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当客户端与zookeeper服务的连接断开后,这个节点也不会被删除。

    ·       EPHEMERAL-临时目录节点:创建这个节点的客户端在与zookeeper服务的连接断开后,这个节点(还有涉及到的子节点)就会被删除。

    ·       EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点:当客户端请求创建这个节点A后,zookeeper会根据parent-znodezxid状态,为这个A节点编写一个全目录唯一的编号(这个编号只会一直增长)。当创建这个节点的客户端与zookeeper服务的连接断开后,这个节点被删除。

    ·       另外,无论是EPHEMERAL还是EPHEMERAL_SEQUENTIAL节点类型,在zookeeperclient异常终止后,节点也会被删除。

    4 Zookeeper 数据结构

                                                     

    Zookeeper这种数据结构有如下这些特点:

    1. 每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1
    2. znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录
    3. znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
    4. znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
    5. znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
    6. znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍

    (3)、zk中的选举FastLeaderELection

    我们已经知道了一个zookeeper集群中,有一个处于leader身份的节点,其他的节点都是flower状态。那么一个leader是怎么产生的呢?这就是zookeeper中的选举规则,默认的选举规则称为:FastLeaderELection(网上的资料还有提到另外的选举算法,实际上它们的核心思想都是一样的)

    3.1、选举算法的中心思想

    网上的资料有使用纯文字进行算法描述的,也有使用流程图进行算法描述的,但是如果读者不仔细看,还是容易昏头转向,这里我们使用一张过程图和文字相结合的方式对FastLeaderELection选举算法进行描述。实际上FastLeaderELection说的中心思想无外乎以下几个关键点:

    ·       全天下我最牛,在我没有发现比我牛的推荐人的情况下,我就一直推举我当leader。第一次投票那必须推举我自己当leader

    ·       每当我接收到其它的被推举者,我都要回馈一个信息,表明我还是不是推举我自己。如果被推举者没我大,我就一直推举我当leader,是我是我还是我!

    ·       我有一个票箱,和我属于同一轮的投票情况都在这个票箱里面。一人一票 重复的或者过期的票,我都不接受。

    ·       一旦我不再推举我自己了(这时我发现别人推举的人比我推荐的更牛),我就把我的票箱清空,重新发起一轮投票(这时我的票箱一定有两票了,都是选的我认为最牛的人)。

    ·       一旦我发现收到的推举信息中投票轮要高于我的投票轮,我也要清空我的票箱。并且还是投当初我觉得最牛的那个人(除非当前的人比我最初的推荐牛,我就顺带更新我的推荐)。

    ·       不断的重复上面的过程,不断的告诉别人我的投票是第几轮我推举的人是谁。直到我的票箱中我推举的最牛的人收到了不少于 N /2 + 1的推举投票。

    ·       这时我就可以决定我是flower还是leader了(如果至始至终都是我最牛,那我就是leader咯,其它情况就是follower咯)。并且不论随后收到谁的投票,都向它直接反馈我的结果

     

    上图是网络上的一张选举过程图,步骤是怎么样的,笔者我就不再多说了,只希望这个能辅助大家更好的理解选举过程。

    哦,现在您知道为什么zookeeper在少于 N + 1 / 2的节点处于工作状态的情况下会崩溃了吧。因为,无论怎么选也没有任何节点能够获得 N + 1 / 2 的票数。

    以上参考资料来至互联网部分博客,请尊重原创!

     

     

     

    2.4.4.2 下载或则上传tar包到

    注意:zookeeper我们只装在node3,node4,node5上即可(安装台数要是基数)

    去官网下载zookeeper-3.4.8tar包,直接下载到/app/opt/zookeeper/目录下,也可以下载到本地,然后上传至服务器的/app/opt/zookeeper目录下,然后解压

    2.4.4.3 安装配置

    解压后进入zookeeper的conf目录下

     

     

    然后cp zoo_sample.cfg  zoo.cfg之后vim zoo.cfg文件,我的配置如下

    # The number of milliseconds of each tick

    tickTime=2000

    # The number of ticks that the initial

    # synchronization phase can take

    initLimit=10

    # The number of ticks that can pass between

    # sending a request and getting anacknowledgement

    syncLimit=5

    # the directory where the snapshot is stored.

    # do not use /tmp for storage, /tmp here isjust

    # example sakes.

    dataDir=/app/data/zookeeper/data

    dataLogDir=/app/logs/zookeeper

    # the port at which the clients will connect

    clientPort=2181

    # the maximum number of client connections.

    # increase this if you need to handle moreclients

    #maxClientCnxns=60

    #

    # Be sure to read the maintenance section ofthe

    # administrator guide before turning onautopurge.

    #

    #http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

    #

    # The number of snapshots to retain in dataDir

    #autopurge.snapRetainCount=3

    # Purge task interval in hours

    # Set to "0" to disable auto purgefeature

    #autopurge.purgeInterval=1

    server.3=node3:2888:3888

    server.4=node4:2888:3888

    server.5=node5:2888:3888

    然后分别在node3,node4,node5的/app/data/zookeeper/data/目录下创建myid文件,文件内容分别为3,4,5

    然后我们把zookeeper的启动脚本添加到环境变量里边,添加环境变量在这里就不啰嗦了。

    OK。到此zookeeper安装完成,下面我们启动zookeeper集群

    分别在node3,node4,node5上启动zookeeper

    /app/opt/zookeeper/zookeeper-3.4.8//bin/zkServer.shstart 启动

    /app/opt/zookeeper/zookeeper-3.4.8//bin/zkServer.shstop 停止

    /app/opt/zookeeper/zookeeper-3.4.8//bin/zkServer.shstatus 查兰状态

    至此,zookeeper集群就已经OK

    2.4.4.4 Hadoop格式化启动

    进入五台服务器的/app/opt/hadoop/hadoop-2.7.3/sbin目录下

    1 在node1上执行

    hdfszkfc -formatZK    使hadoop和zk集群发生关联

     

    发生关系成功,接下来进行下一步

    2 分别在node3,node4,node5上执行hadoop-daemon.sh start journalnode

    用来启动journalnode服务

    3 格式化namenode、启动namenode

    在node1服务器hadoop主服务器的bin下执行(我们用node作为主节点,node2作为备用节点)

    hdfsnamenode –format

    格式化成功,进入下一步

    在sbin下启动namenode

    hadoop-daemon.sh start namenode

    在node2上执行bin/hdfsnamenode –bootstrapStandby

     

    然后在node2上执行hadoop-daemon.sh start namenode

    此时node备用的namenode已经启动

    4启动datanode

    在node1上执行hadoop-daemons.sh start datanode  

    Datanode会在node2,node3,node4,node5上自动启动

    4 启动ZKFC

    在node1,node2上分别启动hadoop-daemon.sh start zkfc

    至此namenode的高可用已经完全启动,下面我们就行验证

    2.4.5 namenode高可用验证

    1 首先通过浏览器访问192.168.21.161:50070

    从上图可以看出node1是活跃状态,下边看看node2

     

     

     

     

     

     

     

     

     

     

     

    从上图可以看到node2是备用状态,那么现在我们杀死node1的namenode进程,在查看node1已经无法访问了

    那么我们看看node2

     

     

     

     

     

     

     

     

     

    OK,这说明node1出问题时,node2会自动转化为活跃状态,那么我们再次启动node1,看看node1是不是备用状态,如果是,那么就OK了

    到这里namenode高可用验证成功,就OK了

    2.4.6 resourcemanage高可用

    在node1上执行start-yarn.sh,效果如下

     

     

     

     

     

     

    然后在node2上执行yarn-daemon.shstart resourcemanager,我们发现无论我们怎么访问node2:8088,还是直接转移到node1上了,这说明高可用是生效的,那么我们不妨关闭node1resourcemanage进程试试看

     

    说明node2已经代替了node1,然后我们在启动node1rm进程,访问node1:8088结果又转移到了node2上,到这里hadoop集群就算是完成了,其实这些东西用起来很简单的哦!

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


    展开全文
  • 工业大数据平台需求分析

    千次阅读 2019-01-11 11:35:30
    工业大数据平台需求分析 按照标准化的思路建设大数据平台,实现政务数据、企业数据及其他数据的安全接入、存储、共享、分析、应用和管理的目标,以支撑整个创新创业生态、大数据产业链的健康发展。工业大数据平台...

    按照标准化的思路建设大数据平台,实现政务数据、企业数据及其他数据的安全接入、存储、共享、分析、应用和管理的目标,以支撑整个创新创业生态、大数据产业链的健康发展。工业大数据平台主要由企业服务平台(1)运行监测平台(2)智能分析平台(3) 3大系统组成。

    企业服务平台

    企业服务平台主要针对企业用户;包含信息服务双签服务项目服务

    1.1信息服务

    企业的信息服务包括企业自画像及政策信息。
    企业画像信息来源通过企业自身上传和大数据平台获取,包含信用、人社、财政等信息。
    政策信息包括政府各部室发布的各项政策或企业扶持文件。

    1.2双签服务

    一个是为企业所用的工单系统,企业发起诉求->双签部门接收后分发相应部门->部门处理后回复->工单完结确认 ,工单进度采用邮件/短信提醒。
    一个是对双签部门的设置,可自行定期为企业和部门进行绑定。

    1.3项目服务

    对以往纸制项目申报流程的电子化

    运行监测平台

    2.1核心指标

    规上工业企业数量
    规上工业增长速度
    技改投资
    工业利润增速
    企业亏损面

    2.2生产要素

    工业用电量
    工业用气量
    工业人才数
    工业企业贷款余额
    工业切换专项资金

    2.3重点产业分析

    2.4重点区域分析

    智能分析平台

    3.1数据挖掘

    将多个数据源(企业上传,平台获取)通过ETL进行数据整合,关联。透过事件的表象发现隐藏在背后的蛛丝马迹,从而找到潜伏的规律以及看似无关事物之间背后的联系,用此来洞察数据趋势。

    3.2智能钻取

    当我们想从规上工业增长速度排名报表中,找出排名首位的明细数据,以此分析其位列首位的原因。

    这个时候,在网格BI报表分析工具中,只需两次双击便可直接调取明细

    3.3大数据可视化

    可以优美地将大数据中的繁杂简化成既美观又富有意义的可视化图形/表格。同时支持大屏,PC,手机三端显示。

    展开全文
  • 橙石企业大数据平台基于收录的全国1000万+企业大数据,帮助政府、园区从采集的多维企业数据中找到企业成长价值,从而调整区域内企业市场的平稳发展;帮助企业精准掌握行业动态,分析竞争对手优势,从而调整商业布局...

    橙石企业大数据平台基于收录的全国1000万+企业大数据,帮助政府、园区从采集的多维企业数据中找到企业成长价值,从而调整区域内企业市场的平稳发展;帮助企业精准掌握行业动态,分析竞争对手优势,从而调整商业布局;帮助金融分析全面的企业信用与企业项目投资价值,引导精准投资。 

    一、橙石企业大数据平台为政府打造决策支撑平台

    基于橙石企业大数据平台丰富的数据资源与数据挖掘能力,面向政府、高校、园区机构对于大数据及其衍生产品的实际需求,整合政府数据资源和企业大数据,形成全面覆盖宏观、微观,省、市、县、园区,标准行业和新兴产业全产业链的大数据服务产品,为政府提供决策支撑。

    效果

    1. 解决了企业谎报隐瞒信息的情况,帮助政府机构掌握企业的运营风险及经营财务指标(包含企业成长能力、现金流、偿债能力等各项指标),掌握企业经营状况,评估企业稳健发展的可能性,对处于困境中的优质企业进行扶持,对存在违规的企业进行相应的处罚,使当地的企业处于健康的发展状态中。
    2. 解决了企业在申报项目时,无法准确的评估项目的可行性以及相关联项目在同地区同行业排位水平。帮助政府扶持优质项目、优质企业从而加速地方企业经济发展。
    3. 根据企业数据生成企业成长的可视化图文,使政府监测人员能更清晰直观的看出企业的成长状况,从而使决策更具智慧性与科学性。

    二、橙石企业大数据平台助力政府打造智慧园区

    采用云计算、大数据先进理念与技术,充分融合产业园内部数据与外部数据,打破园区独立作业模式,实现各园区之间,园区内部企业之间的数据共享,并提供独有的企业评价和数据洞察服务。帮助政府部门统筹园区规划,吸引人才创业,实现政企互动,促进经济发展,打造智慧园区。

    效果

    1. 橙石企业大数据平台打造服务政府部门的企业评价决策支撑平台,服务园区机构的企业指数排名及企业洞察平台。同时,橙石企业大数据平台为提高中小企业扶持精准度提供数据支持,推动产业园规划建设走向智能化时代。
    2. 政府打造智慧园区的建设,一方面提升了园区内部的政务管理能力,增强园区在推动企业创新上的服务能力; 另一方面通过智慧园区建设,把园区管理机构、园区企业、园区职工等园区内各方的优势资源加以整合,为园区打造一个整体的优质品牌,显著提升园区对高素质人才的吸引力和凝聚力。

    三、橙石企业大数据平台推动企业稳定发展

    橙石企业大数据平台以企业成长性评价为基础从企业查询、数据洞察、指数排名等业务场景出发,帮助企业管理者构建企业成长评价报告。

    效果

    1. 多指标、全方面的评价方法使企业成长性的衡量更加精确,适用于更多的行业。
    2. 科学有效的中小企业成长能力评价方法一方面能够更好的指导投资者的投资决策;另一方面能够给那些发展态势良好的企业带来更好的融资机会,有利于优质中小企业的长远发展,优胜劣汰,在一定程度上驱逐劣质中小企业的存在,使我国中小企业市场能够朝着一种良性的方向发展。

       

    四、橙石企业大数据平台打造8大工具为投资者或者政府提供企业信息智能化查询:

    1. 监控预警

    橙石企业大数据平台通过监测目标企业群体发展扩张、知识产权、荣誉资质、商业贸易、违法违规、企业变更、社会舆情等信息变动情况,同时嵌入企业风险预警模型,全方位动态监控企业发展变化。

    1. 企业身份验证

    橙石企业大数据平台基于全国企业工商登记信息、法定代表人基本信息,面向大型电商平台、银行等用户,主要针对用户基础信息大批量审核的业务需求,提供快速、全面、准确的线上信息验证服务;能够为电子商务企业提供网络身份与实体身份虚实对应验证服务,为金融机构提供相关客户的“身份”信息,以供验证。

    1. 企业背景调查

    面向银行、担保、小额贷款、PEVC投资机构等用户,橙石企业大数据平台提供企业全景信息数据查询、背景调查报告定制等服务,还可以提供信用评估与风险监控,辅助资产管理公司风险管控体系的建设和落实。

    1. 优质企业推选

    面向政府、银行、投资机构等用户,橙石企业大数据平台针对招商、获客等具体业务环节,提供按需定位用户群体的服务,可以帮助政府招商部门快速搜索定位出拟招名单,择优招入;帮助政府采购部门慎重选择供应商,有效规避政府采购风险;可以为银行定位优质客户资源

    1. 企业风险评估

    橙石企业大数据平台以全国全量企业的全景数据资源为研究基础构建企业风险评估体系,包括单体风险评估与集团风险评估,能够嵌入具体业务需求场景,为银行、担保、投行、政府等不同用户提供专业、科学、严谨的企业风险评估,有效规避潜在的经营风险与资金风险,助力客户资源分类管理、信贷前期风险评估、采购企业风险审核、招投标企业资质评级等应用环节。

    1. 失信核查

    面向政府、金融、第三方等用户,橙石企业大数据平台提供更全面的企业黑名单信息核查功能,汇总信用中国、最高法、安监总局、证监会等权威部门发布的黑名单,核查企业及其关联企业在司法、税收、金融、政府采购等不同领域列入黑名单的情况,帮助提前发掘企业风险信息。

    1. 关联关系探寻

    橙石企业大数据平台提供的商业谱系能够准确捕获企业间的隐性关系,快速获知整个网络的属性特征,是企业风险评估体系的重要组成部分,能够为银行、担保、PEVC投资机构等用户提供客户风险深度评估,是信贷、投资等业务开展的最全面的参考依据

    1. KPI指标评价

    面向银行、担保、第三方等用户,橙石企业大数据平台提供颠覆传统的企业重要指标数评价模式,通过财务实力、创新能力、合规表现、发展运营4个评价维度,结合企业价值评估模型的综合评估,即可轻松快捷的定位目标企业在全国对标企业的位置,洞悉企业的发展动态。

    五、总结

    橙石企业大数据平台是一个基于企业大数据采集、机器学习、模型算法、指数排名、数据标准、数据洞察的企业大数据平台。基于收录的全国1000万+企业大数据,为政府、园区金融机构及中小企业提供专业的企业大数据智能服务。

      

    展开全文
  • 导读:大数据平台可以分为操作数据存储(ODS)、数据仓库(DW)和数据集市(DM)三层,分别对应着数据清洗、数据管理和数据应用这三个核心功能。作者:蔡主希来源:大数据DT(ID:hzdas...
  • Apache Hadoop目前市场上主流的大数据研发技术之一,基于 Hadoop 开源框架开发的一个开源的分布式存储、分布式计算平台。 Apache Hadoop大数据开发,应用于互联网市场的不同行业及领域,为行业提供他们所需要的...
  • 而针对当前大数据领域分析场景需求各异而导致的存储问题,亿信华辰则提供了一种新的融合数据存储方案,能融合不同架构的统一数据管理平台即PetaBase-s实时大数据平台。与早期的分布式数据库产品相比,PetaBase-s全面...
  • 大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理...
  • 本文根据快看漫画屈世超老师在DataFunTalk数据主题技术沙龙活动“大数据从底层处理到数据驱动业务”中分享的《大数据平台的模型思维与用户增长实践》编辑整理而成,在未改变原意的基础上稍做修改。 今天分享的...
  • 大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理...
  • 本文根据快看漫画屈世超老师在DataFunTalk数据主题技术沙龙活动“大数据从底层处理到数据驱动业务”中分享的《大数据平台的模型思维与用户增长实践》编辑整理而成,在未改变原意的基础上稍做修改。今天分享的内容...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,970
精华内容 4,788
关键字:

信贷大数据平台