`
csd_ali
  • 浏览: 136142 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

hadoop/hbase快速开发环境使用

阅读更多

 

                                                                                                                  -------------------- 本文介绍hadoop/hbase的开发环境搭建

hadoop介绍

 Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(Hadoop Distributed File System)的缩写,为分布式计算存储提供了底层支持。

hdfs 分布式文件系统

 


                                                                    图1 hdfs分布式文件系统结构

从上图可以看到hdfs这个分布式文件系统;由一个namenode作为索引,存放每个数据节点(DataNode)上存放的数据块(blocks)的索引;DataNode心跳向namenode报告自己存放的blocks的索引;hadoop通过在DataNode节点间复制备份多份数据来保证一个节点挂掉后,提供了很高的可用性;默认配置复制的块数为3;即在自己DataNode上一份,在相同机架上另一个DataNode上一份,在不同机架上的一个DataNode上一份; NameNode保存一份block都在那几个DataNode上的索引数据;

 

 

任务分派:


 

                                                                           图2 :hadoop 的并行任务结构

  从上图看出:hadoop的并行任务通过JobTracker来统一管理所有节点上的TaskTracker; JobTracker来负责调度,负载均衡健康检查,监控各个任务的执行情况;jobtracker 心跳向taskTracker汇报任务运行情况;

 

Map/Reduce

任务运行时:本地DataNode上的数据根据Key为簇,依次输入map程序进行运算;运算结果经过排序合并输入reducer程序进行汇总计算操作;

 

为什么使用hadoop

官方网站已经给了很多的说明,这里就大致说一下其优点及使用的场景(没有不好的工具,只用不适用的工具,因此选择好场景才能够真正发挥分布式计算的作用):

  1. 可扩展:不论是存储的可扩展还是计算的可扩展都是Hadoop的设计根本。
  2. 经济:框架可以运行在任何普通的PC上。
  3. 可靠:分布式文件系统的备份恢复机制以及MapReduce的任务监控保证了分布式处理的可靠性。
  4. 高效:分布式文件系统的高效数据交互实现以及MapReduce结合Local Data处理的模式,为高效处理海量的信息作了基础准备。

使用场景:个人觉得最适合的就是海量数据的分析,其实Google最早提出MapReduce也就是为了海量数据分析。同时HDFS最早是为了搜索引擎实现而开发的,后来才被用于分布式计算框架中。海量数据被分割于多个节点,然后由每一个节点并行计算,将得出的结果归并到输出。同时第一阶段的输出又可以作为下一阶段计算的输入,因此可以想象到一个树状结构的分布式计算图,在不同阶段都有不同产出,同时并行和串行结合的计算也可以很好地在分布式集群的资源下得以高效的处理。

 

hadoop/hbase搭建(开发环境我们只搭建一个虚拟并行平台:单台机器运行)

下载hadoop: http://hadoop.apache.org/  ; 下载,解压;

 

下载hbase:http://hbase.apache.org/   下载;解压;

 

配置hadoop: 在hadoop/conf下

配置hadoop-env.sh

新增环境变量:

 

export JAVA_HOME=/usr/java

export HADOOP_HOME=/home/zhaopeng/workspace/software/hadoop-0.20.2

export PATH=$PATH:$HADOOP_HOME/bin

配置hdfs-site.xml

 

<configuration>

  <property>

    <name>dfs.replication</name>

    <value>1</value>

  </property>

</configuration>

配置core-site.xml

 

<configuration>

<property>

<name>hadoop.tmp.dir</name>

<value>/tmp/hadoop/hadoop-${user.name}</value>

<description>A base for other temporary directories.</description>

</property>

<property>

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

    <value>hdfs://localhost:9000</value>

  </property>

</configuration>

配置hbase:(hbase/conf)

hbase-site.xml

 

<configuration>

  <property>

    <name>hbase.rootdir</name>

    <value>hdfs://localhost:9000/hbase</value>

    <description>The directory shared by region servers.

    </description>

  </property>

</configuration>

并将hbase/lib/hbase-0.20.6.jar和zookeeper-3.2.2.jar 和 conf/hbase-default.xml和conf/hbase-site.xml都复制到hadoop/conf下;(因为任务运行默认加载conf/下的文件到classpath)

 

运行hadoop/hbase:

1. hadoop/bin/hadoop namenode -format

2. hadoop/bin/start-all.sh

3.hbase/bin/start-hbase.sh

 

hadoop常用命令

 

hadoop dfs -ls :查看hdfs文件系统文件列表

hadoop dfs -cat output/* :查看output目录下所有文件内容

hadoop job -list  :列出所有正在执行的任务信息

hadoop job -status jobid :列出jobid这个任务的详细信息;

hadoop jar taskClassName : 执行一个任务;

hadoop dfs -du :查看hdfs的文件大小;

hadoop job -kill jobid :杀掉一个job;

 

hbase常用命令

hbase shell :打开hbase 数据库的shell客户端

list :查看所有表

create 'tableName','columnName1','columenName3' :新建表;并新建2个column

put 'tableName','rowId','columnName1:1','value1'  :在表里插入一条记录

scan 'tableName; 全表select

get 'tableName','rowId' :查找指定rowId的记录

 

hadoop/hbase 程序

 

  1. public class OfferMapper extends TableMapper<Text, IntWritable> {  
  2.   
  3.     private final static IntWritable one  = new IntWritable(1);  
  4.     private Text                     word = new Text();  
  5.   
  6.     /** 
  7.      * rowkey,value,context 
  8.      */  
  9.     public void map(ImmutableBytesWritable key, Result value, Context context) throws IOException,  
  10.             InterruptedException {  
  11.        
  12.         String titleValue = Bytes.toString(value.getValue(Bytes.toBytes("title"), null));  
  13.     
  14.               for(KeyValue kv : value.list()){  
  15.                  System.out.println(kv.getValue().toString());  
  16.                   word.set(kv.getValue());  
  17.                   context.write(word, one);  
  18.               }  
  19.   
  20.     }  
  21.   
  22. }  

 

 

 

  1. public class OfferReducer extends Reducer<Text,IntWritable,Text,IntWritable> {  
  2.       
  3.     private IntWritable result = new IntWritable();  
  4.   
  5.     public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException,  
  6.             InterruptedException {  
  7.           
  8.         int sum = 0;  
  9.         for (IntWritable val : values) {  
  10.             sum += val.get();  
  11.         }  
  12.         result.set(sum);  
  13.         context.write(key, result);  
  14.     }  
  15.    
  16.   
  17. }  

 

 

  1. public class OfferTask {  
  2.   
  3.     final static String NAME = "OfferTask";  
  4.   
  5.     /** 
  6.      * Sets up the actual job. 
  7.      *  
  8.      * @param conf The current configuration. 
  9.      * @param args The command line parameters. 
  10.      * @return The newly created job. 
  11.      * @throws IOException When setting up the job fails. 
  12.      */  
  13.     public static Job createSubmittableJob(Configuration conf, String[] args) throws IOException {  
  14.         String tableName = args[0];  
  15.         // Path inputDir = new Path(args[1]);  
  16.         Job job = new Job(conf, NAME + "_" + tableName);  
  17.         job.setJarByClass(OfferTask.class);  
  18.          
  19.       
  20.         Scan myScan = new Scan();  
  21.         TableMapReduceUtil.initTableMapperJob(tableName, myScan, OfferMapper.class, Text.class,  
  22.                 IntWritable.class, job);  
  23.          
  24.         TableMapReduceUtil.initTableReducerJob(tableName, OfferReducer.class, job);  
  25.   
  26.     
  27.        job.setOutputKeyClass(Text.class);  
  28.         job.setOutputValueClass(IntWritable.class);  
  29.          
  30.         FileOutputFormat.setOutputPath(job, new Path(args[1]));  
  31.   
  32.         return job;  
  33.     }  
  34.   
  35.     /** 
  36.      * @param args 
  37.      */  
  38.     public static void main(String[] args) throws Exception {  
  39.   
  40.         Configuration conf = new Configuration();  
  41.         String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();  
  42.         if (otherArgs.length != 2) {  
  43.             System.err.println("Usage: OfferTask <tableName> <out>");  
  44.             System.exit(2);  
  45.         }  
  46.       
  47.         Job job = createSubmittableJob(conf, otherArgs);  
  48.         System.exit(job.waitForCompletion(true) ? 0 : 1);  
  49.     }  

 

  • 大小: 27 KB
  • 大小: 19.3 KB
分享到:
评论

相关推荐

    大数据Hadoop+HBase+Spark+Hive集群搭建教程(七月在线)1

    - 在Hadoop集群运行的基础上安装HBase,确保Hadoop的相关环境变量被HBase使用。 - 配置HBase的`hbase-site.xml`以指定Zookeeper地址和集群模式。 - 启动HBase服务,包括Master和RegionServer。 3. **Spark**:...

    hadoop+hbase jar包

    5. 集成与开发:开发人员在使用Hadoop和HBase时,需要在代码中引入对应的jar包,并配置相关环境变量。例如,通过`addDependency`或者`classpath`指定jar路径,然后使用Hadoop的API读写HDFS,使用HBase的API操作...

    hbase安装与使用

    1. **概述**:单机模式是 HBase 默认的安装模式,适用于测试和开发环境。在此模式下,HBase 使用本地文件系统存储数据,不依赖于 Hadoop 和 HDFS。 2. **启动 HBase**:在根用户下启动 HBase 服务。 ```bash bin...

    Hadoop分布式搭建配置/Hive/HBase

    《Hadoop实战》则更注重实践,书中包含了大量的案例和实战经验,帮助读者快速掌握Hadoop在实际项目中的应用。通过这本书,你可以了解到如何高效地利用Hadoop处理数据,以及如何优化集群性能。 《Hadoop源码分析完整...

    hadoop-2.7.2-hbase-jar.tar.gz

    总的来说,"hadoop-2.7.2-hbase-jar.tar.gz"是Hadoop和HBase集成的关键,它包含了HBase在Hadoop环境中运行所需的全部类库。通过理解并正确使用这些JAR文件,开发者可以充分利用Hadoop的分布式计算能力,实现高效的...

    Hadoop+HBase+Java API

    具体使用Java API开发时,首先需要配置Hadoop和HBase的相关环境,包括设置HADOOP_CONF_DIR和HBASE_HOME环境变量。然后,开发者可以创建一个MapReduce作业,定义Mapper和Reducer类,使用`FileInputFormat`和`...

    Hadoop Zookeeper HBase集群

    标题 "Hadoop Zookeeper HBase集群" 涉及到的是大数据处理领域中的三个关键组件:Hadoop、Zookeeper和HBase。这三个组件在构建分布式系统中起着至关重要的作用。 首先,Hadoop是Apache软件基金会开发的一个开源框架...

    hadoop hbase 全jar包

    Hadoop和HBase是大数据...理解它们的功能和使用方法,对于进行HBase开发至关重要。通过这个名为“hbase全jar包”的压缩文件,开发者可以获得完整的一套HBase相关jar包,从而快速搭建开发环境,进行HBase的学习和实践。

    windows中安装Hadoop与Hbase

    在Windows系统中安装和配置Hadoop和Hbase,是为了建立起一个适合单机测试和开发的本地大数据环境。...对于希望进行大数据开发的学习者而言,这些步骤是构建本地开发环境的基础,对于深入学习大数据技术至关重要。

    hadoop2.73-eclipse开发hbase所需要的所有jar包

    总的来说,"hadoop2.73-eclipse开发hbase所需要的所有jar包"是一个宝贵的资源集合,为开发者提供了快速搭建HBase开发环境的便利,减少了寻找和配置依赖库的时间,使得开发者可以更加专注于HBase应用的逻辑实现和功能...

    hadoop及hbase部署与应用

    - 包括下载和安装所需软件,配置Hadoop集群(包括配置文件、克隆系统、验证集群状态),部署和配置Hbase,运行MapReduce程序,以及使用Java API操作Hbase数据库。 通过这个实验,学生可以深入理解分布式计算和...

    Hadoop搭建详细流程

    6. 在Eclipse中配置HBase开发环境: - 创建Java项目,并将HBase的JAR包添加到项目Classpath中。 - 将`hbase-site.xml`配置文件复制到项目中,并在Classpath中添加该目录。 7. 编写HBase测试代码: - 参考给出的`...

    Hadoop与HBase自学笔记

    9. **在Eclipse下开发HBase**:学习如何在Eclipse集成开发环境中编写和调试HBase应用程序。 10. **集群下开发HBase**:当对单机环境熟悉后,可以进一步学习如何在多节点集群上配置和使用HBase,包括数据分布、容错...

    Hadoop_Hbase集群安装部署手册

    1. **配置环境**: 安装Java开发工具(JDK)并设置环境变量,Hadoop依赖于Java运行环境。在`/etc/profile`或`~/.bashrc`中添加如下行: ``` export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_XX export PATH=$JAVA_HOME/...

    基于centos7的hadoop、hbase集安装群部署.zip

    通过以上步骤,你就成功地使用Ansible在CentOS 7上搭建了一个Hadoop与HBase的集成环境。这样的自动化部署方式不仅节省了手动操作的时间,还减少了错误的可能性,提高了集群的稳定性和可靠性。记住,持续监控和维护...

    新手指导hadoop、hbase、hive版本对应关系查找表

    首先,Hadoop是一个开源框架,它允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它主要由HDFS(Hadoop Distributed File System)和MapReduce两部分构成。HBase是建立在Hadoop之上的一个开源...

    Hadoop之Hbase从入门到精通

    【HBase技术介绍】 HBase,全称Hadoop Base,是一种构建在Hadoop HDFS(Hadoop Distributed File System)之上的分布式列式数据库。...通过各种访问接口,HBase可以很好地融入各种开发环境,满足不同应用场景的需求。

    安装笔记:hadoop+hbase+sqoop2+phoenix+kerberos

    【描述】:在本文中,我们将探讨如何在两台云主机(实际环境可能需要三台或更多)上安装Hadoop、HBase、Sqoop2、Phoenix以及Kerberos的详细过程,涵盖从伪分布式模式到Kerberos安全认证的完整步骤。 【标签】:...

    hadoop1.0.2 hbase0.94安装

    通过上述教程,学习者将能够搭建一个基本的Hadoop-HBase环境,进行MapReduce编程,并掌握Hadoop-Eclipse插件的使用,从而更好地应对大数据处理的挑战。记住,理解并熟练掌握这些基础是进入大数据领域的第一步。

Global site tag (gtag.js) - Google Analytics