HDFS第一天

hadoop是什么
hadoop是apache旗下一套开源的软件平台
hadoop是一套高可靠的、可扩展的、分布式的计算开源软件
hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机集群分布式处理大型的数据
hadoop提供的功能:利用服务器集群,    根据用户自定义的业务逻辑对海量数据进行
hadoop的核心模块(四大核心1,2,3,4)三大框架(2,3,4):
1hadoop common:支持其他hadoop模块的常用工具
2hadoop hdfs:分布式文件系统,用来存储海量的数据。可提供对应用系统数据的高存储量的访问
3hadoop yarn:分布式资源调度平台(框架)
4hadoop mapreduce:分布式运算框架,是一种用于分布处理数据集的,基于yarn的系统

云计算:基础设施及服务(硬件,操作系统,例如阿里云【虚拟机】),平台及服务(软件,例如为了省钱不买软件只购买软件的账号,用别人的平台使用账号记录自己的数据,例如OA办公软件),软件即服务(和平台及服务差不多,他们之间没有明确的划分)

Hadoop的重点组件
HDFS分布式文件系统
MapReduce运算程序开发框架
HIVE SQL数据仓库工具
HBASE 海量数据库
zookeeper 协调服务基础组件
oozie,azkaban工作流调度框架
sqoop数据导入导出工具
flume日志数据采集框架

注:由于大数据技术领域各类技术框架基本上都是分布式系统,因此理解hadoop,strom,spark等技术框架,都需要具备基本的分布式系统概念

分布式软件系统
该软件系统会划分成多个子系统或模块,各自运行在不同的机器上,子系统或模块之间通过网络通信进行协作,实现终的整体功能
比如分布式操作系统,分布式程序设计语言及其编译(解释)系统、分布式文件系统和分布式数据库系统等。

分布式软件系统举例:solrcloud
一个solrcloud集群通常有多台solr服务器
每一个solr服务器节点负责存储整个索引库的若干个shard(数据分片)
每一个shard又有多台服务器存放若干个副本互为主备用
索引的建立和查询会在整个集群各个节点上并发执行
solr集群作为整体对外服务,而其内部细节可对客户端透明
总结:利用多个节点共同协作完成一项或多项具体业务功能的系统就是分布式系统

分布式应用系统模拟开发
需求:可以实现由主节点将运算任务(jar包)发往从节点,并将从节点上的任务启动(启动脚本)

离线数据分析流程
一个应用广泛的数据分析系统"web日志数据挖掘"
1用户访问网页(向服务器发出http请求),服务器提供内容(响应用户的请求),这个过程产生大量log日志
2对log日志文件进行分析:经过【数据处理】服务器---【分析报表】服务器--最后生成一张网站分析报表
注:"web点击流日志"包含着网站运营很重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数量最多,哪个网页最有价值,广告转化率,访客的来源信息,访客的终端信息等。
数据来源:本例的数据主要由用户的点击行为记录
获取方式:在页面预埋一段js程序,为页面上想要监听的标签绑定事件,只要用户点击或移动标签,即可触发ajax请求到后台servlet程序,用log4j记录下事件信息,从而在web服务器(nginx、tomcat等)上形成不断增长的日志文件。
注:ajax是指一种创建【交互式】网页应用的【网页】【开发】技术
servlet是【用Java编写的服务器端程序】,主要功能在于【交互式地浏览和修改数据】,【生成动态Web内容】
log4j是Apache的一个开源项目,我们可以【控制日志信息输送的目的】地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以【控制每一条日志的输出格式】;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以【通过一个配置文件来灵活地进行配置】,而不需要修改应用的代码。

数据采集--Flume
预处理--mapreduce
数据仓库技术--hive
导出数据--sqool
数据可视化
整个过程的流程调度:oozie
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量【日志采集】、【聚合】和【传输】的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供【对数据进行简单处理】,并写到各种数据接受方(可定制)的能力。

