为Hadoop的MapReduce程序编写makefile

从虚拟电表645MeterV2.7.1的COM口限制,聊聊软件设计中‘硬编码’的那些坑与通用配置方案 本文通过虚拟电表645MeterV2.7.1的COM口限制问题,深入探讨了软件设计中硬编码的常见陷阱与解决方案。文章分析了硬编码的本质、跨平台兼容性挑战,并提出了构建灵活配置系统的多级方案,特别针对串口配置提供了实用建议,帮助开发者避免类似645MeterV2.7.1的设计缺陷。 阅读详情

最近需要把基于hadoop的MapReduce程序集成到一个大的用C/C++编写的框架中,需要在make的时候自动将MapReduce应用进行编译和打包。这里以简单的WordCount1为例说明具体的实现细节,注意:hadoop版本为2.4.0.

源代码包含两个文件,一个是WordCount1.java是具体的对单词计数实现的逻辑;第二个是CounterThread.java,其中简单的当前处理的行数做一个统计和打印。代码分别见附1. 编写makefile的关键是将hadoop提供的jar包的路径全部加载进来,看到网上很多资料都自己实现一个脚本把hadoop目录下所有的.jar文件放到一个路径中,然后进行编译,这种做法太麻烦了。当然也有些简单的办法,但是都是比较老的hadoop版本如0.20之类的。


其实,hadoop提供了一个命令hadoop classpath可以获得包含所有jar包的路径.所以只需要用 javac -classpath "`hadoop classpath`" *.java 便可,然后使用jar -cvf对class文件进行打包就可以了。具体的Makefile代码如下:

