Skynet

          ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

          首先 本文中的 hadoop join  在實(shí)際開(kāi)發(fā)沒(méi)有用處!
          如果在開(kāi)發(fā)中 請(qǐng)使用 cascading  groupby, 進(jìn)行 hadoop join,
          本文只是為探討弄懂 cascading 實(shí)現(xiàn)做準(zhǔn)備。

          當(dāng)然 如果有有人 hadoop join 過(guò) 請(qǐng)聯(lián)系我,大家交流下 !

          文件可能需要的一些參考:
          hadoop jython ( windows )
          jython ,jython 編譯以及jar 包
          少量 linux shell


          本文介紹 hadoop 可能使用到的 join 接口測(cè)試 ,已經(jīng)參考:
          使用Hadoop實(shí)現(xiàn)Inner Join操作的方法【from淘寶】:http://labs.chinamobile.com/groups/58_547

          下面 測(cè)試后 ,我這大體上 對(duì) hadoop  join 的方式是這樣理解的 (猜想):
          數(shù)據(jù)1 ; 數(shù)據(jù)2
          job1.map( 數(shù)據(jù)1 ) =(臨時(shí)文件1)>  文件標(biāo)示1+需要join列  數(shù)據(jù)
          job2.map( 數(shù)據(jù)2 ) =(臨時(shí)文件2)>  文件標(biāo)示2+需要join列  數(shù)據(jù)

          臨時(shí)文件 mapred.join.expr 生成
          job3.map ->
          文件標(biāo)示1+需要join列 : 數(shù)據(jù)
          文件標(biāo)示2+需要join列 : 數(shù)據(jù)
          ......
          job3.Combiner - >
          需要join列 : 文件標(biāo)示1+數(shù)據(jù)
          需要join列 : 文件標(biāo)示2+數(shù)據(jù)
          job3.Reducer->
          需要join列 : 使用 java-list > 生成
            文件2-列x [  數(shù)據(jù),數(shù)據(jù)... ]
            文件1-列x [  數(shù)據(jù),數(shù)據(jù)... ]
          然后 你這 left join ,或 inner join 或 xxx join 邏輯 就自己來(lái)吧


          結(jié)果集合
          [root@localhost python]# cat /home/megajobs/del/jobs/tools/hadoop-0.18.3/data/090907/1
          1
          2
          3
          4
          5
          [root@localhost python]# cat /home/megajobs/del/jobs/tools/hadoop-0.18.3/data/090907/2
          2
          4
          3
          1

          修改 ..../hadoop-0.18.3/src/examples/python/compile
          #!/usr/bin/env bash

          export HADOOP_HOME
          =/home/xx/del/jobs/tools/hadoop-0.18.3
          export CASCADING_HOME
          =/home/xx/del/jobs/tools/cascading-1.0.16-hadoop-0.18.3
          export JYTHON_HOME
          =/home/xx/del/jobs/tools/jython2.2.1

          export CLASSPATH
          ="$HADOOP_HOME/hadoop-0.18.3-core.jar"                                            

          # so that filenames w/ spaces are handled correctly in loops below
          IFS=

          # add libs to CLASSPATH

          for f in $HADOOP_HOME/lib/*.jar; do                                                               
            CLASSPATH
          =${CLASSPATH}:$f;
          done

          for f in $HADOOP_HOME/lib/jetty-ext/*.jar; do
            CLASSPATH
          =${CLASSPATH}:$f;
          done

          for f in $CASCADING_HOME/*.jar; do
            CLASSPATH
          =${CLASSPATH}:$f;
          done

          for f in $CASCADING_HOME/lib/*.jar; do
            CLASSPATH
          =${CLASSPATH}:$f;
          done


          for f in $JYTHON_HOME/*.jar; do
            CLASSPATH
          =${CLASSPATH}:$f;
          done

          # restore ordinary behaviour
          unset IFS

          /home/xx/del/jobs/tools/jython2.2.1/jythonc -p org.apache.hadoop.examples --j $1.jar  -c $1.py 
          /home/xx/del/jobs/tools/hadoop-0.18.3/bin/hadoop jar $1.jar $2 $3 $4 $5 $6 $7 $8 $9 


          簡(jiǎn)單 數(shù)據(jù) 鏈接 :
          from org.apache.hadoop.fs import Path                                                             
          from org.apache.hadoop.io import *                                                                
          from org.apache.hadoop.mapred.lib import *                                                        
          from org.apache.hadoop.mapred.join  import *                                                      
          from org.apache.hadoop.mapred import *                                                            
          import sys                                                                                        
          import getopt                                                                                     
                                                                                                            
          class tMap(Mapper, MapReduceBase):                                                                
                  
          def map(self, key, value, output, reporter):                                              
                          output.collect( Text( str(key) ) , Text( value.toString() ))                      
                                                                                                 
                                         
          def main(args):                                                                                   
                  conf 
          = JobConf(tMap)                                                                      
                  conf.setJobName(
          "wordcount")                                                              
                                                                                                            
                  conf.setMapperClass( tMap )                                                               

                  FileInputFormat.setInputPaths(conf,[ Path(sp) for sp in args[1:-1]])                      
                  conf.setOutputKeyClass( Text )
                  conf.setOutputValueClass( Text )                                                         

                  conf.setOutputPath(Path(args[
          -1]))                                                        
                  
                  JobClient.runJob(conf)                                                                    
                  
          if __name__ == "__main__":main(sys.argv)     

          運(yùn)行
          ./compile test file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/1 file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/2   file:///home/xx/del/jobs/tools/hadoop-0.18.3/tmp/wc78
          結(jié)果:
          [xx@localhost wc78]$ cat ../wc78/part-00000
          0    1
          0    2
          2    4
          2    2
          4    3
          4    3
          6    1
          6    4
          8    5


          簡(jiǎn)單的數(shù)據(jù) join :
          from org.apache.hadoop.fs import Path
          from org.apache.hadoop.io import *
          from org.apache.hadoop.mapred.lib import *
          from org.apache.hadoop.mapred.join  import *
          from org.apache.hadoop.mapred import *
          import sys
          import getopt

          class tMap(Mapper, MapReduceBase):
                  
          def map(self, key, value, output, reporter):
                          output.collect( Text( str(key) ) , Text( value.toString() ))

          def main(args):
                  conf 
          = JobConf(tMap)
                  conf.setJobName(
          "wordcount")
                  conf.setMapperClass( tMap )

                  conf.set("mapred.join.expr", CompositeInputFormat.compose("override",TextInputFormat, args[1:-1] ) )
                  conf.setOutputKeyClass( Text )
                  conf.setOutputValueClass( Text )

                  conf.setInputFormat(CompositeInputFormat)
               
                  conf.setOutputPath(Path(args[
          -1]))

                  JobClient.runJob(conf)

          if __name__ == "__main__":main(sys.argv)
                  

          運(yùn)行結(jié)果 (  ) :
          ./compile test file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/1 file:///home/xx/del/jobs/tools/hadoop-0.18.3/data/090907/2   file:///home/xx/del/jobs/tools/hadoop-0.18.3/tmp/wc79
          [xx@localhost wc78]$ cat ../wc79/part-00000
          0    2
          2    4
          4    3
          6    1
          8    5













          整理 www.aygfsteel.com/Good-Game
          posted on 2009-09-08 10:39 劉凱毅 閱讀(1660) 評(píng)論(2)  編輯  收藏 所屬分類: python數(shù)據(jù)挖掘

          Feedback

          # re: hadoop jython join ( 1 ) 2009-09-08 11:11 zhong
          大規(guī)模數(shù)據(jù)量時(shí),使用hadoop做join操作還是很有意義的  回復(fù)  更多評(píng)論
            

          # re: hadoop jython join ( 1 ) 2009-09-08 21:18 kenshin
          感覺(jué)做join,用cascading比較合適!!邏輯上比較清晰,而且這兩個(gè)不是同一概念的東西!!

          搓見(jiàn)  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 宜昌市| 湘西| 余干县| 临清市| 钦州市| 屏东市| 泗阳县| 沈丘县| 平罗县| 广灵县| 韩城市| 随州市| 荆州市| 桂平市| 祁东县| 乌兰浩特市| 游戏| 田东县| 元氏县| 扶沟县| 汉阴县| 长海县| 南澳县| 东乡族自治县| 鹤壁市| 荃湾区| 阿拉善右旗| 健康| 额敏县| 木兰县| 武穴市| 荥阳市| 招远市| 阜宁县| 双辽市| 井陉县| 纳雍县| 阳谷县| 鸡泽县| 万州区| 南开区|