Sqoop(发音:skup)是一款开源的工具,主要【用于】在【Hive】与传统的数据库(【mysql】、postgresql...)【间进行数据的传递】,可以【将一个关系型数据库】(例如 : MySQL ,Oracle ,Postgres等)【中的数据导进到Hadoop的HDFS中】,【也可以将HDFS的数据导进到关系型数据库中】。

【HBase是】一个分布式的、面向列的开源【数据库】,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。【HBase是Apache的Hadoop项目的子项目】。HBase不同于一般的关系数据库,它是一个适合于【非结构化】数据存储的数据库。另一个不同的是【HBase基于列】的而不是基于行的模式。

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以【将sql语句转换为MapReduce任务】进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
【Hive是】建立在 Hadoop 上的【数据仓库基础构架】。【它提供了一系列的工具】,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

oozie:对于我们的工作,可能需要好几个hadoop作业(job)来协作完成,往往一个job的输出会被当做另一个job的输入来使用,这个时候就涉及到了数据流的处理。

我们不可能就盯着程序,等它运行完再去运行下一个程序,所以,一般的做法就是通过shell来做,但是如果涉及到的工作流很复杂(比方说有1,2,3,4四个作业,1的输出作为2 3 4的输入,然后2 3的结果运算之后再和1的结果进行某种运算……最后再输出)是很费时费力的。这里就用到了oozie——一个能把多个mapreduce作业组合为一个逻辑工作单元(一个工作流),从而自动完成任务调用的工具。

namenode命名空间信息:实际就是目录和文件的元数据信息

HAHDDP集群搭建
hadoop集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离但物理上常在一起。
HDFS集群:负责海量数据的存储,集群中的角色主要有Namenode/Datanode
YARN集群:负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager/NodeManager
mapreduce是什么呢?它其实是一个应用程序开发包

集群搭建案例,以5个结点为例进行搭建,角色分配如下:
3台机器是Datanode NodeManager
1台是 Namenode Secondary Namenode
1台是 RecouceManager
 

启动集群
1初始化集群:要启动Hadoop集群,需要启动HDFS和YARN两个集群
,注意:首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的
命令hadoop namenode  -format
单个节点逐个启动
在主节点上使用以下命令启动HDFS NameNode:
Hadoop-daemon.sh start namenode
在每个从节点上使用以下命令启动HDFS DataNode:
Hadoop-daemon.sh start datanode
在主节点上使用以下命令启动YARN ResourceManager:
Yarn-daemon.sh start resourcemanager
在每个从节点上使用以下命令启动YARN nodemanager:
Yarn-daemon.sh start nodemanager
以上脚本位于hadoop-2.7.6/sbin目录下,若想停止只需把命令中start改为stop 即可

注:在搭完全分布式之后,namenode有一个初始化,哪台机器初始化,namenode就在哪台节点
 

集群规划:
    hadoop01  namenode,datanode,nodemanager
    hadoop02  datanode,resourcemanager,nodemanager,secondarynamenode
    hadoop04  datanode,nodemanager,jobhistoryserver
准备工作:
需要安装集群的服务器必须安装JDK
需要安装ssh并且需要做好ssh免登录(老大需要免登录小弟)
hadoop01--->hadoop01,hadoop02,hadoop04
hadoop02--->hadoop01,hadoop02,hadoop04

ssh免密登陆
ssh免密登陆是单用户单向的(密钥是基于用户的,所以要同一用户)
集群配置ssh免密登陆是因为:启动hdfs时,namenode需登陆到datanode开启服务
需要namenode到datanode
    在两台机器上分别创建sshkey
        ssh-keygen -t rsa,创建完成以后会在.ssh目录下面有两个文件,id_rsa和id_rsa.pub,前者为私钥,后者为公钥,两台主机分别把自己的公钥发给对方
        ssh-copy-id -i ~/.ssh/id_rsa.pub root@hadoop02 中间输入的密码是对方主机用户的密码
        如果分别在两台主机执行了以上操作,就会发现,两台主机的.ssh/目录下多出了一个文件authorized_keys。
    然后就可以通过ssh命令链接对方了
        ssh root@hadoop02
    如果想退回就执行exit命令
    本机免密登录同理

