设为首页 收藏本站
查看: 1277|回复: 0

[经验分享] Hadoop原理及部署初探

[复制链接]

尚未签到

发表于 2018-10-31 09:53:13 | 显示全部楼层 |阅读模式
  Hadoop
  Hadoop为何物
  Hadoop是一个分布式系统基础架构,由Apache基金会所开发。
  用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。
  Hadoop实现了一个分布式文件系统(HadoopDistributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以流的形式访问(streaming access)文件系统中的数据。
  Hadoop基本概念
  ·核心组件:
  MapReduce
  HDFS分布式文件存储系统
  ·GFS:google file system
  将大文件分割成列存储在不同的服务器上
  架构与其他分布式文件系统没有太大的区别
  ·数据类型:
  结构化数据 RDBMS
  半结构化数据 XML,JSON(轻量级XML)
  非结构化数据
  比如:我们使用爬虫对某个站点爬站,最后爬来的数据都是非结构化的数据
  再比如:
  将一个文件内计算文件中每个单词出现的数量并按照逆序排序--可以将将这个文件按大小分到不同的节点上,每个节点以不额定的文件大小对其进行处理
DSC0000.jpg

  使用GFS时限分部署存储再通过mapReduce在分布式存储上完成分布式计算
  NDFS:
  引入了mapReduce思想,于是就有了HDFS,那么什么又是MapRdeuce思想呢?如下
  mapReduce 思想:
  ·编程框架 API 基于这种API写的程序能够基于这种模型
  ·mapredeuce运行环境 -- Runtime Environment
  ·mapredeuce implamentation 技术实现
  MapRdeuce基本工作流程:
  首先,将单词MapReduce拆分为 Map,Rdeuce,顾名思义,此为2个组件。
  以google爬虫为例,在处理的数据只能是键值(key/value)数据,很显然,google的网络爬虫所爬到的页面,对页面进行hash计算,对页面本身当中key ,对页面的内容当做value
  如果处理的文件为日志,首先日志不是键值,但是mapReduce只能处理键值数据,所以这是其map redeuce的两段的意义了:
  map:将原始数据转换成键值对,将转换后的数据存储下来(过程是按节点来处理的)
  redeuce:将处理完成后半段,更进一步处理,完成我们所期望的结果
  MapRedeuce为两段式任务:
  (1)所有节点map必须都完成处理才可以进入下一段任务
  (2)Map处理阶段至某个进度的时候(这个进度合适度需要自行进行定义),则开启Redeuce进程,从而Map处理结束后,则进入Redeuce处理。
  ETL
  抽取转换加载进hadoop的工具
  常用ETL工具
  Hive:实现让hadoop拥有sql接口,再也不用写任务,但是Hive不是实时的的因为mapReduce不是实时的
  HDFS:工作在用户空间,所有的结合是基于API接口,而且只支持写入删除等简单操作,源数据在源数据服务器上存放,数据则在数据服务器上存储,由此如果想在其存放数据并修改的话理论上来说是不可能的
  BigTable:工作在GFS上,将存储内容最终转换为HDFS文件,但是在bigtable上支持随机读写,而且是随机高性能读写--列式存储NoSQL,同一个数据可以存放为N个版本
  而且可以小量数据读写,但是本身功能依赖于GFS
  impala:为hadoop提供实时的接口,使得任务可以实时进行,实时出结果
  pig:yahoo
  这样的工具很显然不能满足我们目前的需求,于是,HBase诞生了:
  HBase:工作在HDFS之上,利用HDFS的功能实现了NoSQL列式存储的方式,而其就是Bigtable的克隆版,因此可以在HBase基础上也可以随意修改数据了;
  HBase本身有分布式功能,因此跑在HDFS 天然具有分布优势,而HBase自己能够实现自动分区的功能 与mogodb相似,由于是列式存储,所以性能非常好。
  因此做日志分析或日志挖掘,基于HBase就可以完全实现
  MapReduce工作在HBase上如果不基于MapReduce 而是跑在HDFS是没有问题的,但是只能查看结果而不能处理结果
  Hadoop组成部分:
  hadoop由JAVA语言所研发,其不适合存储海量零碎小文件,其关键组件有:
DSC0001.jpg

  ·NameNode:名称节点,主要功能在于实现保存文件元数据,这些元数据直接保存在内存中,为了保证元数据的持久性,而也会周期性的同步到磁盘上去。磁盘上的数据通常被称为元数据的映像数据 image file
  以防万一,如果服务或机器崩溃了,它会基于Image File以及各个DateNode的报告信息重新生成元数据。
  ·Secondary NameNode:第二名称节点,NameNode在早期只有一个,后来提供了第二个名称节点Secondry NameNode ,万一主节点崩溃,secondary无非是将image file整合到本地实现快速启动节点而已,同时也能够对Namenode节点映像文件合并的功能,平时不提供任何节点的服务。
  ·HDFS DataNode:所有大数据都保存在数据节点上,我们称为DataNode
  HDFS不支持FUSE挂载到本地,所以支持基于HDFS的AIP(HadoopAPI) DSC0002.jpg 来进行访问,因此必须自己去研发专用的命令行工具。
  服务是如何在HDFS中写数据
DSC0003.jpg

  (1)当我们创建一个数据时候,需要先向NameNode发起请求;
  (2)NameNode收到请求之后,会告知HDFSDataNode,说明需要分别存储至什么位置,当报告返回回来之后,HDFS Client将对其发起写操作请求;
  (3)NameNode会为HDFS Client会分配一个DataNode数据节点;
  (4)数据节点可能是多个,但HDFS Client却无知这一点,只需要向其一节点发起写操作即可;
  (5)第一个数据节点datanode 接到请求之后,自行将数据复制到其它节点
  (#一个数据块 报文为64k 于是其按报文逐一开始存放)
  (为了保证数据可用性以及降低集群的成本,hadoop是工作在商用计算机硬件(说白了就是服务器或专业级存储),而且服务器不需要做RAID,它会在磁盘上自行存储多个副本,而且是在不同主机上)
  (6)每个数据块存储结束之后,数据节点DataNode都要向Namenode报告存储完毕,接着存放下一个数据块然后报告。。。以此类推;
  (7)一旦所有数据都存储完成,NameNode会保存一个列表,记录着数据的副本保存在哪个数据节点上。
  如何在HDFS中读取数据
DSC0004.jpg

  比如文件file1 分别存储在 D1 D2 D3 上,所以一旦有请求读取数据时,那么3个节点都有数据,那么该找谁去读取呢?如上图所示:
  当客户端要请求访问某个数据块的时候,一个数据块可能在多个节点都有,那么所以这时候名称节点NameNode会告知它第一个块或文件 分别存储在D1 D2 D3 这么3个节点上,那么我们的客户端将会去第一个节点datanode1上去取数据,datanode1接到请求,将数据返回给客户端,假如中途出现中断的情况,那么客户端则去找datanode2,datanode2接到请求后如果有数据那么则将数据返回给用户
  其实用户请求的为列表,告知的节点上都存在同样的数据;
  如果用户请求存放某大文件,那么会被分割为报文,以报文形式存储到datanode 再由datanode相互复制 从而达到并行存储;
  同样,也可以并行去读取文件,如果某台数据节点出现问题,那么肯定会导致数据不统一,所以每个datanode每隔3秒钟会向namenode报告自己的心跳信息、所持有的数据块的列表,如果超过阀值则将移除可用列表
  在向namenode报告时候为了避免报告出错,还要检验一次数据块是否有问题,如果没有问题则报告,如果namenode没有接到其报告信息,则认为这个数据块缺少副本,并找将报告的完整副本完全复制到其故障节点上
  Hadoop名称节的可用性
  最简单的方式将名称节点上的持久元数据信息存储多个副本于不同的存储设备(独立硬盘,NFS等网络存储文件系统)中
  ·第二名节点
  Secondary NameNode
  ·负载均衡
  HDFS要做初始化硬盘
  ·支持回收站功能
  ·有专用自己的客户端工具
  Map Reduce
  ·函数式编程框架 类似于能够接受参数、传递参数、处理机制等并将Map Reduce映射到集群上
  大致为:
  某一个数据存放在集群内多个节点上,有一数据在其中A、C、F三个节点上。
  通过namenode可以得到其数据有多大,以及在哪些节点上,于是派发任务至存放期数据的节点上,做”Map”处理:
  Map将这些文件,切割成一个一个的键值对,每个键值对应一个数值,而后输出由Reduce处理
  JobTracker -- 作业追踪器
  继续上面,由MapReduce集群的JobTracker决定来启动多少个Map作业,由此,在A C F节点上分别启动,但是对于mapReduce节点来讲是公共的,如下图所示:
DSC0005.jpg

  (DataNode也被称为TaskTracker ;
  NameNode也被称为JobTracker)
  tasktracker接收到jobtracker任务之后,就在本地节点(datanode)启动一个map作业(进程),说白就是启动一个java虚拟机。所以如果运行3个作业 分别在A C F 节点上也就意味着各自提供一个任务进程,这3个任务进程实现去读取文件并完成进一步处理;
  在实现map之前还要执行split操作:
  将整个文件完全提取成键值对,这些键值对会均衡发往maper任务进程,每个maper拿到作业进程之后会对键值对在本地进行处理,运行之后会将split分割好的并分派给mapper的任务做输出,所以输出定是键值对,但未必和原有的一样;
  于是这些键值要发往多个Reducer ,Reducer 也是由jobtracker发起的,一旦maper快要结束,那么必须要启动Reducer来接受3个map进程本身处理结果的,主要是保证同一个键值发往指定的Reducer。
  总而言之,只要键值相同,那么肯定是发往同一个Redeucer
  单redeuce任务的MapReduce数据流
DSC0006.jpg

  将大文件切割成N份,并平均分配多个soplit任务 每个map处理完之后要在本地排序处理,主要目的是将每个键值对 发给同一个Reduce 而我们只有一个Reduce,Reduce在处理之前由merge将同键值对合并处理并交给Reduce;Reduce将结果输出并保存在HDFS上保存为副本文件
  多redeuce任务的MapReduce数据流
DSC0007.jpg

  一个作业可以没有redeuce 但绝对不能没有map
  客户端如何提交作业的
DSC0008.jpg

  job将作业发送给master (jobtracter)其控制着3个作业(Map);
  每个Map去分割完数据之后并在本地完成处理,并且将处理结果按机制向对应的Reduce发送数据;
  最终master要在Map处理完成之前启动多个Reduce 并接收来自maper的数据,并完成本地数据库处理而后输出结果;
  MapRedeuce逻辑架构
DSC0009.jpg

  一个hadoop集群,其中节点可能是成千上万的,同时运行的作业未必有一个 ,提交的mapperredeuce可能会同时运行 但是有个基本前提就是一般task tracker节点上最多有2个map和2个reduce服务,由此top tracker必须自行定义这些作业到底怎么跑跑在哪个节点上。
  Historical Jbos表示已经跑完的作业。
  Active为正在跑的作业。如上图可以看到task tracker 分别跑的reduce数量不一,是由job tracker根据数据摆放的机制调度来决定的
  Partitioner 和 Combiner
  Partitioner
   DSC00010.jpg
  Partitioner 主要作用是将mapper的结果排序完成并将结果输出结果给定义的reduce
  所以每个mapperd背后对应一个partitioner程序,这个程序用户实现将本地的键输出的结果排序并根据整体key的数据发送给reducer
  Combiner
DSC00011.jpg

  Combiner :在必要时,如果需要最后由redeuce进行合并那么Combiner先在本地进行合并,Combiner不能在本地修改键
  Hive和Pig
  能够将提交的任务提交给jobtracker,由其转义之后才可以运行
  ·Hive
  在目前来讲被理解为数据仓库架构
  能够帮助用户将数据存储至HDFS
  需要存放数据则与HIVE交互 如果需处理数据则需与mapreduce交互
  功能:ETL:能够实现数据的抽取和加载,实现了数据存储管理,能够对大型数据集的查询和分析,能够跟框架进行交互,但也有自己的工作框架:
  ·Pig
  与Hive一样,而pig本身是一个编程平台,内置转换编译器,也可以运行单节点或分布式环境。能够利用hadoop大规模数据分析的脚本语言和运行框架
  HDFS
  HBase功能
  ·实时访问
  ·随机访问
  其本身是一个开源的分布式、支持多版本的面向列式的存储系统,实际上HBase存储的依然是键值对。
  为了能够使HBase存储海量数据,建议将HBase跑在HDFS上,这样效果会更好,但无论如何,如果HBase想要实现自动分区等高级操作,节点可能会不止一个。
  要结合Zookeeper才可以实现工作,所以,要想实现分布式存储必须先实现zookeeper
  HBase将经常放在一起访问的数据排版为单独一个字段,这样的机制被称为列族
  列族
  列族内的数据是放在一起的,所以往表内插入数据,可以只往期字段上插入数据其他字段可以同时没有数据
  HBase特性
  ·线性模块可扩展性
  ·一致性读写
  ·可配置表的自动切分策略
  ·RegionServer 自动故障恢复
  ·基于MapRdeuce备份
  ·提供便利的API
  ·为实时查询提供块缓存
  Zookeeper
  ·专门设计为分布式应用所设计的开源、协调的服务,可以为用户提供同步、配置管理、分组和名称空间管理功能
  ·支持java和C 两种接口
  ·zookpeer最少需要3个节点,可以多,但不能少,尽可能是奇数节点;
  ·zookpeer也是文件系统,但是文件系统是虚拟出来的,在内存中模拟出来的,被称为名称空间
  名称空间:内部的节点叫 znode
  其名称空间分为2类:
  ·永久节点
  ·临时节点
  Impala:实时分析和处理
  部署hadoop
  1.搭建伪分布式环境
  1.1规划如下
  IP地址
  服务角色
  操作系统
  172.23.214.50
  ALL
  Debian 7.2
  1.2准备工作
  配置本地hosts,将本地ip地址解析至localhost,至于为什么,往下就会明白
  root@localhost:~# cat /etc/hosts
  127.0.0.1       localhost
  root@localhost:~# hostname
  localhost
  创建普通用户并授权ssh key免密码登录
  root@localhost:~# useradd hduser
  root@localhost:~# passwd hduser
  授权本地ssh key
  hduser@localhost:~$ ssh-keygen -t rsa -P ''
  hduser@localhost:~$  cd
  hduser@localhost:~$ ssh-copy-id -i .ssh/id_rsa.pubhduser@localhost
  测试本地ssh key是否生效
  这里直接ssh到目标主机,并执行date命令 查看是否生效
  hduser@localhost:~$ ssh hduser@localhost ; date
  Wed Mar  5 21:47:40 CST2014
  安装JDK 1.7
  这里直接将其他主机的jdk打包并解压缩到本地
  hduser@localhost:~$ mkdir -p /home/hduser/jdk
  hduser@localhost:~$ tar xf jdk.tar.gz
  配置JDK环境变量
  root@localhost:~# cat /etc/profile.d/java.sh
  JAVA_HOME=/home/hduser/jdk
  HADOOP_HOME=/usr/local/hadoop
  STORM_HOME=/home/storm
  export JAVA_HOME HADOOP_HOME STORM_HOME
  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$STORM_HOME/bin/
  激活配置文件
  root@localhost:~# source /etc/profile
  查看变量是否生效
  root@localhost:~# echo $JAVA_HOME
  /home/hduser/jdk
  root@localhost:~# java -version
  java version "1.7.0_03"
  OpenJDK Runtime Environment (IcedTea7 2.1.7) (7u3-2.1.7-1)
  OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)
  解压hadoop安装包
  这里用的包装包为hadoop-2.2.0 64位,并解压缩至/usr/local/目录下
  root@localhost:/usr/local#  ln -s /usr/local/hadoop-2.2.0//usr/local/hadoop
  设置Hadoop环境变量
  root@localhost:cat /etc/profile.d/hadoop.sh
  HADOOP_HOME=/usr/local/hadoop
  PATH=$HADOOP_HOME/bin:$PATH
  export HADOOP_HOME PATH
  查看是否生效
  root@localhost: hadoop version
  Hadoop 2.2.0
  Subversion Unknown -r 1556437
  Compiled by hadoop on 2014-01-08T04:16Z
  Compiled with protoc 2.5.0
  From source with checksum 79e53ce7994d1628b240f09af91e1af4
  This command was run using/usr/local/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar
  对目录进行授权
  root@localhost:/usr/local# chown hduser.hduser -R/usr/local/hadoop/
  配置伪分布式:
  配置的比较关键的配置文件为以下几个:
  hdfs-site.xml
  mapred-site.xml
  core-site.xml    #对于hadoop来讲是根据属性来定义的,而这些属性其实就是java运行的属性定义
  hadoop_env.sh    #设置hadoop环境变量脚本,必须要依赖jdk,如果没有在全局配置文件里设定的话,可以在这个文件里去设置变量
  配置core-site.xml
  hduser@locahost:/usr/local/hadoop/etc/hadoop$ cat core-site.xml
  
  
  hadoop.tmp.dir       #示hadoop存放数据的目录,即包括NameNode的数据,也包括DataNode的数据,路径可以任意,但必须确保路径的存在和路径的属主是否为hduser
  /hadoop/temp      #如果不指定路径,则默认是/tmp/
  
  #定义HDFS 默认名称节点(主节点)的路径以及监听端口
  
  fs.default.name      #定义HDFS的名称节点和其默认的文件系统
  hdfs://localhost:8020
  
  
  切换至管理员创建目录
  root@localhost:~# mkdir -p /hadoop/temp/
  root@localhost:~# chown hduser.hduser -R /hadoop/
  定义mapred-site.xml
  hduser@localhost:/usr/local/hadoop/etc/hadoop$ cpmapred-site.xml.template mapred-site.xml
  hduser@localhost:/usr/local/hadoop/etc/hadoop$ catmapred-site.xml
  
  
  mapred.job.tracker          #接受多个以逗号分隔路径列表作为其值,并会以轮流的方式将数据分散存储在这些文件系统上
  localhost:8021            #设置tracker的默认端口
  
  
  mapred.map.tasks          #具体到底产生多少个分片进行处理,因为多少个map 是有关系,这里为10片
  10
  
  
  mapred.reduce.tasks         #每任务的reduce数量
  2
  
  
  定义HDFS hdfs-site.xml
  
  
  dfs.replication        #定义dfs节点数,这里我们只是本机,所以写1
  1
  
  
  配置完毕,接下来初始化名称节点空间
  hduser@localhost: hadoop namenode -format
  或者
  hduser@localhost: hdfs namenode -format
  启动hadoop
  hduser@localhost: pwd
  /usr/local/hadoop/sbin
  如果job tracker与namenode在同一节点上,那么可以使用一个脚本start-all.sh 全部启动起来,如果不在同一主机上,则需要逐个启动,以免增加服务器压力
  #hadoop-daemon.sh      #专门在某个节点上启动某个进程,如果我们新加了一个datanode ,显然不能将整个集群重新启动这是不现实的,所以要在新加的节点上配置好之后,启动hadoop-daemon.sh 后面跟上参数datanode | tasktrack .等 即可
  我们来启动所有服务进程
  hduser@localhost:start-all.sh
  使用jps来查看启动的任务进程
  hduser@localhost:~$ jps
  7260 ResourceManager
  7720 Jps
  7354 NodeManager
  6867 NameNode
  6958 DataNode
  7124 SecondaryNameNode
  测试:向hadoop中保存文件
  #在HDFS文件系统中新建目录
  duser@localhost:/usr/local/hadoop/sbin$ hdfs dfs -mkdir /input
  #查看目录
  hduser@localhost:/usr/local/hadoop/sbin$ hdfs dfs -ls /
  Found 1 items
  drwxr-xr-x   - hduser supergroup         0 2014-03-03 15:02 /input
  #上传脚本至于HDFS根目录
  hduser@localhost:/usr/local/hadoop/sbin$ hdfs dfs -putstop-all.sh /
  #查看是否上传成功
  hduser@localhost:/usr/local/hadoop/sbin$ hdfs dfs -ls /
  Found 2 items
  drwxr-xr-x   - hdusersupergroup          0 2014-03-0315:02 /input
  -rw-r--r--   1 hduser supergroup      1462 2014-03-03 15:03 /stop-all.sh
  验证:
  运行Hadoop自带的wordcount程序实现对测试文件中各单词出现次数进行统计的实现过程
  hduser@localhost: wgethttp://www.gutenberg.org/cache/epub/20417/pg20417.txt
  hduser@localhost: hdfs dfs -ls /tmp
  hduser@localhost: hadoop -jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jarwordcount  /tmp/ /tmp/
  hduser@localhost: hadoop fs -ls /tmp-output/part-r-00000
  hduser@localhost: hadoop fs -get /tmp-output/part-r-00000
  #在执行过程中我们可以看到有大量的信息,如下所示:
  14/03/04 15:52:09 INFO mapred.LocalJobRunner: wrote record24000. 820459080 bytes left. > map
  14/03/04 15:52:12 INFO mapred.LocalJobRunner: wrote record 36800. 685632166bytes left. > map
  14/03/04 15:52:15 INFO mapred.LocalJobRunner: wrote record 48600. 561878098bytes left. > map
  14/03/04 15:52:18 INFO mapred.LocalJobRunner: wrote record 60000. 442778615bytes left. > map
  14/03/04 15:52:21 INFO mapred.LocalJobRunner: wrote record 72400. 312188642bytes left. > map
  14/03/04 15:52:24 INFO mapred.LocalJobRunner: wrote record 80400. 227760952bytes left. > map
  14/03/04 15:52:27 INFO mapred.LocalJobRunner: wrote record 94600. 77905011bytes left. > map
  14/03/04 15:52:29 INFO mapred.LocalJobRunner: wrote record 94600. 77905011bytes left. > map
  就是说不管你执行哪个示例程序,启动的job都只是在master这个节点本地运行的job,也就意味着为单节点工作
  完全分布式
  1.规划如下:
  IP地址
  服务角色
  操作系统
  172.23.214.50
  Master(NameNode)、JobTracker
  Debian  GNU/Linux 7.2
  172.23.214.47
  Slave  (Secondary NameNode)
  Debian  GNU/Linux 7.2
  172.23.215.61
  DateNode  、Task Tracker
  Debian  GNU/Linux 7.2
  2.准备工作
  2.1修改本地hostname主机名,并指定hosts配置文件
  以master为例:
  hduser@namenode1:~$ hostname
  namenode1
  hduser@namenode1:~$ cat /etc/hosts
  172.23.214.50  namenode1
  172.23.214.47  namenode2
  172.23.215.61  datanode1
  127.0.0.1 localhost
  测试链路是否通畅
  hduser@namenode1:~$ ping datanode1
  hduser@namenode1:~$ ping namenode2
  反之,在其他节点也对其主机之外的host进行的测试,确保链路畅通
  2.2配置ssh免密码登录
  首先确保系统是否存在hduser或其他自定义用户名,如没有则手动建立

  root@namenode1:~#>  uid=1002(hduser) gid=1002(hduser) groups=1002(hduser)
  root@namenode1:~# su - hduser
  在各节点主机都进行以下操作
  hduser@namenode1:~$ cd
  hduser@namenode1:~$ ssh-keygen -t rsa -P ''
  hduser@namenode1:~$ ssh-copy-id -i .ssh/id_rsa.pub hduser@datanode1
  hduser@namenode1:~$ ssh-copy-id -i .ssh/id_rsa.pubhduser@namenode1
  hduser@namenode1:~$ ssh-copy-id -i .ssh/id_rsa.pubhduser@datanode2
  验证免密码
  hduser@namenode1:~$ ssh hduser@namenode1 date
  2014年 03月 06日 星期四 11:21:22 CST
  hduser@namenode1:~$ ssh hduser@namenode2 date
  2014年 03月 06日 星期四 11:21:24 CST
  hduser@namenode1:~$ ssh hduser@datanode1 date
  2014年 03月06日 星期四 11:21:30 CST
  2.3环境变量
  配置JDK环境变量
  hduser@namenode1:~$ cat /etc/profile.d/java.sh
  JAVA_HOME=/home/hduser/jdk
  HADOOP_HOME=/usr/local/hadoop
  STORM_HOME=/home/storm
  export JAVA_HOME HADOOP_HOME STORM_HOME
  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$STORM_HOME/bin/
  配置hadoop环境变量
  hduser@namenode1:~$ cat /etc/profile.d/hadoop.sh
  HADOOP_HOME=/usr/local/hadoop
  PATH=$HADOOP_HOME/bin:$PATH:/usr/local/hadoop/sbin/
  export HADOOP_HOME PATH
  验证HADOOP环境变量是否生效
  hduser@namenode1:~$ echo $HADOOP_HOME
  /usr/local/hadoop
  查看hadoop版本
  hduser@namenode1:~$ hadoop version
  Hadoop 2.2.0
  Subversion Unknown -r 1556437
  Compiled by hadoop on 2014-01-08T04:16Z
  Compiled with protoc 2.5.0
  From source with checksum 79e53ce7994d1628b240f09af91e1af4
  This command was run using /usr/local/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar
  验证JDK环境变量是否生效
  hduser@namenode1:~$ echo $JAVA_HOME
  /home/hduser/jdk
  hduser@namenode1:~$ java -version
  java version "1.7.0_03"
  OpenJDK Runtime Environment (IcedTea7 2.1.7) (7u3-2.1.7-1)
  OpenJDK 64-Bit Server VM (build 22.0-b10, mixed mode)
  2.4修改配置文件
  指定slaves节点
  hduser@namenode1:/usr/local/hadoop/etc/hadoop$ cat slaves
  namenode2
  datanode1
  配置core-site.xml
  hduser@namenode1:/usr/local/hadoop/etc/hadoop$ cat core-site.xml
  
  
  hadoop.tmp.dir          #属性用于定义Hadoop的临时目录至/hadoop/temp/
  /hadoop/temp
  
  
  fs.default.name      #定义HDFS的名称节点和其默认的文件系统
  hdfs://namenode1:8020
  true
  
  
  配置mapred-site.xml
  hduser@namenode1:/usr/local/hadoop/etc/hadoop$ catmapred-site.xml
  
  
  mapred.job.tracker   #可以接受多个以逗号分隔路径列表作为其值,并会以轮流的方式将数据分散存储在这些文件系统上,因此指定位于不同磁盘上的多个文件系统路径可以分散数据I/O
  namenode1:8021     #
  true
  
  
  mapred.reduce.tasks    #定义每任务的reduce数量
  2
  
  
  配置hdfs-site.xml
  hduser@namenode1:/usr/local/hadoop/etc/hadoop$ cat hdfs-site.xml
  
  
  dfs.replication        #定义dfs节点个数,这里我们就有一个datanode
  1
  
  
  dfs.data.dir           #HDFS文件数据块的本地目录
  /hadoop/data
  ture
  
  
  dfs.name.dir           #HDFS元数据的本地目录
  /hadoop/name
  ture
  
  
  fs.checkpoint.dir      #定义的SecondaryNameNode用于存储检查点文件的目录
  /hadoop/namesecondary
  ture
  
  
  设置缓冲大小
  Hadoop为其I/O操作使用了4KB的缓冲区容量,这个值是相当保守的。在当今的硬件和操作系统上,可以安全地增大此值以提高系统性能;一般说来,128KB(131072 bytes)是比较理想的设定。如果需要,可以在core-site.xml中通过io.file.buffer.size属性进行定义--在core-site.xml文件中追加以下内容
  
  io.file.buffer.size
  4096
  
  3.将配置复制至其他节点
  hduser@namenode1:/usr/local/hadoop/etc/hadoop$  scp *hduser@datanode1:/usr/local/hadoop/etc/hadoop/
  hduser@namenode1:/usr/local/hadoop/etc/hadoop$  scp * hduser@namenode2:/usr/local/hadoop/etc/hadoop/
  4.初始化数据节点
  hduser@namenode1:$ hadoop namenode -format
  5.启动并验证Hadoop
  为了方便,分别在其他节点执行start-all.sh,较大的内在需求;而在运行着众多MapReduce任务的环境中,JobTracker节点会用到大量的内存和CPU资源,因此,此场景中通常需要将NameNode和JobTracker运行在不同的物理主机上,也就是说如果在生产环境中,需要对服务角色进行执行对应的脚本
  hduser@namenode1:/usr/local/hadoop/etc/hadoop$ cd/usr/local/hadoop/sbin/
  hduser@namenode1:/usr/local/hadoop/sbin$ ./start-all.sh
  使用jps命令分别查看不同角色服务器所运行的hadoop服务
  hduser@namenode1:/usr/local/hadoop/sbin$ jps
  3624 Jps
  2951 NameNode
  3351 ResourceManager
  3125 SecondaryNameNode
  hduser@namenode2:/usr/local/hadoop/etc/hadoop$ jps
  31488 Jps
  29784 SecondaryNameNode
  31394 NodeManager
  hduser@datanode1:~$ jps
  32416 DataNode
  462 Jps
  32693 ResourceManager
  328 NodeManager
  32535 SecondaryNameNode
  hdfs文件系统的状态信息
  hduser@namenode1:/usr/local/hadoop/logs$ hdfs dfsadmin -report
  Configured Capacity: 30302740480 (28.22 GB)
  Present Capacity: 18599096320 (17.32 GB)
  DFS Remaining: 18599047168 (17.32 GB)
  DFS Used: 49152 (48 KB)
  DFS Used%: 0.00%
  Under replicated blocks: 0
  Blocks with corrupt replicas: 0
  Missing blocks: 0
  -------------------------------------------------
  Datanodes available: 2 (2 total, 0 dead)
  Live datanodes:
  Name: 172.23.215.61:50010 (datanode1)
  Hostname: datanode1
  Decommission Status : Normal
  Configured Capacity: 15151370240 (14.11 GB)
  DFS Used: 24576 (24 KB)
  Non DFS Used: 5851353088 (5.45 GB)
  DFS Remaining: 9299992576 (8.66 GB)
  DFS Used%: 0.00%
  DFS Remaining%: 61.38%
  Last contact: Wed Mar 05 16:56:09 CST 2014
  Name: 172.23.214.47:50010 (namenode2)
  Hostname: namenode2
  Decommission Status : Normal
  Configured Capacity: 15151370240 (14.11 GB)
  DFS Used: 24576 (24 KB)
  Non DFS Used: 5852291072 (5.45 GB)
  DFS Remaining: 9299054592 (8.66 GB)
  DFS Used%: 0.00%
  DFS Remaining%: 61.37%
  Last contact: Wed Mar 05 16:56:08 CST 2014
  访问
  查看RM
DSC00012.jpg

  查看HDFS
DSC00013.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628812-1-1.html 上篇帖子: 伪分布模式安装Hadoop 下篇帖子: 写几个Hadoop部署用到的小脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表