其实网上就有,可以借鉴董西成的博客,下面是内容: Hadoop HDFS只有服务日志,与Hadoop MapReduce的服务日志类似; Hadoop MapReduce日志分为两部分,一部分是服务日志,一部分是作业日志,
解决办法:
在orgapachehadooputilShell类的checkHadoopHome()方法的返回值里写固定的
本机hadoop的路径,这里更改如下:
private static String checkHadoopHome() {
// first check the Dflag hadoophomedir with JVM scope
//SystemsetProperty("hadoophomedir", "");
String home = SystemgetProperty("hadoophomedir");
// fall back to the system/user-global env variable
if (home == null) {
home = Systemgetenv("HADOOP_HOME");
}
try {
// couldn't find either setting for hadoop's home directory
if (home == null) {
throw new IOException("HADOOP_HOME or hadoophomedir are not set");
}
if (homestartsWith("\"") && homeendsWith("\"")) {
home = homesubstring(1, homelength()-1);
}
// check that the home setting is actually a directory that exists
File homedir = new File(home);
if (!homedirisAbsolute() || !homedirexists() || !homedirisDirectory()) {
throw new IOException("Hadoop home directory " + homedir
+ " does not exist, is not a directory, or is not an absolute path");
}
home = homedirgetCanonicalPath();
} catch (IOException ioe) {
if (LOGisDebugEnabled()) {
LOGdebug("Failed to detect a valid hadoop home directory", ioe);
}
home = null;
}
//固定本机的hadoop地址
home="D:\\hadoop-220";
return home;
}
第二个异常,Could not locate executable D:\Hadoop\tar\hadoop-220\hadoop-220\bin\winutilsexe in the Hadoop binaries 找不到win上的执行程序,可以去 >
1 首先登入hadoop 集群里面的一个节点, 创建一个java源文件, 偷懒起见, 基本盗用官方的word count (因为本文的目的是教会你如何快编写和运行一个MapReduce程序, 而不是如何写好一个功能齐全的MapReduce程序)
内容如下:
import javaioIOException;
import javautilStringTokenizer;
import orgapachehadoopconfConfiguration;
import orgapachehadoopfsPath;
import orgapachehadoopioIntWritable;
import orgapachehadoopioText;
import orgapachehadoopmapreduceJob;
import orgapachehadoopmapreduceMapper;
import orgapachehadoopmapreduceReducer;
import orgapachehadoopmapreducelibinputFileInputFormat;
import orgapachehadoopmapreduceliboutputFileOutputFormat;
import orgapachehadooputilGenericOptionsParser;
public class myword {
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(valuetoString());
while (itrhasMoreTokens()) {
wordset(itrnextToken());
contextwrite(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 += valget();
}
resultset(sum);
contextwrite(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
String[] otherArgs = new GenericOptionsParser(conf, args)getRemainingArgs();
if (otherArgslength != 2) {
Systemerrprintln('Usage: wordcount <in> <out>');
Systemexit(2);
}
Job job = new Job(conf, 'word count');
jobsetJarByClass(mywordclass);
jobsetMapperClass(TokenizerMapperclass);
jobsetCombinerClass(IntSumReducerclass);
jobsetReducerClass(IntSumReducerclass);
jobsetOutputKeyClass(Textclass);
jobsetOutputValueClass(IntWritableclass);
FileInputFormataddInputPath(job, new Path(otherArgs[0]));
FileOutputFormatsetOutputPath(job, new Path(otherArgs[1]));
Systemexit(jobwaitForCompletion(true) 0 : 1);
}
}
与官方版本相比, 主要做了两处修改
1) 为了简单起见,去掉了开头的 package orgapachehadoopexamples;
2) 将类名从 WordCount 改为 myword, 以体现是我们自己的工作成果 :)
2 拿到hadoop 运行的class path, 主要为编译所用
运行命令
hadoop classpath
保存打出的结果,本文用的hadoop 版本是Pivotal 公司的Pivotal hadoop, 例子:
/etc/gphd/hadoop/conf:/usr/lib/gphd/hadoop/lib/:/usr/lib/gphd/hadoop///:/usr/lib/gphd/hadoop-hdfs//:/usr/lib/gphd/hadoop-hdfs/lib/:/usr/lib/gphd/hadoop-hdfs///:/usr/lib/gphd/hadoop-yarn/lib/:/usr/lib/gphd/hadoop-yarn///:/usr/lib/gphd/hadoop-mapreduce/lib/:/usr/lib/gphd/hadoop-mapreduce///::/etc/gphd/pxf/conf::/usr/lib/gphd/pxf/pxf-corejar:/usr/lib/gphd/pxf/pxf-apijar:/usr/lib/gphd/publicstage:/usr/lib/gphd/gfxd/lib/gemfirexdjar::/usr/lib/gphd/zookeeper/zookeeperjar:/usr/lib/gphd/hbase/lib/hbase-commonjar:/usr/lib/gphd/hbase/lib/hbase-protocoljar:/usr/lib/gphd/hbase/lib/hbase-clientjar:/usr/lib/gphd/hbase/lib/hbase-thriftjar:/usr/lib/gphd/hbase/lib/htrace-core-201jar:/etc/gphd/hbase/conf::/usr/lib/gphd/hive/lib/hive-servicejar:/usr/lib/gphd/hive/lib/libthrift-090jar:/usr/lib/gphd/hive/lib/hive-metastorejar:/usr/lib/gphd/hive/lib/libfb303-090jar:/usr/lib/gphd/hive/lib/hive-commonjar:/usr/lib/gphd/hive/lib/hive-execjar:/usr/lib/gphd/hive/lib/postgresql-jdbcjar:/etc/gphd/hive/conf::/usr/lib/gphd/sm-plugins/:
3 编译
运行命令
javac -classpath xxx /mywordjava
xxx部分就是上一步里面取到的class path
运行完此命令后, 当前目录下会生成一些class 文件, 例如:
mywordclass myword$IntSumReducerclass myword$TokenizerMapperclass
4 将class文件打包成jar文件
运行命令
jar -cvf mywordjar /class
至此, 目标jar 文件成功生成
5 准备一些文本文件, 上传到hdfs, 以做word count的input
例子:
随意创建一些文本文件, 保存到mapred_test 文件夹
运行命令
hadoop fs -put /mapred_test/
确保此文件夹成功上传到hdfs 当前用户根目录下
6 运行我们的程序
运行命令
hadoop jar /mywordjar myword mapred_test output
顺利的话, 此命令会正常进行, 一个MapReduce job 会开始工作, 输出的结果会保存在 hdfs 当前用户根目录下的output 文件夹里面。
至此大功告成!
如果还需要更多的功能, 我们可以修改前面的源文件以达到一个真正有用的MapReduce job。
但是原理大同小异, 练手的话, 基本够了。
一个抛砖引玉的简单例子, 欢迎板砖。
其实,你弄错了hadoop的真正意图。首先,hadoop不适合于开发WEB程序。hadoop的优势在于大规模的分布式数据处理。负责数据的分析并采用分布式数据库(hbase)来存储。但是,hadoop有个特点是,所有的数据处理作业都是批处理的,也就是说hadoop在实时性上是不占优势的。对于WEB应用来说,你也许可以做的是,将系统的数据处理部分分离出来交给hadoop去做。关于hadoop的数据处理有一个专门的工具:hive。hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为 MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。 希望对你有帮助
1,Hadoop fs –fs [local | ]:声明Hadoop使用的文件系统,如果不声明的话,使用当前配置文件配置的,按如下顺序查找:hadoop jar里的hadoop-defaultxml->$HADOOP_CONF_DIR下的hadoop-defaultxml->$HADOOP_CONF_DIR下的hadoop-sitexml。使用local代表将本地文件系统作为hadoop的DFS。如果传递uri做参数,那么就是特定的文件系统作为DFS。2,hadoop fs –ls :等同于本地系统的ls,列出在指定目录下的文件内容,支持pattern匹配。输出格式如filename(full path) size其中n代表replica的个数,size代表大小(单位bytes)。
3,hadoop fs –lsr :递归列出匹配pattern的文件信息,类似ls,只不过递归列出所有子目录信息。
4,hadoop fs –du :列出匹配pattern的指定的文件系统空间总量(单位bytes),等价于unix下的针对目录的du –sb /和针对文件的du –b ,输出格式如name(full path) size(in bytes)。
5,hadoop fs –dus :等价于-du,输出格式也相同,只不过等价于unix的du -sb。
6,hadoop fs –mv :将制定格式的文件 move到指定的目标位置。当src为多个文件时,dst必须是个目录。
7,hadoop fs –cp :拷贝文件到目标位置,当src为多个文件时,dst必须是个目录。
8,hadoop fs –rm [-skipTrash] :删除匹配pattern的指定文件,等价于unix下的rm 。
9,hadoop fs –rmr [skipTrash] :递归删掉所有的文件和目录,等价于unix下的rm –rf 。
10,hadoop fs –rmi [skipTrash] :等价于unix的rm –rfi 。
11,hadoop fs –put … :从本地系统拷贝文件到DFS。
12,hadoop fs –copyFromLocal … :等价于-put。
13,hadoop fs –moveFromLocal … :等同于-put,只不过源文件在拷贝后被删除。
14,hadoop fs –get [-ignoreCrc] [-crc] :从DFS拷贝文件到本地文件系统,文件匹配pattern,若是多个文件,则dst必须是目录。
15,hadoop fs –getmerge :顾名思义,从DFS拷贝多个文件、合并排序为一个文件到本地文件系统。
16,hadoop fs –cat :展示文件内容。
17,hadoop fs –copyToLocal [-ignoreCrc] [-crc] :等价于-get。
18,hadoop fs –mkdir :在指定位置创建目录。
19,hadoop fs –setrep [-R] [-w] :设置文件的备份级别,-R标志控制是否递归设置子目录及文件。
20,hadoop fs –chmod [-R] PATH…:修改文件的权限,-R标记递归修改。MODE为a+r,g-w,+rwx等,OCTALMODE为755这样。
21,hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH…:修改文件的所有者和组。-R表示递归。
22,hadoop fs -chgrp [-R] GROUP PATH…:等价于-chown … :GROUP …。
23,hadoop fs –count[-q] :计数文件个数及所占空间的详情,输出表格的列的含义依次为:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,FILE_NAME或者如果加了-q的话,还会列出QUOTA,REMAINING_QUOTA,SPACE_QUOTA,REMAINING_SPACE_QUOTA。
结语
感谢您的观看,如有不足之处,欢迎批评指正。
如果有对大数据感兴趣的小伙伴或者是从事大数据的老司机可以加群:
658558542
欢迎大家进群交流讨论,学习交流,共同进步。(里面还有大量的免费资料,帮助大家在成为大数据工程师,乃至架构师的路上披荆斩棘!)
最后祝福所有遇到瓶疾且不知道怎么办的大数据程序员们,祝福大家在往后的工作与面试中一切顺利。
以上就是关于如何查看hadoop程序中自己添加的日志全部的内容,包括:如何查看hadoop程序中自己添加的日志、如何在win7下的eclipse中调试Hadoop2.2.0的程序、如何在Windows下面运行hadoop的MapReduce程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)