Hadoop JAVA 开发表明澳门美高梅手机网站

用作Hadoop程序员,他要做的业务就是:

斯Parker一共有5种运维格局:Local,Standalone,Yarn-Cluster,Yarn-Client和Mesos。

壹 、定义Mapper,处理输入的Key-Value对,输出中间结果。
贰 、定义Reducer,可选,对中级结果开展规约,输出最终结出。
叁 、定义InputFormat
和OutputFormat,可选,InputFormat将每行输入文件的内容转换为Java类供Mapper函数使用,不定义时暗中认同为String。
④ 、定义main函数,在其中定义二个Job并运转它。

1. Local

Local方式即单机情势,即使在指令语句中不加任何配置,则暗中认同是Local情势,在地头运维。这也是布局、设置最简便易行的一种方式

接下来的业务就付给系统了。

2. Standalone

Standalone是斯Parker本身达成的财富调度框架。尽管我们只使用斯Parker举行大数额计算,不拔取任何的揣摸框架(如MapReduce大概Storm)时,就使用Standalone方式。

斯坦dalone格局的布置相比较麻烦,须求把斯Parker的布置包安装到每一台节点机器上,并且配备的目录也无法不一律,而且亟需Master节点和任何节点落实SSH无密码登录。运转时,要求先运营斯Parker的Master和Slave节点。

澳门美高梅手机网站 1

其间master:7077是斯Parker的Master节点的主机名和端口号。

1.基本概念:Hadoop的HDFS达成了google的GFS文件系统,NameNode作为文件系统的承受调度运转在master,DataNode运营在各种机器上。同时Hadoop完成了谷歌(Google)的MapReduce,JobTracker作为MapReduce的总调度运行在master,TaskTracker则运行在逐个机器上举办Task。

2.main()函数,创设JobConf,定义Mapper,Reducer,Input/OutputFormat
和输入输出文件目录,最终把Job提交給JobTracker,等待Job甘休。

3.JobTracker,创造七个InputFormat的实例,调用它的getSplits()方法,把输入目录的公文拆分成FileSplist作为Mapper
task 的输入,生成Mapper task参预Queue。

4.TaskTracker 向 JobTracker索求下二个Map/Reduce。

Mapper
Task先从InputFormat创立RecordReader,循环读入FileSplits的故事情节生成Key与Value,传给Mapper函数,处理完后中间结果写成SequenceFile.
Reducer Task
从运营Mapper的TaskTracker的Jetty上运用http协议得到所需的中游内容(33%),Sort/Merge后(66%),执行Reducer函数,最终根据OutputFormat写入结果目录。

TaskTracker
每10秒向JobTracker报告几次运转景况,每达成1个Task10秒后,就会向JobTracker索求下贰个Task。

Nutch项目标全数数额处理都营造在Hadoop之上,详见Scalable Computing with
Hadoop 。

二 、程序员编写的代码

笔者们做1个简单的分布式的Grep,简单对输入文件举办逐行的正则匹配,假诺符合就将该行打印到输出文件。因为是简约的万事出口,所以我们若是写Mapper函数,不用写Reducer函数,也不用定义Input/Output
Format。

package demo.hadoop

public class HadoopGrep {

public static class RegMapper extends MapReduceBase implements Mapper {

private Pattern pattern;

public void configure(JobConf job) {
pattern = Pattern.compile(job.get( ” mapred.mapper.regex ” ));
}

public void map(WritableComparable key, Writable value, OutputCollector
output, Reporter reporter)
throws IOException {
String text = ((Text) value).toString();
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
output.collect(key, value);
}
}
}

private HadoopGrep () {
} // singleton

public static void main(String[] args) throws Exception {

JobConf grepJob = new JobConf(HadoopGrep. class );
grepJob.setJobName( ” grep-search ” );
grepJob.set( ” mapred.mapper.regex ” , args[ 2 ]);

grepJob.setInputPath( new Path(args[ 0 ]));
grepJob.setOutputPath( new Path(args[ 1 ]));
grepJob.setMapperClass(RegMapper. class );
grepJob.setReducerClass(IdentityReducer. class );

JobClient.runJob(grepJob);
}
}

RegMapper类的configure()函数接受由main函数传入的物色字符串,map()
函数举行正则匹配,key是行数,value是文件行的故事情节,符合的公文行放入中间结果。
main()函数定义由命令行参数传入的输入输出目录和匹配字符串,Mapper函数为RegMapper类,Reduce函数是什么都不做,直接把高中级结果输出到最后结出的的IdentityReducer类,运维Job。

