ITPub博客

首页 > 大数据 > Hadoop > hadoop基础知识及hadoop集群搭建

hadoop基础知识及hadoop集群搭建

Hadoop 作者:look321 时间:2011-08-14 19:45:50 0 删除 编辑

    公司的日志模块采用了facebook的scribe,将收集到的结果直接push到hadoop上,日志的相关统计工作均是通过map-reduce作业来完成。之前并非计算机专业,也对hadoop,mapreduce等不了解,工作要用。莫有办法,自学吧,特此留下一点自己的学习笔记。

 

一、hadoop介绍

    常常提到hadoop,那么什么是hadoop?

我们常常提到的hadoop,可以理解为一个平台,提供分布式存储(hdfs),分布式计算(map-reduce计算框架)。apache上,对“what is hadoop?”的回答如下(http://hadoop.apache.org/):   

    The Apache™ Hadoop™ project develops open-source software for reliable, scalable, distributed computing.    The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using a simple programming model. 

   hadoop常常和hdfs(hadoop distributed file system,分布式文件系统),map-reduce(divide and conquer),hbase(基于hdfs的分布式数据库),hive(提供类似sql语言的map-reduce运算),pig(这个没用过,不过据yahoo的师兄说,他们内部做数据处理,都用这个,也是自动转成map-reduce运算)等等联系起来。

二、hadoop分布式系统搭建

    1、获取hadoop

    从apache上下载最新的hadoop二进制程序,https://repository.cloudera.com/content/repositories/releases/com/cloudera/, http://archive.apache.org/dist/hadoop/core/。我在工作中使用了cloudera的0.20.2+320版本。提到cloudera,顺便提一句,apache是孵化hadoop的社区,儿cloudera更多的工作是为企业提供hadoop,商业化hadoop,其核心内部和apache并无什么差别。

    2、搭建分布式集群

    机器(此处ip只是一个说明):

    192.168.1.1

    192.168.1.2

    192.168.1.3

    192.168.1.4

    ...

   在此,我们将192.168.1.1作为namenode(下面会介绍),192.168.1.2作为jobtracker和secondary-namenode(后续介绍),其他机器作为datanode和tasktracker的主机。

    a)、建立专门的hadoop账号

       #!/bin/bash

       #create-hadoop.sh

        user="hadop"

        pwd="hadoop-pwd"

        sudo useradd -m -U -s/bin/bash $user

        sudo passwd hadoop << EOF

        $hadoop-pwd

        $hadoop-pwd

        EOF

       

        在192.168.1.1上启动rsync daemon,需要配置/etc/rsyncd.conf,具体配置可以google。

       ssh -o StrictHostKeyChecking=no user@192.168.1.x "sh create-hadoop.sh" // 远程执行create-hadoop.sh,如果需要自动化,请用spawn,expect,自行编写(google)。    

    b)、机器间免密码的ssh登陆

         在namenode的机器上,执行:ssh-keygen -t rsa,输入提示语(passphrase),一路回车,会在~/.ssh/下产生id_rsa,id_rsa.pub,将id_rsa.pub的内容放到集群中其他机器的~/.ssh/authorized_keys中,则可以使得namenode能够免密码登陆hadoop机群中其他机器(启动hadoop服务时需要),同理将jobtracker的ids_rsa.pub放到其他机器的authorized_keys中。

      参考代码如下:

      ssh   -o StrictHostKeyChecking=no user@192.168.1.x "rsync user@192.168.1.1::user/home/user/.ssh/id_rsa.pub /tmp;mkdir -p ~/.ssh; cat /tmp/authorized_keys >> ~/.ssh/authorized_keys;"

   c)、hadoop的配置

        hadoop在0.20的版本后,配置文件在hadoop/conf下,主要配置文件有core-site.xml,hdfs-site.xml,mapred-site.xml,hadoop-env.sh,masters,slaves等几个主要配置文件。下面一一说明:

       masters:  文件里面每一行为一个host,注意master这个命名还真的不是“如其名”,master里面指定的不是namenode,指定的是secondary-namenode;在偶的配置中,就一行:192.168.1.2

      slaves: 每一行为一个host,指定namenode和tasktracker;偶的配置为: 192.168.1.3-192.168.1.xx

      core-site.xml:  配置诸如fs.default.name等重要参数;


fs.default.name
hdfs://192.168.1.1:9000
hdfs的名称,也是远程访问hdfs的入口点


dfs.replication <!--设置数据备份数,一般设置为3-->
3


hadoop.tmp.dir
/xx/data/hdfstmp
A base for other temporary directories.

。。。其他一些详细的参数可以参见:./src/core/core-default.xml (有些参数我们没有设置,就会使用这些默认的文件中的设置)

       hdfs-site.xml:


