我们可以想象 这里 应该被框架调用的可能性比较大了,那么mapreduce 框架是怎么分别来调用map和reduce呢?
还以为分析完map就完事了,才发现这里仅仅是做了mapreduce 框架调用前的一些准备工作,
还是继续分析 下 mapreduce 框架调用吧:
1.在 job提交 任务之后 首先由jobtrack 分发任务,
在 任务分发完成之后 ,执行 task的时候,这时 调用了 maptask 中的 runNewMapper
在这个方法中调用了 MapContextImpl, 至此 这个map 和框架就可以联系起来了。
1. 把KeilBuilder.exe复制到MDK的编译器目录下, 一般为: C:\Keil\ARM\BIN40下, 这要看你的MDK安装在哪了.2. 新建一个C Project 工程, 并选择Cross GCC交叉编译工具为本工程编译工具.
.通过菜单File ->new ->C Project 新建一个空的C工程. 在d出的对话框中如下图, 注意要选择"Cross GCC"工具链:
3. 为新建的工程导入Keil工程或仅导入源文件.
4. 设置Eclipse工程交叉编译环境.
.在左边的"Porject Explorer"窗口内鼠标右键单击工程名, 选择最后的菜单项"Properties"项.
.在C/C++ Build ->Settings界面中, 设置"Configuration"为"[ All configurations ]"设置"Cross Setttings"的"Path"即交叉工具链路径为KeilBuilder所有的目录, 如C:\Keil\ARM\BIN40. 如下图:
.在"Cross GCC Compiler"的"Command"下填入"KeilBuilder -no", 表示什么也不做另外的"Cross GCC Linker"及"Cross GCC Assembler"的"Command"中也设置为同值. 此设置为防Eclipse对不存在的GCC工具的报警, 如下图:
.在C/C++ Build 界面中, Builder Settings 中去掉"Use default build command"上的勾, 并在"Build command"中填入"KeilBuilder.exe -d xxxx -e". 基中xxx为工程根目录路径, "-d"表示设置KeilBuilder的工程路径, "-e"表示在编译时自动对Eclipse工程进行设置, 目前仅设置"C/C++ Build" ->"Settings" ->"Cross GCC Compiler" ->“Symbols”和”Includes”以及”Cross GCC Assmebler” ->“General”项. 如下图:
.在C/C++ Build 界面中的"Behaviour"选项卡中, 在"Build(Incremental build)"中填入"-s"表示安静编译在"Clean"中填入"-c"表示清理工程. 如下图:
.在C/C++ Build 中的 "Discovery Options" 中去掉 "Enable generate scanner info command"选项. 如下图:
.不用设置预编译宏或者Includes选项, 因为KeilBuilder会自动帮忙加进去. 所以, 有时候你看到代码还有一大堆的错误时, 编译一次后, 刷新工程(右键工程名 ->"Refresh")就木有错误鸟.
5. 到此, 可以编译你的工程了. 通过菜单项"Project" ->"Build All"编译工程, 或"Project" ->"Clean..."清理工程. 编译不通过或得到不正确Hex文件的继续往下看. 如下图:
6. 在Eclipse中添加一个外部工具, 这样可以通过Eclipse菜单项运行KeilBuilder, 方便.
.在Eclipse菜单中选择Run ->External Tools ->External Tools Configurations...
.在d出的对话框中双击"Program" 增加一个外部工具.
.在Name中填入"KeilBuilder".
.在"Main"选项卡中, Location通过"Browse File System..." 选择KeilBuilder程序, 如: C:\Keil\ARM\BIN40\KeilBuilder.exe在Working Directory中填入KeilBuilder所在的目录, 如C:\Keil\ARM\BIN40.
.在"Build"选项卡中, 去掉"Build before launch"上的勾.
.最后单击"Apply" ->"Run"完成添加, 并运行KeilBuilder工具.
此后你就可以通过菜单Run ->External Tools ->KeilBuilder 来快速运行KeilBuilder工具了. 如下2图:
7. 经过前面4步的设置, 你的工程编译很可能会编译不通过, 或者编译出来的Hex文件下载不正确. 那是因为一些编译器/链接器选项你还没有配置.
这时, 你可以通过菜单Run ->External Tools ->KeilBuilder来运行KeilBuilder工具, 通过界面来设置这些参数. 或者也可以直接用记事本打开工程目录中的"cts.ini"(如果工程目录中不存在此文件, 请转到KeilBuilder所在的目录下的"cts.ini", 如果KeilBuilder所在目录下也没有, 那么请双击运行下KeilBuilder程序, "cts.ini"就会自动生成)对参数进行修改.
注意, 在KeilBuilder界面上设置参数时, 必须选择好自己的工程目录, 如果没有选择工程目录, 设置的结果会保存到KeilBuilder所在的目录下的"cts.ini"文件中. KeilBuilder在首次运行时, 会在其所在目录下生成cts.ini文件并设置参数为默认值. KeilBuilder在每次编译一个工程时, 如果该工程目录下发现"cts.ini", 就使用工程目录下的"cts.ini"如果没有发现"cts.ini"文件, 则把KeilBuilder所在目录下的"cts.ini"文件复制一份到工程目录下, 然后再编译.
关于"cts.ini"文件中的这些参数, 它对应于Keil MDK环境中的ASM编译器/C编译器/Linker选项. 因为时间问题, 在KeilBuilder中并未实现(以后有空再搞吧)类似于Keil uVision中的选项式配置. 如果熟悉这些参数最好, 不熟的话可以先在Keil uVision中配置好, 再对应添加到"cts.ini"中.
在"cts.ini"文件中的"ASM=" 后面的内容对应于Keil uVision工程选项中的"Asm"选项.
在"cts.ini"文件中的"CC=" 后面的内容对应于Keil uVision工程选项中的"C/C++"选项.
在"cts.ini"文件中的"LNK=" 后面的内容对应于Keil uVision工程选项中的"Linker"选项.
8. 设置"cts.ini"文件中的编译选项确实不是一般人能搞定. 我也不懂(谁懂的做个说明分享下吧, 可以的话还能集成为UI, 更方便). 因为人懒, 不想去深究这些编译(链接)器选项, 于是想到了个折中的办法: 通过Keil uVision来设置好这些参数并编译工程, 然后把它实时的编译选项显示出来以供参考! 这样当编译选项无法搞定时, 就把整个工程交给keil uVision来编译一次, 然后参考实时获取的参数再对Eclipse工程的"cts.ini"文件做相应的修改就OK了.
在keil uVision中捕获它的编译选项, 需要做如下的设置. 在工程属性"Options for Target xxxx"的"User"选项卡中 设置keil编译后运行”KeilBuilder.exe -p”. 表示捕获keil uVision编译选项, 如下图:
由于觉得在Linux下不方便编写代码,所以准备在windows上搭建开发环境,其实在Linux上也搭建好了,但是使用起来不是很人性化,尤其是文件比较多的时候就很麻烦。下面就选择在windows上用Eclipse做开发。【后来发现还是需要在Linux下编程,因为Windows下没法包含Linux下的一些头文件,所以下面也介绍Linux环境下的Eclipse搭建】。
Windows下的Eclipse环境搭建:
1. 下载并安装Eclipse C/C++
2. 下载交叉编译器,之前在Linux都用的arm-linux-gcc,后来使用TI的ti-sdk-am335x-evm-08开发包,里面安装的编译器是arm-none-linux-gnueabi-gcc,都是能用的,所以我也选择了arm-none-linux-gnueabi-gcc作为交叉编译器,下载windows平台的编译器,然后安装。
下载地址:http://www.veryarm.com/arm-none-linux-gnueabi-gcc
3. 开启Eclipse的ssh远程登录功能,我分别开启了Beaglebone Black和Linux的ssh terminal, *** 作起来很是方便。
4. 新建C项目工程“hello”,编写简单的hello代码,注意选择交叉编译选项,交叉编译器前缀“arm-none-linux-gnueabi-”交叉编译器路径选择arm-none-linux-gnueabi-gcc安装的路径“…Linux\bin”,在此文件夹下有arm-none-linux-gnueabi-gcc.exe、arm-none-linux-gnueabi-gdb.exe等,还有cs-make.exe,这里需要把“cs-make.exe”改成“make.exe”,因为Eclipse不认cs-make.exe编译的时候会报错的。
图文安装参考:http://www.linuxidc.com/Linux/2016-03/129577.htm
5. 调试(构建Ctrl+B)的时候会自动生成makefile,生成编译结果,放到ARM嵌入式平台运行就可以了,成功执行并输出“hello”。
Linux下的Eclipse环境搭建:
官网下载http://www.eclipse.org/downloads/
发下是收费的
sudo apt-get install eclipse直接就安装了
然后sudo eclipse –s启动后发现“窗口->打开视图”里面没有ssh远程登录的选项,百度一下发现它是Eclipse的插件,查询下这个软件:sudo apt-cache search Remote System Explorer,发现一个eclipse-rse,就是它了,然后直接安装:sudo apt-get install eclipse-rse
重启eclipse
新建工程时发现没有C/C++工程,只有Java工程,再次搜索sudo apt-cache search eclipse C/C++
发现其中一条:
eclipse-cdt - C/C++ Development Tools for Eclipse
继续安装:
sudo apt-get install eclipse-cdt
再次重启eclipse,就有了C/C++项目,高兴ing。
新建C工程,添加编译器:
arm-none-linux-gnueabi-
/opt/toolschain/4.4.3/bin
编写hello程序,编译OK,在BBB上执行,成功!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)