lichaoyue888 发表于 2018-10-29 12:36:57

hadoop-bantiaomichong

  Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
  Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
  Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
  hadoop主要有以下几个优点:
  高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。
  高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
  高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
  高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。 低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低。 Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。
  hadoop的数据流程图:

  Hadoop 由许多元素构成。其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce 引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。
Namenode #
  它管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log),这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。

Secondary NameNode
  它是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。Secondary NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的 快照。由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。
Datanode
  它是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。 集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。
JobTracker
  JobTracker后台程序用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为 不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task,在大多数情况下这 个task会被放在不用的节点上。每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上。
TaskTracker
  它与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领 MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。每个TaskTracker负责独立执行具体的task,而 JobTracker负责分配task。虽然每个从节点仅有一个唯一的一个TaskTracker,但是每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务。TaskTracker的一个重要职责就是与JobTracker交互。如果 JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他 节点处理。
  下面是hadoop的一些配置:
  master端: 172.25.254.1
  slave端: 172.25.254.2
  slave端: 172.25.254.3
  slave端: 172.25.254.4
  在master端添加hadoop用户
useradd -u 900 hadoop  
echo westos |passwd --stdin hadoop
  安装jdk:
sh jdk-6u32-linux-x64.bin  
mv jdk1.6.0_32/ /home/hadoop/java
  
su - hadoop #接下来都是用hadoop用进行操作
  
vim .bash_profile
  
    export JAVA_HOME=/home/hadoop/java
  
    export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  
    export PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
  
source .bash_profile
  配置hadoop单节点部署:
tar zxf hadoop-1.1.2.tar.gz  
ln -s hadoop-1.1.2 hadoop
  
cd hadoop
  
vim conf/hadoop-env.sh
  
   export JAVA_HOME=/home/hadoop/java
  创建输入文件:
mkdir input  
cp conf/*.xml input/
  hadoop伪分布式部署
  运行官方给的示例程序:
bin/hadoop jar hadoop-examples-1.1.2.jar grep input output 'dfs+'  查看输出文件:
$ cat output/part-00000  
1   dfsadmin
  保证master到节点实现无密码登陆:
ssh-keygen  
ssh-copy-id localhost #分布式部署的情况下要在slave端做,跟的是master的ip而不是localhost
  配置HDFS master(即namenode)的地址和端口号:
vim conf/core-site.xml  

  
   
  
            fs.default.name
  
                  hdfs://172.25.254.1:9000 #指定 namenode
  
                           
  

  配置的是JobTracker的地址和端口:
vim conf/mapred-site.xml  

  
   
  
            mapred.job.tracker
  
                  172.25.254.1:9001 #指定 jobtracker
  
                           
  

  修改Hadoop中HDFS的配置,配置的备份方式
vim conf/hdfs-site.xml  

  

  
            dfs.replication
  
                  1    #指定文件保存的副本数
  
                           
  

  格式化一个新的分布式文件系统:
bin/hadoop namenode -format
  启动hadoop进程:
bin/start-dfs.sh  
bin/start-mapred.sh


  通过jps命令可以查看到hadoop的进程:

  我们还可以通过网络借口浏览 NameNode 和 JobTracker ,它们的地址默认为:
  NameNode – http://172.25.254.1:50070/

  JobTracker – http://172.25.254.1:50030/

  将输入文件考入分布式文件系统:
bin/hadoop fs -put input test  运行官方给的示例程序:
bin/hadoop jar hadoop-examples-1.1.2.jar wordcount test output
  查看输出文件:
bin/hadoop fs -cat output/*  分布式部署:
  master端的配置于伪分布式的部署基本相同只是添加了master和slave的信息
vim conf/masters  
    172.25.254.1
  
vim conf/slaves
  
    172.25.254.2
  
    172.25.254.3
  如果是接着为分布式做的要先停止haoop的进程
bin/stop-all.sh  然后添加上面的master和slave信息重新格式化分布式系统
bin/hadoop namenode -format
  在slave端要安装jdk,有与master端相同的hadoop用户,uid等保持一致,hadoop的数据配置路径也要与master端相同
  之后在master端开启hadoop进程
bin/start-dfs.sh  
bin/start-mapred.sh

  此次我们通过jps命令可以看到在master端开启了NameNode,SecondaryNameNode和JobTracker三个进程,而DataNode和TaskTracker则是在slave端开启了。


  hadoop在线添加节点:
  新添加节点与其他的slave端一样要安装jdk,有与master端相同的hadoop用户,uid等保持一致,hadoop的数据配置路径也要与master端相同 然后启动以下两个服务
bin/hadoop-daemon.sh start datanode  
bin/hadoop-daemon.sh start tasktracker
  然后在master端加入新节点的ip
vim conf/slaves  
172.25.254.2
  
172.25.254.3
  
172.25.254.4
  hadoop在线删除节点
  在master上:
vim conf/mapred-site.xml  
   
  
      dfs.hosts.exclude
  
      /home/hadoop/hadoop/conf/datanode-excludes
  
      
  
vim /home/hadoop/hadoop/conf/datanode-excludes #添加要删除的节点ip
  
   172.25.254.3
  在master上刷新节点:
bin/hadoop dfsadmin -refreshNodes  你可以通过以下命令查看 datanode 状态
bin/hadoop dfsadmin -report  此时可以看到新加的server4节点以及将要移除的server3节点正在做数据转移

  当server3节点状态为Decommissioned时就可以移除了


页: [1]
查看完整版本: hadoop-bantiaomichong