`
guafei
  • 浏览: 323142 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

isearch里面加外卖字段和我的第一个mapperreducer程序

阅读更多
这个练手的项目要改动三个部分:
fullbuild(dump.sh 和store-ajoin-conf.xml)
store service(增加这些字段的搜索、排序、显示功能)
即时更新(除ditu_range外都需要即时更新)

fullbuild工程:首先改动dump.sh,主要是从数据库中dump下所需要字段的值,这里就涉及到shell的编写。我们从数据库中dump下来的数据字段以\0分割,行以\b分割。其次是改动store-ajoin-conf.xml配置文件,具体看:http://guafei.iteye.com/admin/blogs/939331
还有注意几个path,table表的属性path中指定的路径的数据是放在hadoop的hdfs文件系统中的,<join>中的path也是放在hadoop的hdfs文件系统中,而upd中的path属性则是放在服务器的硬盘上,也就放着处理好的xml文件。还有在执行shell脚本的时候,还要注意打通ssh(跟龙浅说)。
下面是几个常用的几个命令:
cat part-m-0* > 2.txt 
重定向part-m-0*文件到2.txt    :应用场景,当part-m-0开头的数据很多,一个一个看比较麻烦,所以把他们重定向到一个文件查看。
grep "minimum_amount=[0-9]" *    查找数据
./hadoop dfs -get /store/in/store/store3.db.hz2.koubei.net-huangye9-store9* /home/admin/guafei  从hadoop的hdfs文件系统中取数据,并且用到了匹配操作
./hadoop dfs -mkdir /store/in/takeout   在hadoop文件系统中建立目录
./hadoop dfs -ls /store/in/  在hadoop文件系统查看文件
/home/admin/hadoop/hadoop-0.20.2/bin/hadoop job -list :查看正在运行的job进程的命令
/home/admin/hadoop/hadoop-0.20.2/bin/hadoop job -kill job_201102281935_0036:杀死指定了job进程命令
./dump.sh takeout DEV  执行shell脚本
ssh user@remote.machine 用ssh登录远程服务器命令
exit  退出登录的服务器
ls |wc -l  这个命令是查看某个目录下文件的总数
/  用vi编辑时查询符号

store service工程:改动的地方有koubei-store-isearch-common工程中的Fields类,这个类中放的都是isearch的key。同时要改动IsearchStoreVO类,设置字段的默认值。接下去就是改动SearchStoreService类,主要是设置一些查询(这个类要作为接口的实现类提供出去)。还要改动common.context.xml配置文件,里面配置的key是isearch的字段,value是
storeVO类中的对应属性。

notify工程:改动的是StoreDBService类和store.context.xml,前者主要是getDBData方法,取db的数据。配置文件中的key是isearch的字段名,value是result里的key,具体见代码

mapper程序的需求是:
把city=4858和chk_user=台湾馆  的数据帅选出来,输出成  id\tname\tuser_id格式的数据
首先要找到数据的来源,city chk_user id name user_id 这些字段在什么地方有,我是从store主表中把数据dump下来,对这批数据作为输入进行处理。写好mapper程序之后,把这个工程打成jar包(用eclipse的export),然后用Linux的shell脚本跑这个程序。

打通ssh解释:
服务器A     isearch1.store.hadoop.hz2.koubei.net
服务器B     10.9.24.15      
服务器C     10.252.71.130                                                                                       第一:打通A与B ,A与C之间的SSH    单项打通A访问B与C
第二:B与C都是数据库服务器,我们执行的是dump命令,dump下来的数据放在/tmp/data目录下,而且开通mysql和admin的权限,能对这批数据进行读、写、执行操作
第三:在A和B上面都装上hadoop客户端

public void map(LongWritable key, Text value, Context context)方法传入的参数Text value 都是一行一行的传入。 mapper主要的作用是排序,把key相同的都排在一起,为reducer切割文件做准备。如果一个mapper程序的输入本来就拍好序,并且没有什么业务逻辑,那么就没有必要进行mapper。
public void reduce(Text key, Iterable<Text> texts, Context context) 方法主要处理的相同key的value数据。job.setInputFormatClass(IsearchDbInputFormat.class);这句话是对文件的分割,具体看IsearchDbInputFormat的readline方法(如何切割文件)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics