今天想在hadoop的项目里顺便把输出文件也整理了,写入数据库,就想着能不能整合进spring。一般来说,只要被spring框架整合的框架有扩展创建对象的接口都可以,可是,我刚接触hadoop,还不是很了解。就上spring官网查一下,结果没查到,看来hadoop应该不能像mybatis那样被spring接管了。
那么,不能整合,结合总可以吧。我把hadoop当成一个工具包,它只要负责处理数据就行。不过hadoop主要用于数据处理,适合分布式应用,结合spring,意味着只把hadoop当成一个辅助功能来用,所以专业的海量数据处理,项目还是采用分布式hadoop好,我这里纯属偷懒,节省代码,才结合spring,放在同一个项目中。
原理如下图所示:
项目结构如图:
注意点
- dao层和service层都跟ssm的一样
@Service("testService")
public class TestServiceImpl implements TestService {
@Resource
TestMapper testDao;
}
- 业务逻辑的处理在action层,包含spring和hadoop,要使用spring的bean,得先初始化
@Controller
public class DataDealing {
//加载 spring 文件
static final ApplicationContext ctx = new FileSystemXmlApplicationContext( "classpath:spring-mybatis.xml");
public static void main(String[] args) {
TestService as = (TestService )ctx.getBean("testService ");
...
}
}
- 能用hadoop处理的文件应该比较大,输出的结果文件也很大,java去读取输出文件的结果时,也要考虑效率,这里用nio 替代io
//读取文件
public static List<String> readApp(String file) {
List<String> list = new ArrayList<String>();
try {
list = Files.readAllLines(Paths.get(file),
Charset.defaultCharset());
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
- 至于hadoop的引入和使用,可以看看我上一篇文章:http://blog.youkuaiyun.com/change_on/article/details/78856751