任何代码分外容易,丝毫不曾分布式编程的任何细节。

三.运行Hadoop程序

Hadoop那地方的文档写得不周全,综合参考GettingStartedWithHadoop 与Nutch
Hadoop Tutorial 两篇后,再碰了许多铁钉才总算完全的跑起来了,记录如下:

3.1 local运走势势

完全不进行其余分布式计算,不应用其他namenode,datanode的做法,适合一初叶做调试代码。
解压hadoop,其中conf目录是安插目录,hadoop的布局文件在hadoop-default.xml,假设要修改配置,不是一向改动该公文,而是修改hadoop-site.xml,将该属性在hadoop-site.xml里再一次赋值。
hadoop-default.xml的暗许配置已经是local运转,不用任何改动,配置目录里唯一必须修改的是hadoop-env.sh
里JAVA_HOME 的位置。

将编译好的HadoopGrep与RegMapper.class
放入hadoop/build/classes/demo/hadoop/目录
找2个相比较大的log文件放入三个索引,然后运营

hadoop / bin / hadoop demo.hadoop.HadoopGrep log文件所在目录
任意的输出目录 grep的字符串

翻开输出目录的结果,查看hadoop/logs/里的运转日志。 
在再一次运转前,先删掉输出目录。

3.2 单机集群运转形式

近来来搞一下唯有单机的集群.若是以形成3.1中的设置,本机名为hadoopserver
第①步. 然后修改hadoop-site.xml ,加入如下内容:

< property > 
< name > fs.default.name </ name > 
< value > hadoopserver:9000 </ value > 
</ property > 
< property > 
< name > mapred.job.tracker </ name > 
< value > hadoopserver:9001 </ value > 
</ property > 
< property > 
< name > dfs.replication </ name > 
< value > 1 </ value > 
</ property >

未来就将运营从local文件系统转向了hadoop的hdfs系统,mapreduce的jobtracker也从local的经过内操作变成了分布式的任务系统,八千,9001多少个端口号是不管选拔的三个空余端口号。

其余,即使您的/tmp目录不够大,或然还要修改hadoop.tmp.dir属性。

第1步. 扩充ssh不输入密码即可登陆。

因为Hadoop需求不用输入密码的ssh来进行调度,在不su的情景下,在本人的home目录运维ssh-keygen
-t rsa ,然后一并回车生成密钥,再进入.ssh目录,cp id_rsa.pub
authorized_keys
详见可以man 一下ssh, 此时实践ssh
hadoopserver,不需求输入任何密码就能进来了。

3.格式化namenode,执行
bin/hadoop namenode -format

4.启动Hadoop
执行hadoop/bin/start-all.sh,
在本机运维namenode,datanode,jobtracker,tasktracker

5.现行将待查找的log文件放入hdfs,。
履行hadoop/bin/hadoop dfs 可以看出它所帮助的文本操作指令。
实施hadoop/bin/hadoop dfs put log文件所在目录 in
,则log文件目录已放入hdfs的/user/user-name/in 目录中

6.以后来施行Grep操作
hadoop/bin/hadoop demo.hadoop.HadoopGrep in out
翻开hadoop/logs/里的运营日志,重新履行前。运转hadoop/bin/hadoop dfs rmr
out 删除out目录。

7.运行hadoop/bin/stop-all.sh 结束

3.3 集群运转格局
比方已履行完3.2的配置,倘诺第壹台机械名是hadoopserver2
1.创办与hadoopserver同样的实施用户,将hadoop解压到均等的目录。

2.一模一样的修改haoop-env.sh中的JAVA_HOME 及修改与3.2均等的hadoop-site.xml

  1. 将hadoopserver中的/home/username/.ssh/authorized_keys
    复制到hadoopserver2,保险hadoopserver可以不必密码登陆hadoopserver2
    scp /home/username/.ssh/authorized_keys
    username@hadoopserver2:/home/username/.ssh/authorized_keys 

4.修改hadoop-server的hadoop/conf/slaves文件,
扩充集群的节点,将localhost改为
hadoop-server
hadoop-server2

5.在hadoop-server执行hadoop/bin/start-all.sh
将会在hadoop-server启动namenode,datanode,jobtracker,tasktracker
在hadoop-server2启动datanode 和tasktracker

6.未来来实施Grep操作
hadoop/bin/hadoop demo.hadoop.HadoopGrep in out
再一次履行前,运转hadoop/bin/hadoop dfs rmr out 删除out目录

7.运行hadoop/bin/stop-all.sh 结束。

 

周口互连网论坛地址:http://www.dmyc8.com/forum-104-1.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注