解压配置环境变量
配置配置文件 eth0 70 
主机名/etc/sysconfig/network
映射/etc/hosts
环境变量/etc/profile

chown -R root:root hadoop-2.7.1/

ntp时间同步

hadoop-env.sh 修改JAVA_HOME为绝对路径


core-site.xml(集群的核心配置文件)中添加
<property>
<!--集群对外服务的端口,写一个不冲突的端口即可-->
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9000</value>
</property>
<property>
<!--指定文件读写缓冲大小-->
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<property>
<!--配置集群运行时的临时文件存储路径-->
<name>hadoop.tmp.dir</name>
<value>/home/fullhadoopbigdata/tmp</value>
</property>

hdfs-site.xml
<property>
<!--配置hdfs副本数量,若副本数为5而集群只有3个结点,则只有3个副本(机器挂掉多存也没意义)-->
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<!--指定数据块的大小,128M,这里单位为byte-->
<name>dfs.block.size</name>
<value>134217728</value>
</property>

<property>
<!--指定namenode的元数据目录-->
<name>dfs.namenode.name.dir</name>
<value>/usr/local/dfs/name</value>
</property>

<property>
<!--指定datanode的存储数据目录-->
<name>dfs.datanode.data.dir</name>
<value>/usr/local/dfs/data</value>
</property>

<property>
    <!--指定secondarynamenode的o检测点目录-->
    <!--文件系统检测系统(有关日志合并),检测数据是否达到checkpoint时间点-->
    <name>fs.checkpoint.dir</name>
    <value>/usr/local/dfs/checkpoint/cname</value>
</property>

<property>
    <!--edit的数据存储数据-->
    <!--edit为日志文件-->
    <name>fs.checkpoint.edits.dir</name>
    <value>/usr/local/dfs/checkpoint/edit</value>
</property>

<!--指定namenode的web ui监控端口-->
<property>
   <name>dfs.http.address</name>
   <value>hadoop1:50070</value>
</property>
<property>
<!--指定secondarynamenode的web ui监控端口-->
   <name>dfs.secondary.http.address</name>
   <value>hadoop2:50090</value>
</property>

<property>
<!--是否开启web ui的-->
<!--在web操作hdfs(进入目录,下载)的开关-->
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<property>
<!--是否开启hdfs的权限-->
<!--false表示不管它的权限,hdfs权限混乱,它不做任何检查-->
<name>dfs.permissions</name>
<value>false</value>
</property>

配置小弟文件slaves
vi /etc/hadoop/slaves 
hadoop1
hadoop2
hadoop3


mapred-site.xml 配置文件内容
<!--配置MapReduce的框架名称-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property>
<!--指定jobhistoryserver的内部通信地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop04:10020</value>
</property>
<!--指定jobhistory的web地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop04:19888</value>
</property>

vi ./etc/hadoop/yarn-site.xml
<!--指定resourcemanager的启动服务器-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop02</value>
</property>
<!--指定MapReduce的shuffle服务-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定resourcemanager的内部通信地址-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop02:8032</value>
</property>
<!--指定resourcemanager的scheduler的内部通信地址-->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop02:8030</value>
</property>
<!--指定MapReduce的resource-tracker的内部通信地址-->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop02:8031</value>
</property>
<!--指定MapReduce的admin内部通信地址-->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop02:8033</value>
</property>
<!--指定MapReduce的web访问地址-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop02:8088</value>
</property>