SRC_DIR = src/mypackage/*.java 
CLASS_DIR = bin
TARGET_JAR = WordCount

all:$(TARGET_JAR)

$(TARGET_JAR): $(SRC_DIR) 
	mkdir -p $(CLASS_DIR)
#	javac -classpath `$(HADOOP) classpath` -d $(CLASS_DIR) $(SRC_DIR) 
	javac -classpath "`hadoop classpath`" src/mypackage/*.java -d $(CLASS_DIR) -Xlint
	jar -cvf $(TARGET_JAR).jar -C $(CLASS_DIR) ./
 
clean: 
	rm -rf $(CLASS_DIR) *.jar

make一下:

lichao@ubuntu:WordCount1$ make
mkdir -p bin
javac -classpath "`hadoop classpath`" src/mypackage/*.java -d bin -Xlint
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/common/lib/jaxb-api.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/common/lib/activation.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/common/lib/jsr173_1.0_api.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/common/lib/jaxb1-impl.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/yarn/lib/jaxb-api.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/yarn/lib/activation.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/yarn/lib/jsr173_1.0_api.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/share/hadoop/yarn/lib/jaxb1-impl.jar": no such file or directory
warning: [path] bad path element "/home/lichao/Software/hadoop/hadoop-src/hadoop-2.4.0-src/hadoop-dist/target/hadoop-2.4.0/contrib/capacity-scheduler/*.jar": no such file or directory
src/mypackage/WordCount1.java:61: warning: [deprecation] Job(Configuration,String) in Job has been deprecated
		Job job = new Job(conf, "WordCount1");                  //建立新job
		          ^
10 warnings
jar -cvf WordCount.jar -C bin ./
added manifest
adding: mypackage/(in = 0) (out= 0)(stored 0%)
adding: mypackage/WordCount1.class(in = 1970) (out= 1037)(deflated 47%)
adding: mypackage/CounterThread.class(in = 1760) (out= 914)(deflated 48%)
adding: mypackage/WordCount1$IntSumReducer.class(in = 1762) (out= 749)(deflated 57%)
adding: mypackage/WordCount1$TokenizerMapper.class(in = 1759) (out= 762)(deflated 56%)
adding: log4j.properties(in = 476) (out= 172)(deflated 63%)
虽然有warning,但是不影响结果。编译后,我们来简单的测试一下。

先生成测试数据:while true; do seq 1 100000 >> tmpfile; done; 差不多可以了就Ctrl+c

然后将数据放到hdfs上,hadoop fs -put tmpfile /data/

接着运行MapReduce程序:hadoop jar WordCount.jar mypackage/WordCount1 /data/tmpfile /output2

效果如下:

14/07/15 13:26:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
14/07/15 13:26:03 INFO client.RMProxy: Connecting to ResourceManager at localhost/127.0.0.1:8032
14/07/15 13:26:05 INFO input.FileInputFormat: Total input paths to process : 1
14/07/15 13:26:05 INFO mapreduce.JobSubmitter: number of splits:6
14/07/15 13:26:06 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1405397597558_0003
14/07/15 13:26:06 INFO impl.YarnClientImpl: Submitted application application_1405397597558_0003
14/07/15 13:26:06 INFO mapreduce.Job: The url to track the job: http://ubuntu:8088/proxy/application_1405397597558_0003/
14/07/15 13:26:06 INFO mapreduce.Job: Running job: job_1405397597558_0003
14/07/15 13:26:20 INFO mapreduce.Job: Job job_1405397597558_0003 running in uber mode : false
14/07/15 13:26:20 INFO mapreduce.Job:  map 0% reduce 0%
14/07/15 13:26:34 WARN mapreduce.Counters: Group org.apache.hadoop.mapred.Task$Counter is deprecated. Use org.apache.hadoop.mapreduce.TaskCounter instead
输入行数:0
14/07/15 13:26:48 INFO mapreduce.Job:  map 2% reduce 0%
输入行数:3138474
14/07/15 13:26:51 INFO mapreduce.Job:  map 5% reduce 0%
14/07/15 13:26:54 INFO mapreduce.Job:  map 6% reduce 0%
14/07/15 13:26:55 INFO mapreduce.Job:  map 8% reduce 0%
14/07/15 13:26:57 INFO mapreduce.Job:  map 9% reduce 0%
14/07/15 13:26:58 INFO mapreduce.Job:  map 11% reduce 0%
14/07/15 13:27:00 INFO mapreduce.Job:  map 12% reduce 0%
14/07/15 13:27:01 INFO mapreduce.Job:  map 13% reduce 0%
输入行数:23383595
14/07/15 13:27:05 INFO mapreduce.Job:  map 14% reduce 0%
输入行数:23383595
14/07/15 13:27:23 INFO mapreduce.Job:  map 15% reduce 0%
14/07/15 13:27:27 INFO mapreduce.Job:  map 16% reduce 0%
14/07/15 13:27:28 INFO mapreduce.Job:  map 18% reduce 0%
14/07/15 13:27:30 INFO mapreduce.Job:  map 19% reduce 0%
14/07/15 13:27:31 INFO mapreduce.Job:  map 21% reduce 0%
14/07/15 13:27:34 INFO mapreduce.Job:  map 24% reduce 0%
输入行数:38430301
14/07/15 13:27:37 INFO mapreduce.Job:  map 25% reduce 0%
14/07/15 13:27:40 INFO mapreduce.Job:  map 26% reduce 0%
输入行数:42826322
14/07/15 13:27:57 INFO mapreduce.Job:  map 27% reduce 0%
14/07/15 13:28:00 INFO mapreduce.Job:  map 29% reduce 0%
14/07/15 13:28:02 INFO mapreduce.Job:  map 30% reduce 0%
14/07/15 13:28:03 INFO mapreduce.Job:  map 32% reduce 0%
输入行数:54513531
14/07/15 13:28:05 INFO mapreduce.Job:  map 33% reduce 0%
14/07/15 13:28:06 INFO mapreduce.Job:  map 34% reduce 0%
14/07/15 13:28:08 INFO mapreduce.Job:  map 35% reduce 0%
14/07/15 13:28:09 INFO mapreduce.Job:  map 36% reduce 0%
输入行数:60959081
14/07/15 13:28:22 INFO mapreduce.Job:  map 42% reduce 0%
14/07/15 13:28:30 INFO mapreduce.Job:  map 43% reduce 0%
14/07/15 13:28:31 INFO mapreduce.Job:  map 44% reduce 0%
14/07/15 13:28:34 INFO mapreduce.Job:  map 45% reduce 0%
14/07/15 13:28:35 INFO mapreduce.Job:  map 46% reduce 0%
输入行数:69936159
14/07/15 13:28:37 INFO mapreduce.Job:  map 47% reduce 0%
14/07/15 13:28:38 INFO mapreduce.Job:  map 48% reduce 0%
14/07/15 13:28:41 INFO mapreduce.Job:  map 49% reduce 0%
14/07/15 13:28:44 INFO mapreduce.Job:  map 50% reduce 0%
输入行数:77160461
14/07/15 13:29:01 INFO mapreduce.Job:  map 51% reduce 0%
14/07/15 13:29:04 INFO mapreduce.Job:  map 52% reduce 0%
14/07/15 13:29:05 INFO mapreduce.Job:  map 53% reduce 0%
输入行数:83000373
14/07/15 13:29:07 INFO mapreduce.Job:  map 54% reduce 0%
14/07/15 13:29:09 INFO mapreduce.Job:  map 55% reduce 0%
14/07/15 13:29:10 INFO mapreduce.Job:  map 56% reduce 0%
14/07/15 13:29:13 INFO mapreduce.Job:  map 57% reduce 0%
14/07/15 13:29:16 INFO mapreduce.Job:  map 58% reduce 0%
输入行数:93361766
14/07/15 13:29:32 INFO mapreduce.Job:  map 59% reduce 0%
输入行数:98194696
14/07/15 13:29:35 INFO mapreduce.Job:  map 60% reduce 0%
14/07/15 13:29:37 INFO mapreduce.Job:  map 61% reduce 0%
14/07/15 13:29:38 INFO mapreduce.Job:  map 62% reduce 0%
14/07/15 13:29:40 INFO mapreduce.Job:  map 63% reduce 0%
14/07/15 13:29:41 INFO mapreduce.Job:  map 64% reduce 0%
14/07/15 13:29:44 INFO mapreduce.Job:  map 65% reduce 0%
14/07/15 13:29:48 INFO mapreduce.Job:  map 66% reduce 0%
输入行数:109562184
14/07/15 13:30:04 INFO mapreduce.Job:  map 67% reduce 0%
输入行数:113362818
14/07/15 13:30:06 INFO mapreduce.Job:  map 68% reduce 0%
14/07/15 13:30:08 INFO mapreduce.Job:  map 69% reduce 0%
14/07/15 13:30:10 INFO mapreduce.Job:  map 70% reduce 0%
14/07/15 13:30:12 INFO mapreduce.Job:  map 71% reduce 0%
14/07/15 13:30:15 INFO mapreduce.Job:  map 72% reduce 0%
输入行数:123074119
14/07/15 13:30:32 INFO mapreduce.Job:  map 76% reduce 0%
14/07/15 13:30:33 INFO mapreduce.Job:  map 80% reduce 0%
14/07/15 13:30:34 INFO mapreduce.Job:  map 83% reduce 0%
14/07/15 13:30:35 INFO mapreduce.Job:  map 84% reduce 0%
输入行数:123074119
14/07/15 13:30:37 INFO mapreduce.Job:  map 89% reduce 0%
14/07/15 13:30:38 INFO mapreduce.Job:  map 92% reduce 0%
14/07/15 13:30:39 INFO mapreduce.Job:  map 95% reduce 0%
14/07/15 13:30:40 INFO mapreduce.Job:  map 100% reduce 0%
输入行数:123074119
14/07/15 13:30:53 INFO mapreduce.Job:  map 100% reduce 100%
14/07/15 13:30:53 INFO mapreduce.Job: Job job_1405397597558_0003 completed successfully
14/07/15 13:30:53 INFO mapreduce.Job: Counters: 50
	File System Counters
		FILE: Number of bytes read=58256119
		FILE: Number of bytes written=66039749
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=724520133
		HDFS: Number of bytes written=1088895
		HDFS: Number of read operations=21
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=2
	Job Counters 
		Killed map tasks=2
		Launched map tasks=8
		Launched reduce tasks=1
		Data-local map tasks=8
		Total time spent by all maps in occupied slots (ms)=1528715
		Total time spent by all reduces in occupied slots (ms)=17508
		Total time spent by all map tasks (ms)=1528715
		Total time spent by all reduce tasks (ms)=17508
		Total vcore-seconds taken by all map tasks=1528715
		Total vcore-seconds taken by all reduce tasks=17508
		Total megabyte-seconds taken by all map tasks=1565404160
		Total megabyte-seconds taken by all reduce tasks=17928192
	Map-Reduce Framework
		Map input records=123074119
		Map output records=123074119
		Map output bytes=1216795535
		Map output materialized bytes=7133406
		Input split bytes=594
		Combine input records=127374119
		Combine output records=4900000
		Reduce input groups=100000
		Reduce shuffle bytes=7133406
		Reduce input records=600000
		Reduce output records=100000
		Spilled Records=5500000
		Shuffled Maps =6
		Failed Shuffles=0
		Merged Map outputs=6
		GC time elapsed (ms)=39761
		CPU time spent (ms)=1397060
		Physical memory (bytes) snapshot=1797943296
		Virtual memory (bytes) snapshot=5082316800
		Total committed heap usage (bytes)=1398800384
	Shuffle Errors
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters 
		Bytes Read=724519539
	File Output Format Counters 
		Bytes Written=1088895


附录1:WordCount1.java和CounterThread.java的代码

//WordCount1.java代码
package mypackage;

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;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount1 {
	public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{

		private final static IntWritable one = new IntWritable(1);  //建立"int"型变量one,初值为1
		private Text word = new Text();                             //建立"string:型变量 word,用于接收传入的单词

		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());                                  //为word赋值
				context.write(word, one);                                   // 将 键-值 对 word one 传入
			}
			//System.out.println("read lines:"+context.getCounter("org.apache.hadoop.mapred.Task$Counter","MAP_INPUT_RECORDS").getValue());
			//System.out.println( "输入行数:" + context.getCounters().findCounter("org.apache.hadoop.mapred.Task$Counter", "MAP_INPUT_RECORDS").getValue() );
			//System.out.println( "输入行数:" + context.getCounters().findCounter("", "MAP_INPUT_RECORDS").getValue() );
		}
	}

	public static class IntSumReducer 
	extends Reducer<Text,IntWritable,Text,IntWritable> { 
		private IntWritable result = new IntWritable();                 //创建整型变量result

		public void reduce(Text key, Iterable<IntWritable> values, 
				Context context
				) throws IOException, InterruptedException {
			int sum = 0;                                                 //创建int 型变量sum 初值0
			for (IntWritable val : values) {
				sum += val.get();                                          //将每个key对应的所有value类间

			}
			result.set(sum);                                              //sum传入result                                        
			context.write(key, result);                                   //将 key-result对传入
		}
	}

	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
		//String[] newArgs = new String[]{"hdfs://localhost:9000/data/tmpfile","hdfs://localhost:9000/data/wc_output"};
		String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
		if (otherArgs.length != 2) {
			System.err.println("Usage: wordcount <in> <out>");
			System.exit(2);
		}
		Job job = new Job(conf, "WordCount1");                  //建立新job
		job.setJarByClass(WordCount1.class);
		job.setMapperClass(TokenizerMapper.class);              //设置map类
		job.setCombinerClass(IntSumReducer.class);              //设置combiner类
		job.setReducerClass(IntSumReducer.class);               //设置reducer类
		job.setOutputKeyClass(Text.class);                       //输出的key类型
		job.setOutputValueClass(IntWritable.class);              //输出的value类型
		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));  //输入输出参数(在设置中指定)
		FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
		
		CounterThread ct = new CounterThread(job);
		ct.start();
		
		job.waitForCompletion(true);
		
		System.exit(0);
		//System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}

//CounterThread.java的代码
package mypackage;

import java.lang.*;
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.JobStatus;
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;
import org.apache.hadoop.util.GenericOptionsParser;

public class CounterThread extends Thread{
	
	public CounterThread(Job job) {
		_job = job;
	}
	
	public void run() {
		while(true){
			try {
				Thread.sleep(1000*5);
			} catch (InterruptedException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			try {
				if(_job.getStatus().getState() == JobStatus.State.RUNNING) 
					//continue;
					System.out.println( "输入行数:" + _job.getCounters().findCounter("org.apache.hadoop.mapred.Task$Counter", "MAP_INPUT_RECORDS").getValue() );
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	private Job _job;
}


编写Hadoop MapReduce程序的Makefile 以下是一个示例的Makefile文件,用于编译和构建Hadoop MapReduce程序。Makefile是一个用于自动化构建和管理源代码的工具,它可以根据源代码的依赖关系进行编译和链接。首先,我们需要定义一些变量,以便在Makefile中使用。的文件,并将其中的路径和文件名根据实际情况进行修改。这样,Makefile就能够帮助我们方便地编译和构建Hadoop MapReduce程序。命令编译Java源代码,指定了Hadoop的类路径以及源代码文件。命令创建JAR文件,将所有编译生成的。 阅读详情

相关推荐

日语五十音图速记攻略:从形象联想法到实战训练

语言学习中的记忆编码与条件反射构建是高效掌握基础的关键。其核心原理在于通过将抽象符号与具象图像、故事或已知概念关联,利用大脑对视觉和叙事信息的天然高记忆效率,从而降低认知负荷,加速识别与反应速度。这一方法的技术价值在于将机械重复转化为意义联结,显著提升长期记忆的牢固度与提取速度。在日语学习这一具体应用场景中,五十音图作为表音文字系统,正是实践这一记忆技术的绝佳对象。通过系统化的形象联想、分组对比(如平假名与片假名的对应关系)以及间隔重复的实战训练,学习者可以高效攻克这一入门难关,为后续的词汇、语法学习铺设坚

weixin_29032489的博客 378

myeclipse8.5运行hadoop2.6.0程序

我的环境: Windows10 64位系统 Hadoop2.6.0-cdh5.5.2(或者Apache版的hadoop2.6.0)安装在虚拟机LinuxRedhat5.5 64位系统上 MyEclipse8.5 jdk1.7.0_25 一、软件安装及配置 1、下载hadoop-eclipse-plugin-2.6.0.jar,并将复制到D:\MyEclipse 8.5\dr

小强签名设计 的博客 2021

高频面波成像实战:从频散曲线到全波形反演

面波勘探是近地表工程勘察的重要手段,其核心原理在于不同频率的面波对地下介质的敏感深度不同,由此形成的频散曲线能够反映浅层剪切波速结构。相较于传统钻探与折射波法,高频面波成像具有无损、高效、对低速夹层敏感等优势,广泛应用于路基检测、空洞探测、滑坡调查等领域。在实际工程中,从野外采集的排列设计、震源选型,到频散谱提取与频散曲线反演,每一步都直接影响成像精度。然而频散反演受限于一维层状假设,难以刻画横向剧烈变化的地质体。全波形反演通过拟合完整波形信息,能够突破频散曲线的分辨率边界,获得更精细的近地表速度模型。本文

weixin_29090917的博客 270

sqoop import 报错: ERROR tool.ImportTool: Import failed: Import job failed

2021-12-16 20:35:57,142 INFO mapreduce.Job: map 0% reduce 0% 2021-12-16 20:35:57,148 INFO mapreduce.Job: Job job_local876630507_0001 failed with state FAILED due to: NA 2021-12-16 20:35:57,195 INFO mapreduce.Job: Counters: 0 2021-12-16 20:35:57,216 WARN .

Yslin_的博客 9387

AI提示词实战:用EARS语法5步搞定产品需求拆解(附完整案例)

本文详细介绍了如何运用EARS语法将模糊的产品需求进行原子化拆解,转化为清晰、可执行的结构化指令。通过一个完整的自由职业者项目管理工具案例,演示了从原始需求分析到构建增强AI提示词的五步实战流程,帮助产品经理和技术人员实现高效、精准的需求传达与协作。

nokia的博客 1036

MATLABGUI读取文件并将路径显示在文本框中

MATLABGUI读取文件并将路径显示在文本框中

m0_50305149的博客 2650

分隔符问题 | 使用sqoop将hive中的数据表导入MySQL数据库执行语句报错

作为分隔符时,Hive会将每行的第一个非空字段作为第一个字段,第二个非空字段作为第二个字段,以此类推。这意味着字段的顺序与原始文本文件中的顺序相同。作为分隔符时,Hive会将每行按照指定的分隔符进行分割,并将分割后的结果作为不同的字段。这意味着字段的顺序可能与原始文本文件中的顺序不同。它通常用于分隔文本文件中的字段或记录。作为分隔符取决于你的需求。如果你需要保持字段的顺序与原始文本文件中的顺序相同,则应使用。是制表符,通常用于分隔文本文件中的字段。如果你不关心字段的顺序,则可以使用。

Galaxy987的博客 982

【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化

在嵌入式设备、专用服务器和物联网系统日益普及的今天,如何让Linux系统在资源受限的环境中高效运行成为开发者必须面对的问题。Linux内核裁剪正是解决这一问题的关键技术,它通过移除不必要的内核组件,打造出更精简、更安全、更高效的自定义操作系统。本文将系统全面地介绍Linux内核裁剪的完整流程和实用技巧,帮助您掌握这一核心技能。Linux内核裁剪是一项结合技术知识与实践经验的系统工程。明确需求:裁剪前必须清晰了解目标系统的硬件配置和功能需求。循序渐进:采取小步修改、反复测试的策略,避免一次性大幅修改。

撬动未来的支点的专栏 1390

MapReduce初体验

MapReduce计算框架 并行计算框架 一个大的任务拆分成多个小任务,将多个小任务分发到多个节点上。每个节点同时执行计算。 MapReduce核心思想 分而治之,先分后和:将一个大的、复杂的工作或任务,拆分成多个小的任务,并行处理,最终进行合并。 MapReduce由Map和Reduce组成 Map: 将数据进行拆分 Reduce:对数据进行汇总 WordCount计算 统计单词出现...

feng_yuan的博客 1306

聊一聊固态电池和钠离子电池新技术

总之,固态电池是一种“安全又高效的未来电池”,它的好处非常明显,但目前还处于研发阶段,离普及还有一段距离。未来,这两种技术可能会与锂离子电池并存,分别满足不同的市场需求。我尝试用最通俗易懂的语言将复杂的技术讲给大家听。钠离子电池和锂离子电池的工作原理很相似,但它用的是。固态电池和钠离子电池是两种正在研发和推广的。,它们有潜力解决现有锂离子电池的部分缺点。,而不是锂(Li)。

weixin_33324696的博客 3333

DataGridView添加新行时在单元格绑定下拉列表DataGridViewComboBoxCell

效果图如下 先在界面上添加DataGridView,添加字段no、type、param 在lord事件中新建一行 dataGridView1.Rows.Add(); 在RowsAdded事件中操作新建的行 private void dataGridView1_RowsAdded_1(object sender, DataGridViewRowsAddedEventArgs...

wuqinglaohao的博客 1986

sqoop导出到mysql中文失败_Sqoop导出到MySQL错误赏析

18/12/27 15:04:30 INFO mapreduce.Job: Running job: job_1543155456252_660618/12/27 15:04:35 INFO mapreduce.Job: Job job_1543155456252_6606 running in uber mode : false18/12/27 15:04:35 INFO mapreduce.J...

weixin_42395669的博客 940

【人工智能 Open AI】程序员怎样提升研发效率?从技术、业务、项目管理等等多个方面来阐述。

程序员要想提升研发效率,需要从技术、业务、项目管理等多方面着手,多靠工具配合实践实现,从而提升研发效率。

AI天才研究院 5527

java hadoop makefile_为Hadoop的MapReduce程序编写makefile

最近需要把基于Hadoop的MapReduce程序集成到一个大的用C/C++编写的框架中,需要在make的时候自动将MapReduce应用进行编译和打包。这里以简单的WordCount1为例说明具体的实现细节,注意:hadoop版本为2.4.0.源代码包含两个文件,一个是WordCount1.java是具体的对单词计数实现的逻辑;第二个是CounterThread.java,其中简单的当前处理的行...

weixin_39600331的博客 158

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java hadoop makefile_对于Hadoop的MapReduce编程makefile

根据近期需要hadoop的MapReduce程序集成到一个大的应用C/C++书面框架。在需求make当自己主动MapReduce编译和打包的应用。在这里,一个简单的WordCount1一个例子详细的实施细则,注意:hadoop版本号2.4.0.源码包括两个文件。一个是WordCount1.java是详细的对单词计数实现的逻辑。第二个是CounterThread.java。当中简单的当前处理的行数做...

weixin_39634480的博客 135

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hadoop c++开发

假设你有上百G的数据,你要统计出这些数据中,含有某些你感兴趣的内容的数据的有多少条,你会怎么做?在硬件条件允许的情况下,用hadoop并行计算是一个不错的选择。 为了使本文得以清晰地说明,我们不妨假设如下的情况: 我们有100G的数据,分别保存在5个文件中,它们位于 /data/ 目录下。这5个数据文件的内容均为相同的格式,即,文件的内容大致如下: ABCDSDFKJ

wenwuge_topsec的专栏 460

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Hadoop的C++扩展了解(3)

Pipes方式: 首先,建立相应的目录: > hadoop fs –mkdir name > hadoop fs –mkdir name/input >hadoop fs –put file1.txt file2.txt name/input   1、编写程序(wordcount.cpp) #include #include #include #include"stdint.h

fbfsber008的专栏 2997

(转)Hadoop c++开发

假设你有上百G的数据,你要统计出这些数据中,含有某些你感兴趣的内容的数据的有多少条,你会怎么做?在硬件条件允许的情况下,用hadoop并行计算是一个不错的选择。 为了使本文得以清晰地说明,我们不妨假设如下的情况: 我们有100G的数据,分别保存在5个文件中,它们位于 /data/ 目录下。这5个数据文件的内容均为相同的格式,即,文件的内容大致如下: ABCDSDFKJ

掌勺者的博客 475

对于Hadoop的MapReduce编程makefile

根据近期需要hadoop的MapReduce程序集成到一个大的应用C/C++书面框架。在需求make当自己主动MapReduce编译和打包的应用。在这里,一个简单的WordCount1一个例子详细的实施细则,注意:hadoop版本号2.4.0. 源码包括两个文件。一个是WordCount1.java是详细的对单词计数实现的逻辑。第二个是CounterThread.java。当中简单的当前...

weixin_30707875的博客 83

C++ Hadoop实战备忘

前言:hadoop用于解决大数据处理问题。 看到这么火,咱也来凑把热闹,瞧瞧到底是什么神奇的技术。 实战过程,还是很波折。 毕竟,对这些hadoop的命令不是很熟。 所幸,天不负有心人,终于跑通了第一个示例。 对我而言,这个的意义,不亚于输出了开天辟地的“hello world”。 配置过程中出错时,不要泄气,一般是由于路径配置不对引起,可与本文档对比查错。 操作系统:Ubu

Segen_Jaa的专栏 7362

java hadoop makefile_hadoop 0.20 程式開發 eclipse plugin + Makefile

hadoop 0.20 程式開發eclipse plugin + Makefile零. 前言¶開發hadoop 需要用到許多的物件導向語法,包括繼承關係、介面類別,而且需要匯入正確的classpath,否則寫hadoop程式只是打字練習...用類 vim 來處理這種複雜的程式,有可能會變成一場惡夢,因此用eclipse開發,搭配mapreduce-plugin會事半功倍。早在hadoop 0.19...

weixin_27972919的博客 178

Hadoop报错 cannot access scala.Serializable 及 python MapReduce运行报错

记录一下在做校内Hadoop作业的时候遇到的问题. 作业比较基础, 就是通过Makefile 调用hadoop执行提前写好的 MapReduce程序. 报错1 Hadoop wordCount代码运行中出现了 java: cannot access scala.Serializable class file for scala.Serializable not found 的报错. 解决方案: 通过stackoverflow上的这篇问答, 我猜测可能是scala版本跟hadoop的版本不兼容 所以回滚到2

weixin_41225956的博客 3135

【hadoop学习】在伪分布式hadoop上实践word count程序——c/c++ pipes版本

就像上一篇博文中说的,其实最大的障碍在于hadoop自带的pipes静态库和动态库都是为linux平台的,而不是为MacOS平台的。在MacOS下,想要使用pipes,需要重新编译库文件。编译过程和方法见上一篇博文。 其他的,似乎没有太多好说的。我就列出代码吧。 hadoopWordCountPipe.cpp的内容如下: // the header files o

xceman1997的专栏 1950

hadoop下的Pipes(用C++进行hadoop程序开发)

经过一上午的努力,终于以伪分布式模式运行了C++版的MapReduce.下面逐一介绍这一过程 一、先决条件     1. 在Linux系统上已安装好hadoop 1.0.X版本(本人系统为CentOS5.5(64位系统),hadoop版本为1.0.3,其它系统有可能不同)     2. 了解hadoop基本概念 二、步骤(如果已具备该步骤下的条件可以跳过该步骤)     1.修改$H

shane的专栏 5312
上一篇: 读《百度基础架构技术发展之路》有感
下一篇: 择业:硅谷还是北京?
下木
博客等级 码龄16年 88粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值