dfs.permissions <!--是否启用权限管理-->
true

 


dfs.name.dir
/xx-hadoop-disk/disk1/hadoop/hdfs/name,/xx-hadoop-disk/disk2/hadoop/hdfs/name

存储namenode相关数据metadata,fsimage

 


fs.checkpoint.dir
/xx-hadoop-disk/disk1/hadoop/hdfs/name2,/xx-hadoop-disk/disk2/hadoop/hdfs/name2
true

secondary-namenode相关数据的存储目录,一般和namenode相对应,但价格name2的标记

 


dfs.data.dir <!--指定hdfs的本地存储目录-->
/xx/data/hadoop-hdfs/data
Determines where on the local filesystem an DFS data node should store its blocks.  If this is a comma-delimited list of directories, then data will be stored in all named   directories, typically on different devices.Directories that do not exist are ignored.  

同理,其他相关配置i参数参见:hadoop/src/hdfs/hdfs-default.xml

        mapred-site.xml: map-reduce相关参数


mapred.job.tracker
192.168.1.2:9001 <!--配置jobtracker的host和端口-->

 


mapred.tasktracker.map.tasks.maximum <!--设置map的task槽位数-->
7


mapred.tasktracker.reduce.tasks.maximum <!--设置reduce的task槽位数-->
7

 

       hadoop-env.sh: hadoop相关的环境变量,一般设置启动hadoop时占用的内存大小,日志文件记录等;

        export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_25 #指定java_home,指定到jdk的目录

        export HADOOP_HEAPSIZE=48000   #占用内存大小

        export HADOOP_LOG_DIR="/xx-hadoop-disk/disk1/hadoop/systemlog" #日志文件路径

        export HADOOP_PID_DIR=/rmss-hadoop-disk/disk1/hadoop/pids #记录pid,方便kill

   将整个配置好的整个hadoop工程拷贝到集群中所有的机器中,如均拷贝在集群机器的如下目录中: /home/hadoop/下。

    到目前为止,hadoop的节本配置就OK了;hadoop不同主机担任不同的角色,主要包括了namenode,datanode,jobtracker,tasktracker等四种。但可以用同一份配置,因为不同的角色回去读取不同的配置文件;注意namenode和jobtracker其实没有配置文件可读(masters,slaves实际上事为【secodary-namenode】,【datanode、tasktracker】的配置),那么集群如何决定谁是namenode和jobtracker呢?这个留在下一节中说明~

    3、启动hadoop集群

     a)、启动namenode 和datanode

     需要登录到192.168.1.1上,

     cd /home/hadoop/hadoop-0.20.2+320

     ./bin/start-dfs.sh

     决定集群中谁是namenode,实际上是根据谁执行了start-dfs.sh而决定的,和masters这个文件没一点关系,namenode会自动登录到datanode所在的机器(slaves中的机器),启动datanode。

     b)、启动jobtracker和tasktracker

      需要登录到192.168.1.2上

      cd /home/hadoop/hadoop-0.20.2+320

      ./bin/start-mapred.sh

      同理,决定谁是集群中的jobtracker,也是根据谁执行了start-mapred.sh决定的;jobtracker会自动登录到其他机器(slaves中指定的机器),启动tasktracker;

 

OK,so far,基本工作已搞定;hdfs服务已启动,map-reduce服务也已经启动;可以提供存储功能,和计算功能了。

 

注:

namenode  --hadoop中hdfs(存储)的“主管”,记录了了hdfs中所有文件的基本信息,比如某个文件的数据block在哪台datanode上啊等信息,也就是所谓的metadata;所有的源数据都直接存储在内存中,因此在大的集群中,namenode主机的内存压力是比较大的;

datanode --hadoop中的hdfs的“小兵”,存储数据,根据hadoop的hdfs设置的replication参数,同一个文件在不同的机器上有多个备份;

jobtracker --hadoop中的mapreduce(计算)的“指挥官”,NB的很啊,所有提交的map-reduce任务,都是由jobtracker来完成调度的,需要监控整个集群中的datanode的状态,将任务分配给不同的datanode执行;

tasktracker --hadoop中mapreduce(计算)的“小兵”,负责制定数据区域的计算;每当tasktracker中有空闲的slot可用于计算时,会向“指挥官”报告,自己可以接受新的任务了,jobtracker根据一些列规则,将任务分配给tasktracker;

 

唉,腾出点时间写博客可真不容易hadoop基础知识及hadoop集群搭建,希望能坚持下去,先把hadoop的基本理解记录下来,下一节对hadoop提交map-reduce作业的几种方式做个简单记录,便于后续查询~ 

 

 

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/698016/viewspace-1120245/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论