发送配置好的hadoop到每一台服务器中
rm -rf ./share/doc删除文档,注:因为这个目录没用还占内存
scp命令 将hadoop发送到另外两台机器
scp -r /home/install/hadoop-2.9.1 root@hadoop02:/home/install
scp -r /home/install/hadoop-2.9.1 root@hadoop04:/home/install

复制环境变量配置文件到每一台服务器
scp -r /etc/profile root@hadoop2:/etc/
scp -r /etc/profile root@hadoop3:/etc/
source /etc/profile 刷新环境变量使其生效(每台服务器都要执行)
如果本机在/usr/local目录下就可以直接写成
scp -r hadoop-2.9.1 root@hadoop2:$PWD ($PWD为本机当前目录)
scp -r hadoop-2.9.1 root@hadoop3:$PWD

hdfs的格式化
在namenode的服务器上执行格式化命令,格式化是为了重新生成元数据,没有namenode的地方不需要格式化
数据节点不需要格式化
配置文件中的文件夹不需要手动创建,格式化的过程中会自动创建
hdfs namenode -format 创建fsimage文件


启动服务测试
start-dfs.sh(在namenode服务器上模块启动hdfs)
start-yarn.sh,在resourcemanager服务器上模块启动yarn)

在hadoop2上启动yarn
    start-yarn.sh 启动yarn集群
    启动hadoop02机器上的resourcemanager进程命令
        yarn-daemon.sh start resourcemanager
        start-yarn.sh启动脚本只在本地启动一个resourcemanager进程,而3台机器上的nodemanager都是通过ssh的方式启动的,所以hadoop02机器上的resourcemanager需要我们手动去启动
在hadoop3上启动jobhistory
    mr-jobhistory-daemon.sh start historyserver
    目的:启动jobhistoryserver来实现web查看作业的历史运行情况。
    or [设置查看历史作业信息的目的是在执行完之后可以查看运行的情况]

检查是否按照规划启动进程,如没有可以尝试单个进程

查看web:
http://hadoop01:50070 namenode
http://hadoop02:50090 secondarynamenode
http://hadoop02:8088 resourcemanager
http://hadoop04:19888 jobhistory

yarn的job的测试:
yarn jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /words /out/00
路径必须是集群上的路径,不是本地路径
jps看到yarnChild即成功,作业运行过程中需要,运行完成后即回收

如果需要重新搭建集群
    注意需要删除所有的数据,所有数据如下:
        元数据 /home/hadoopdata/dfs/name namenode服务启动的服务器上面
        datanode数据 /home/hadoopdata/dfs/data 三台服务器都需要删除
        secondarynamenode的日志数据 
        secondarynamenode的镜像数据 secondarynamenode服务所在的服务器


注:
1logs文件夹是在集群启动后自动创建的,出错看logs文件夹的.log文件
2开启集群a在hadoop1初始化集群hdfs -format
3hdfs支持2000台电脑组成的集群
4namenode和resourceManager的功能不太一样,但都是基于内存的,一般把它们放在两台机器上,这两台机器的配置要比其他机器的配置高,内存为128G,其他节点的内存为64G。datanode和nodemanager一般放在一台电脑,原因[1]datanode用于存储,用的是硬盘,nodemanager用于计算,用的是内存,它们消耗的资源不同,没有冲突。原因[2]大数据移动计算而不移动数据,nodemanager处理数据如果它处理同一台机器datanode上的数据,会提高读取速度,因为本地速度大于网络速度。resourceManager把计算任务分发给nodeManager,且resourceManager可以监控块数据,便于nodeManager分配任务。
5hadoop的配置文件: core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml
注:以site标识的都是用户自定义配置文件
有对应的默认配置文件:
core-default.xml hdfs-default.xml yarn-default.xml mapred-default.xml 
如果有自己配置的-site文件,其对应的-default文件就会失效,如果没有-site文件,对应的默认的default文件就会生效。
6hdfs进程:NameNode SecondaryNameNode DataNode
 Yarn进程:RecourceManager NodeManager WebApp

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值