hadoop 开发者第三期

所需积分/C币:9 2013-12-04 12:02:53 1.97MB PDF
收藏 收藏
举报

hadoop开发者第三期。pdf 上接第二期。
刊首语 新一期的<< Hadoop开发者>>与大家见面了。不知不觉 Hadoop开发者已经与大家携手走过半年多了,感谢各位长久以来多 Hadoop开发者的支持与鼓励劢。 Hadoop是大家目前最热衷的技术话题之一,继09年评出国际十 大影响力的热门技术榜首的 Mapreduce编程,基于 MapReduce实现 的 Hadoop开源框架逐渐在被大家所接纳和使用,成为了目前市场中 最热门的技术之一。 应运而生的 Hadoop开发者致力于提供给大家最好的 Hadoop咨 询,让大家更方便的学习 Hadoop的应用,但是由于人力有限,在每 期中所能提供的文章质量准以达到最佳。需要让 Hadoop开发者办的 更好,就需要大家的努力和共同的提高,集思广益,需要Had。p爱 好者共同的参与。 希望大家多多投稿,多提意见。 << Hadoop开发者>>编辑组 本期执行主编:国宝 2010-620 1 Hadoop中的数据庳访问 2 Mapreduce中多文件输出的使用………13 3 Zookeeper使用与分析 22 4浅析一种分类数据模型 .30 5 Sector框架分析 34 6 Run on Hadoop 49 Hado。p中的数据鼻访闷 作者(飞鸿雪泥)E-mai1:Jaguar13@yahoo.Cn Hadoop主要用来对非结构化或半结构化( HBase)数据进行存储 和分析,而结构化的数据则一般使用数据库来进行存储和访问。本文 勺主要内容则是讲述如何将 Hadoop与现有的数据库结合起来,在 Hadoop应用程序中访问数据库中的文件。 DBInputFormat DBInputFormat是 Hadoop从O.19.0开始支持的一种输入格式,包 含在包 org. apache hadoop. mapped.ibdb中,主要用来与现有的数据库系 统进行交互,包括 MySQL、 PoStgreSQL、 Oracle等几个数据库系统, DBInputFormat在 Hadoop应用程序中通过数据库供应商提供的JDBC 接口来与数据库进行交互,并且可以使用标准的S○L来读取数据库中 的记录。在使用 DBInputFormat之前,必须将要使用的JDBC驱动拷贝 到分布式系统各个节点的$ HADOOP HOME/lb/目录下。 在 DBInputFormat类中包含以下三个内置类 1. protected class DbrecordReader implements Recordreader< Longwritable,T>:用来从一张数据库表中读取一条 条元组记录。 2. public static class NullDB Writable implements DBWritable Writable:主要用来实现 DBWritable接口 3. protected static class DBinputSplit implements InputSplit: EE 用来描述输入元组集合的范围,包括 start和end两个属性, start用 来表示第一条记录的索引号,end表示最后一条记录的索引号。 其中 DBWritable接口与 Writable接口比较类似,也包含 write和 readFields两个函数,只是函数的参数有所不同。 DBWritable中的两个 函数分别为: public vcid write(Preparedstatement statement) throws SOLExceotioni public void readfields (Resultset resultset) throws SQLException 这两个函数分别用来给jva. sql PreparedStatement设置参数,以及 从 Java. sg1. Resultset中读取一条记录,熟悉 Java jDbc用法的应该对这两 个类的用法比较了解。 二.使用 DBInputFormat读取数据库表中的记录 上文已经对 DBInputFormat以及其中的相关内置类作了简单介 绍,下面对怎样使用 DBInputFormat读取数据库记录进行详细的介 绍,具体步骤如下: 1* f] BCOnfiguration. configureDB ob Conf job, String driverclass, String dburl, String userName, String passwd函数配置 jDBC驱动,数据源,以及数据库访问的用户名和密码。例如 MySQL数据库的JDBC的驱动为com. mysql jdbc. Driver",数 据源可以设置为“jdbc: mysql:// ocahost/mydb”,其中mydb可 以设置为所需要访问的数据库。 使用 DBInputFormat. etInputdob Conf job, Class s? extends DB Writable> inputClass, String tableName, String conditions String orderBy, String…! fieldnames函数对要输入的数据进行一些 初始化设置,包括输入记录的类名(必须实现了 DBWritable接 )、数据表名、输入数据满足的条件、输入顺序、输入的属 性列。也可以使用重载的函数 setInput(ob Conf job, Classc? extends DBWritable> inputClass, String inputQuery, String input CountQuery)进行初始化,区别在于后者可以直接使用标准 SαL进行初始化,具体可以参考 Hadoop APi中的讲解。 3.按照普通 Hadoop应用程序的格式进行配置,包括 Mapper类、 Reducer类、输入输岀文件格式等,然后调用 JobClient run Job(conf) 使用示例 假设 MySQL数据库中有数据库 school,其中的 teacher数据表定义 如下: DROP TABLE IF EXISTS schocl.teacher i CREATE TABLE schocl. teacher id int(11) de fault NULL name char(20) default NULl age int(11) default NULL, departmentID int(11) default NULL ENGINE=InnoDB DEFAULT ChARSET=latinli 首先给出实现了 DBWritable接口的 Teacherrecord类: public class TeacherRecord implements Writable, DBWritablef int idi string name int age int departmentIDi @Override public void readFields(DataInput in) throws IOException i //TODO Auto-generated me thod stub this id in readInt() this name- Text. readstring(in)i thisage= in readInt(i this departmentID= in readInt()i @Override public void write(DataOutput out) throws IOE xception / TODO Auto-generated method stub out. writeInt( this id) Text. writestring(out, this name)i out writeln (this age)i out. writeInt(this departmentID)i @Override public void readFields(Resultset result) throws SQlException i //TODO Auto-generated method stub this id result getInt(1)i this name result getstring(2)i this age result getInt (3)i thisdepartmentID =result. getInt (4) @Override public void write (Preparedstatement stmt) throws SOLException / TODO Auto-generated me thod stub stmt. setInt(l, this id); stmt. setstring(2, this name)i stmt. setInt(3, this age)i stmt. setInt(4, this departmentID)i @Override public string tostring( i // TODO Auto-gencrated method stub eturn new String( this name "l " this age +"" 七hi8. deoartmentID); 利用DBA ccessⅥ apper 读取一条条记录 public class DBAccessMapper extends MapReduceBase implements Mapper<LcngWritable, TeacherRecord, Longwritable, Text> i @override public void map(LongWritable key, TeacherRecord value OutputCollector<LongWritable, Text> collector, Reporter reporter throws IOException i / TODO Auto-generated me thod stub collector. collect(new LongWritable(value. id), new Text(value tostring())) Main函数如下: public class DBAccess i public static void main(String[] args) throws IOException JobConf conf= new JobConf(DBAccess. class) conf. setoutputKeyclass(LongWritable class)i conf. sctOutputvalueClass(Text. class)i conf. setInputFormat(DBInputFormat class FileOutputFormat. setoutputPath(conf, new Path("dhcutput))i DBConfiguraticn. configureDB(conf,com.mysqljdbc Driver, "jdbc: mysql://localhost/school","root","123456") String [ fields id,name",age",departmentID"i DBInputFormat. setTnput (conf, Teacherrecord class,

...展开详情
试读 54P hadoop 开发者第三期
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
  • 分享宗师

    成功上传21个资源即可获取
关注 私信 TA的资源
上传资源赚积分or赚钱
最新推荐
hadoop 开发者第三期 9积分/C币 立即下载
1/54
hadoop 开发者第三期第1页
hadoop 开发者第三期第2页
hadoop 开发者第三期第3页
hadoop 开发者第三期第4页
hadoop 开发者第三期第5页
hadoop 开发者第三期第6页
hadoop 开发者第三期第7页
hadoop 开发者第三期第8页
hadoop 开发者第三期第9页
hadoop 开发者第三期第10页
hadoop 开发者第三期第11页

试读结束, 可继续读6页

9积分/C币 立即下载 >