温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

大数据分布式计算--hadoop

发布时间:2020-06-22 09:36:11 来源:网络 阅读:756 作者:yi003958 栏目:大数据

 

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

Hadoop 核心项目提供了在低端硬件上构建云计算环境的基础服务,它也提供了运行在这个云中的软件所必须的 API 接口。  

Hadoop 内核的两个基本部分是 MapReduce 框架,也就是云计算环境,和 HDFS分布式文件系统 。在 Hadoop 核心框架中,MapReduce 常被称为 mapred,HDFS 经常被称为 dfs。。HDFS为海量的数据提供了存储,MapReduce为海量的数据提供了计算。

MapReduce 的核心概念是把输入的数据分成不同的逻辑块, Map 任务首先并行的对每一块进行单独的处理。这些逻辑块的处理结果会被重新组合成不同的排序的集合,这些集合最后由 Reduce 任务进行处理。

HDFS分布式文件系统有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放(relaxPOSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

                                                                                                                    参考:hadoop.appache.org

 

实验环境rhel6.5

主机server7,从机server8.server9  注:各机都必须域名相互解析。

 

安装及基本配置

各机创建uid900 hadoop用户,密码为redhat

Server7,hadoop用户在/home/下。

#tar zxf hadoop-1.2.1.tar.gz -C hadoop

#cd hadoop

#ln -s hadoop-1.2.1/ hadoop

#sh jdk-6u32-linux-x64.bin    //安装java

#ln -s jdk-1.6.32 java

#vim .bash_profile    //配置path 

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

#echo $JAVA_HOME

显示/home/hadoop/java

#cd hadoop/conf

#vim hadoop-env.sh 

修改exprot JAVA_HOME=/home/hadoop/java

#mkdir ../input   

#cp *.xml ../input     //创建分布式文件系统

#cd ..

#bin/hadoop jar hadoop-examples-1.2.1.jar 

 大数据分布式计算--hadoop

 

   列出了hadoop-example-1.2.1jarinput操作的相关参数,如grep查找,sort排序,wordcount计数等。

#bin/hadoop jar hadoop-examples-1.2.1.jar grep input output 'dfs[a-z.]+'   //查找inout中文件名开头为dfs后面为小写英文的文件,将结果存入自动生成的output文件夹中

#cd output/

#ls

#cat *

大数据分布式计算--hadoop

 

再介绍下hadoop的三种工作模式

单机模式(standalone

         单机模式是Hadoop的默认模式,当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置。在这种默认模式下所有3XML文件均为空。当配置文件为空时,Hadoop会完全运行在本地。因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。

伪分布模式(Pseudo-Distributed Mode

        伪分布模式在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。

完全分布式模式

        Hadoop守护进程运行在一个集群上。


上面的操作为单机模式。


Hadoop分布式部署

结构:

    主节点包括名称节点(namenode)、从属名称节点(secondarynamenode)和 jobtracker 守护进程(即所谓的主守护进程)以及管理集群所用的实用程序和浏览器。

   从节点包括 tasktracker 和数据节点(从属守护进程)。两种设置的不同之处在于,主节点包括提供 Hadoop 集群管理和协调的守护进程,而从节点包括实现Hadoop 文件系统(HDFS )存储功能和 MapReduce 功能(数据处理功能)的守护进程。

 

每个守护进程在 Hadoop 框架中的作用:

namenode 是 Hadoop 中的主服务器,它管理文件系统名称空间和对集群中存储的文件的访问。

secondary namenode ,它不是namenode 的冗余守护进程,而是提供周期检查点和清理任务。

在每个 Hadoop 集群中可以找到一个 namenode 和一个 secondary namenode

datanode 管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个 datanode 守护进程。

每个集群有一个 jobtracker ,它负责调度 datanode 上的工作。

每个 datanode 有一个tasktracker,它们执行实际工作。

jobtracker 和 tasktracker 采用主-从形式,jobtracker 调度datanode 分发工作,而 tasktracker 执行任务。jobtracker 还检查请求的工作,如果一个datanode 由于某种原因失败,jobtracker 会重新调度以前的任务。

 

下面实现伪分布式

 

为了方便,进行ssh免密码设置。

Server7hadoop用户。

#ssh-keygen

#ssh-copy-id localhost

#ssh localhost     //免密码登陆本机

修改配置文件:

#cd hadoop/conf

#vim core-site.xml 

<configuration>下面添加

   <property>

            <name>fs.default.name</name>

                <value>hdfs://172.25.0.7:9000</value>

            </property>                //指定namenode

 

#vim mapred-site.xml 

<configuration>下面添加

    <property>

            <name>mapred.job.tracker</name>

                <value>172.25.0.7:9001</value>

                    </property>            //指定 jobtracker

 

#vim hdfs-site.xml 

 在<configuration>下面添加

       <property>

            <name>dfs.replication</name>

                <value>1</value>

                        </property>    //指定文件保存的副本数,由于是伪分布式所以副本就是本机1个。

 

#cd ..

#bin/hadoop namenode -format      //格式化namenode

#bin/start-dfs.sh             //启动hdfs

#jps    //查看进程

 大数据分布式计算--hadoop

 

可看到secondarynamenodenamenode,datanode都以启动。Namenodedatanode在同一台机器上,所以是伪分布式。

#bin/start-mapred.sh.sh        //启动mapreduce 

#bin/hadoop fs -put input test     //上传inputhdfs并在hdfs中更名为test


浏览 NameNode 和 JobTracker 的网络接口,它们的地址默认为:

NameNode – http://172.25.0.7:50070/

JobTracker – http://172.25.0.7:50030/

查看namenode

 大数据分布式计算--hadoop

 

#bin/hadoop fs -ls test          //列出hdfstest目录下的文件

大数据分布式计算--hadoop  

 

Web上查看test下的文件

大数据分布式计算--hadoop

  

 

下面实现完全分布式模式

 

主从机上都安装nfs-utils并启动rpcbind服务(主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解rpc就是一个中介服务),从机通过nfs直接使用hadoop免去安装配置。

 

server7上,启动nfs服务

#vim /etc/exports

/home/hadoop  *(rw,all_squash,anonuid=900,anongid=900

                 //共享hadoop,对登陆用户指定id,用户以uid900的用户登陆

 

server89

#mount 172.25.0.7:/home/hadoop /hooem/hadoop/      //挂载共享目录

server7上,hadoop用户,更改hadoop/conf下的hdfs-site,将副本数由1改为2

#cd  hadoop/conf

#vim slave  添加从机

  172.25.0.8

  172.25.0.9

 

#vim master  设置主机

  172.25.0.7

 

启动完全分布式模式前要格式化伪分布式文件系统

#cd ..

#bin/stop-all.sh     //停止jobtracker,namenode,secondarynamenode

#bin/hadoop-daemon.sh stop tasktracker

#bin/hadoop-daemon.sh stop datanode     //停止tasktrackerdatanode

#bin/hadoop namenode -format

#bin/start-dfs.sh    显示server8server9连接。

 大数据分布式计算--hadoop

 

#bin/start-mapred.sh

新增了jobtracker进程

大数据分布式计算--hadoop


server8上,jps可看到三个进程jpsdatanode,tasktracker

大数据分布式计算--hadoop

  

从机可以上传,查询等

#bin/hadoop fs -put input test

#bin/hadoop jar hadoop-example-1.2.1.jar grep test out dfs[a-z]+

 

server7上,

#bin/hadoop dfsadmin -report   //显示hdfs信息

 大数据分布式计算--hadoop

由于hadoop下未增加文件,所以dfs used%均为0%

#dd if=/dev/zero of=bigfile bs=1M count=200

#bin/hadoop fs -put bigfile test

 

web上看到dfs used403.33MB(两从机,每个为200MB

大数据分布式计算--hadoop

  

注:有时候操作错误导致hadoop进入安全模式,无法进行上传等操作

大数据分布式计算--hadoop

 

只需运行下行指令即可

#bin/hadoop dfsadmin -safemode leave

大数据分布式计算--hadoop  

 


hadoop支持实时扩展,可在线添加从机。

 


新增从机server10。安装nfs-utils,启动rpcbind服务。添加uid900hadoop用户,挂载server7hadoop并在hadoop/conf下的slaves添加172.25.0.10

       注:必须在添加server10之前在主从机上添加server10hostname解析。


server10上,hadoop用户

#bin/hadoop-daemon.sh start datanode

#bin/hadoop-daemon.sh start tasktracker

 

server7上,

#bin/hadoop dfsadmin -report 

可看到server10的信息

大数据分布式计算--hadoop

 

 

可看到server10 dfs used0,可以将server9的数据移到server10中。

数据迁移:

数据迁移是将很少使用或不用的文件移到辅助存储系统的过程。

 

hadoop 在线删除 server9 datanode 节点可实现数据迁移:

#bin/hadoop-daemon.sh stop tasktracker  //在做数据迁移时,此节点不要参与 tasktracker,否则会出现异常

  在 master 上修改 conf/mapred-site.xml

  在</property>下面添加

    <property>

          <name>dfs.hosts.exclude</name>

          <value>/home/hadoop/hadoop-1.0.4/conf/datanode-excludes</value>

               </property>

conf下创建datanode-excludes,添加需要删除的主机,一行一个

#vim datanode-excludes  

172.25.0.9   //删除节点server9

#cd ..

#bin/hadoop dfsadmin -refreshNodes    //在线刷新节点

#bin/hadoop dfsadmin -report 

可看到server9 状态:Decommission in progress

大数据分布式计算--hadoop

 

若要在线删除tasktracker节点

server7上修改 conf/mapred-site.xml

<property>

        <name>mapred.hosts.exclude</name>

        <value>/home/hadoop/hadoop-1.0.4/conf/tasktracker-excludes</value></property>

创建 tasktracker-excludes 文件,并添加需要删除的主机名,一行一个

server9.example.com

#bin/hadoop mradmin -refreshNodes

 


等此节点的状态显示为 Decommissioned,数据迁移完成,可以安全关闭了。

 

hadoop1.2.1版本过低,jobtracker的调度能力不强,当slvers过多时容易成为瓶颈。使用新版本2.6.4是个不错的选择。

停掉进程,删除文件:

server7

#bin/stop-all.sh

#cd /home/hadoop

#rm -fr hadoop java hadoop-1.2.1 java1.6.32

#rm -fr /tmp/*

从机上

#bin/hadoop-daemon.sh stop datanode

#bin/hadoop-daemon.sh stop tasktracker

#rm -fr /tmp/*

 

下面操作与上面基本相同

server7上,/home/hadoop/hadoop用户

#tar zxf jdk-7u79-linux-x64.tar.gz -C /home/hadoop/

#ln -s jdk1.7.0.79 java

#tar zxf hadoop-2.6.4.tar.gz

#ln -s hadoop-2.6.4 hadoop

#cd hadoop/etc/hadoop

#vim hadoop-env.sh

 export JAVA_HOME=/home/hadoop/java

 export HADOOP_PREFIX=/home/hadoop/hadoop

#cd /home/hadoop/hadoop

#mkdir input

#cp etc/hadoop/*.xml input

#bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output dfs[a-z.]+

#cat output/*

 大数据分布式计算--hadoop

 

grep编译时会有warning,当集群大时可能会出现问题。需要添加hadoop-native

#tar -xf hadoop-native-64.2.6.0.tar -C hadoop/lib/native/

#bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep input output dfs[a-z.]+

再编译没有warning 


#cd etc/hadoop

#vim slaves    

 172.25.0.8

 172.25.0.9

#vim etc/hadoop/core-site.xml

  <property>

     <name>fs.defaultFS</name>

         <value>hdfs://172.25.0.7:9000</value>

           </property>

 

#vim hdfs-site.xml

<property>

        <name>dfs.replication</name>

                <value>2</value>

        </property>

#bin/hdfs namenode -format

#sbin/start-dfs.sh

#jps

 大数据分布式计算--hadoop

 

#ps -ax 可看到namenodesecondarynamenode进程

大数据分布式计算--hadoop

 

#bin/hdfs dfs -mkdir /user/hadoop

#bin/hdfs dfs -put input/ test

web上可看到input以上传。

大数据分布式计算--hadoop

 

MapReduce 的 JobTracker/TaskTracker 机制需要大规模的调整来修复它在可扩展性,内存消耗,线程模型,可靠性和性能上的缺陷

为从根本上解决旧 MapReduce 框架的性能瓶颈,促进 Hadoop 框架的更长远发展,从 0.23.0 版本开始,Hadoop 的 MapReduce 框架完全重构,发生了根本的变化。新的 Hadoop MapReduce 框架命名为 MapReduceV2 或者叫 Yarn

#vim etc/hadoop/yarn-site.xml

   < property>

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

           <value>server7.example.com</value>

           </property>

#sbin/start-yarn.sh

#jps

 大数据分布式计算--hadoop

 

server8可看到进程已启动

 大数据分布式计算--hadoop

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI