hadoop怎么读源码(如何编译 hadoop.dll 方法)
本文目录
- 如何编译 hadoop.dll 方法
- hadoop源码修改了,编译成功后,将编译后的hadoop文件直接拿来搭建么,还是需要经过什么处理呢
- 求助 用hadoop-mapreduce-examples-2.7.3.jar怎么查询特定的词
如何编译 hadoop.dll 方法
环境变量(工具软件:3,4,5,6,7)安装过程不再详述,一路Next就行(JavaSE推荐根目录:c:\java)。重点在环境变量的配置部分,增加以下环境变量到“系统变量”中(Java路径不能有空格):JAVA_HOME=C:\Java\jdk1.7.0_45Platform=Win32M2_HOME=C:\apache-maven-3.2.1Path=;C:\cygwin\bin;C:\apache-maven-3.2.1\bin;C:\protoc-2.5.0-win32;配置示例(别忘了设置Path哦):解压源代码将hadoop-2.2.0-src.tar.gz源代码解压到D盘根目录,看上去路径如下:D:\hadoop-2.2.0\***隐藏网址***需要手工修正源代码的几处编译错误:第一处:修改文件:\hadoop-common-project\hadoop-auth\pom.xml修改内容:在大约56行的位置增加一个Xml配置节点。《dependency》 《groupId》org.mortbay.jetty《/groupId》 《artifactId》jetty-util《/artifactId》 《scope》test《/scope》《/dependency》修改示例:第二处:修改文件:hadoop-common-project\hadoop-common\src\main\native\native.sln修改内容:用记事本打开文件。替换内容:GlobalSection(ProjectConfigurationPlatforms) = postSolution{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|Mixed Platforms.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|Mixed Platforms.Build.0 = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|Win32.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|Win32.Build.0 = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|x64.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|x64.Build.0 = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|Mixed Platforms.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|Mixed Platforms.Build.0 = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|Win32.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|Win32.Build.0 = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|x64.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|x64.Build.0 = Release|x64EndGlobalSection新内容:GlobalSection(ProjectConfigurationPlatforms) = postSolution{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|Win32.ActiveCfg = Release|Win32{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|Win32.Build.0 = Release|Win32{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|x64.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Debug|x64.Build.0 = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|Win32.ActiveCfg = Release|Win32{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|Win32.Build.0 = Release|Win32{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|x64.ActiveCfg = Release|x64{4C0C12D2-3CB0-47F8-BCD0-55BD5732DFA7}.Release|x64.Build.0 = Release|x64EndGlobalSection修改示例:第三处:修改文件:hadoop-common-project\hadoop-common\src\main\native\native.vcxproj修改内容:查找替换”Release|x64“为”Release|Win32“查找替换”《Platform》x64《/Platform》“为”《Platform》Win32《/Platform》“修改示例:第四处:右键单击”D:\hadoop-2.2.0“文件夹,选择”管理员取得所有权“。否则编译过程中可能会发生”拒绝访问“错误(右键没有显示该菜单的,自行网上查找注册表修改方法)。 编译过程 打开“开始”--“所有程序”--“Microsoft Windows SDK v7.1”--“Windows SDK 7.1 Command Prompt”,进入VC++的命令行工具(一定要从此处进入方可顺利编译Hadoop源代码,记着是以管理员身份运行)。命令如下:切换至源代码根目录,执行编译命令:mvn package -Pdist,native-win -DskipTests -Dtar示例运行结果Setting SDK environment relative to C:\Program Files\Microsoft SDKs\Windows\v7.1\.Targeting Windows 7 x86 DebugC:\Windows\system32》d:D:\》cd D:\hadoop-2.2.0D:\hadoop-2.2.0》mvn package -Pdist,native-win -DskipTests -Dtar................................2.2.1版本编译完成大约需要16分钟左右................................2.4.0版本编译完成大约需要22分钟左右(觉得编译过程慢的话:自己动手配置镜像服务器)配置运行Hadoop编译成功后,程序集输出在: hadoop-common-project\hadoop-common\target\hadoop-common-2.2.0目录下。1.解压缩”hadoop-2.2.0.tar.gz“至D盘如下目录:D:\hadoop-common-2.2.02.合并替换发行版本的64动态链接库:主要是是以下几个文件(bin\hadoop.dll、bin\hadoop.exp、bin\hadoop.lib、bin\hadoop.pdb、bin\libwinutils.lib、bin\winutils.exe、bin\winutils.pdb),从编译成功后的输出目录Copy到Apache发行版形同目录下替换即可。3.修改配置文件core-site.xml《?xml version="1.0" encoding="UTF-8"?》《?xml-stylesheet type="text/xsl" href="configuration.xsl"?》《configuration》《property》《name》fs.defaultFS《/name》《value》hdfs://localhost:9000《/value》《/property》《/configuration》hdfs-site.xml《?xml version="1.0" encoding="UTF-8"?》《?xml-stylesheet type="text/xsl" href="configuration.xsl"?》《configuration》《property》 《name》dfs.replication《/name》 《value》1《/value》 《/property》 《property》 《name》dfs.namenode.name.dir《/name》 《value》file:/hadoop-bin/data/namenode《/value》 《/property》 《property》 《name》dfs.datanode.data.dir《/name》 《value》file:/hadoop-bin/data/datanode《/value》 《/property》《property》 《name》dfs.webhdfs.enabled《/name》 《value》true《/value》 《/property》《property》 《name》dfs.permissions《/name》 《value》false《/value》 《/property》《/configuration》其他配置文件保持默认即可。4.配置Hadoop Hdfs运行环境变量(重要)HADOOP_HOME=D:\hadoop-common-2.2.0Path=D:\hadoop-common-2.2.0\bin5.格式化hdfs文件系统以管理员身份打开命令行,并切换到:D:\hadoop-common-2.2.0\bin目录下,执行命令:hadoop namenode -format如果不出意外,hdfs文件系统将格式化成功,你会在D:\hadoop-bin\data看到已经生成了namenode文件夹。6.启动Hadoop HDFS服务器同样管理员身份命令行,切换到:D:\hadoop-common-2.2.0\sbin目录下,执行命令:start-all.cmd***隐藏网址***7.上传文件到HDFS如果你对命令行熟悉的话,可以采用命令行的方式推送的HDFS。如果你的hdfs-site.xml配置文件时Copy我以上的示例的话,那么WEBHDFS默认是开启的,什么意思?就是通过Http RestFull风格API管理文件哦!另外还要记得把dfs.permissions设置为false,要不你没有权限上传文件的哦!推荐个HDFS文件管理工具:Red Gate Software Ltd(大名鼎鼎的Red Gate)上传文件到HDFS8.停止Hadoop HDFS服务器同样管理员身份命令行,切换到:D:\hadoop-common-2.2.0\sbin目录下,执行命令:stop-all.cmd编后语Windows 64 Bit是有它自己的道理的,虽然通过一些努力编译出了32Bit环境下的程序。。。
hadoop源码修改了,编译成功后,将编译后的hadoop文件直接拿来搭建么,还是需要经过什么处理呢
把你编译后的hadoop源码丢到原来的hadoop集群环境中去 即覆盖hadoop安装目录下的原hadoop-core-xxx.jar 同样的所有节点都需要更新 然后重启集群
求助 用hadoop-mapreduce-examples-2.7.3.jar怎么查询特定的词
前2篇blog中测试hadoop代码的时候都用到了这个jar,那么很有必要去分析一下源码。
分析源码之前很有必要先写一个wordcount,代码如下
view plain copy
package mytest;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static class TokenizerMapper
extends Mapper《Object, Text, Text, IntWritable》{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer《Text,IntWritable,Text,IntWritable》 {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable《IntWritable》 values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args));
FileOutputFormat.setOutputPath(job, new Path(args));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
~/hadoop-2.7.0/bin/hadoop jar my.jar mytest.WordCount /user/hadoop/input /user/hadoop/output3
find ~/ -name *hadoop-mapreduce-examples*
/home/hadoop/hadoop-2.7.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.0.jar
/home/hadoop/hadoop-2.7.0/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.0-sources.jar
/home/hadoop/hadoop-2.7.0/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.0-test-sources.jar
/home/hadoop/hadoop-2.7.0/share/doc/hadoop/hadoop-mapreduce-examples
Main-Class: org.apache.hadoop.examples.ExampleDriver
~/hadoop-2.7.0/bin/hadoop jar my.jar wordcount /user/hadoop/input /user/hadoop/output4
检索相关源码,发现需要2个jar,分别为hadoop-common-2.7.0.jar和hadoop-mapreduce-client-core-2.7.0.jar
使用myeclipse导出为Runnable Jar后,执行
view plain copy
测试成功
因为有个“package mytest”所以执行的时候需要使用mytest.WorCount!
仔细回忆之前执行命令的时候并没有加上类似mytest.这类的东西就能执行成功。我们去检索源码看看。执行。
view plain copy
输出内容为
view plain copy
解压缩hadoop-mapreduce-examples-2.7.0-sources.jar后导入myeclipse查看源码。
检索“grep”字段,发现出现在ExampleDriver.java中,看样这个文件是这个jar的入口。
那么Runnable Jar怎么确定这个文件的入口呢。解压缩Runnable Jar后发现META-INF 中有如下的描述
view plain copy
原来Runnable Jar是可以配置默认入口的。可以通过myeclipse导出Jar的时候设置默认入口。
将ExampleDriver.java导入自己的工程,修修改改后,测试。执行
view plain copy
很多东西具体看源码比较详细,以后有特殊的地方可以细细分析。tip:分析log日志可以发现。
map和reduce中的syso输出到log日志上。
Main中的syso输出到屏幕上。
更多文章:
搜索句柄是什么(易语言 我把游戏关了重开 句柄又不一样了 然后功能又无效了,怎样才能自动搜索正确句柄)
2024年7月4日 03:42
《小舍得》米桃结局和原著大不同,钟益把悲惨变圆满,你怎么看?《小舍得》原著米桃结局悲惨,原生家庭给她带来了怎么样的影响
2024年6月3日 16:02
c语言函数返回数组指针(用C语言如何使函数返回值为指向一维数组的指针)
2024年7月14日 03:06
深圳疫情最新通告(2022深圳去澳门最新疫情防控政策深圳去澳门疫情)
2024年7月23日 00:21
practise怎么念(practise怎么读 正确发音和用法)
2024年6月29日 06:35
java字符数组初始化(java 字符串数组作为参数传递结果未初始化)
2024年8月4日 04:25
linux正常版本下载(想用LINUX操作系统,不过不无所知,想请教用哪个版本,下载地址能给出吗)
2024年6月22日 04:21
keras官网(python3.6安装keras模块成功,但是运行不了,请问什么情况)
2024年7月2日 06:52
arcgis字符串转数字(excel导入arcgis的属性表后,字段类型为“字符串”,不是“数字”,不能生成图像,怎么处理)
2024年6月23日 00:54
firmware(请问一般所说的升级firmware,其中firmware是什么意思)
2024年7月20日 05:53
想给汽车安装一个HUD抬头显示器,该如何选择?彩虹六号里Ash怎么玩
2024年7月9日 17:31