Skynet

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

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks
          參考 : hadoop window 搭建 后,由于對 py 的語法喜歡 ,一直想 把hadoop,改成jython 的
          這次 在 自己電腦上  終于 完成,下面介紹過程:

          測試環境:
          依然的 windows + cygwin
          hadoop 0.18  # C:/cygwin/home/lky/tools/java/hadoop-0.18.3
          jython 2.2.1 # C:/jython2.2.1

          參考: PythonWordCount

          啟動 hadoop 并到 hdoop_home 下
          # 在云環境中創建 input 目錄
          $>bin/hadoop dfs -mkdir input

          # 在 包 hadoop 的 NOTICE.txt 拷貝到 input 目錄下
          $>bin/hadoop dfs -copyFromLocal c:/cygwin/home/lky/tools/java/hadoop-0.18.3/NOTICE.txt  hdfs:///user/lky/input

          $>cd
          src/examples/python

          # 創建 個 腳本 ( jy->jar->hd run  ) 一步完成!
          # 當然 在 linux 寫個腳本比這 好看 呵呵!
          $>vim run.bat
          "C:\Program Files\Java\jdk1.6.0_11\bin\java.exe"  -classpath "C:\jython2.2.1\jython.jar;%CLASSPATH%" org.python.util.jython C:\jython2.2.1\Tools\jythonc\jythonc.py   -p org.apache.hadoop.examples -d -j wc.jar -c %1

          sh C:\cygwin\home\lky\tools\java\hadoop-
          0.18.3\bin\hadoop jar wc.jar  %2 %3 %4 %5 %6 %7 %8 %9

          # 修改 jythonc 打包 環境 。 +hadoop jar
          $>vim C:\jython2.2.1\Tools\jythonc\jythonc.py
          # Copyright (c) Corporation for National Research Initiatives
          # Driver script for jythonc2.  See module main.py for details
          import sys,os,glob

          for fn in glob.glob('c:/cygwin/home/lky/tools/java/hadoop-0.18.3/*.jar') :sys.path.append(fn)
          for fn in glob.glob('c:/jython2.2.1/*.jar') :sys.path.append(fn)
          for fn in glob.glob('c:/cygwin/home/lky/tools/java/hadoop-0.18.3/lib/*.jar'
          ) :sys.path.append(fn)

          import main
          main.main()

          import os
          os._exit(0)


          # 運行
          C:/cygwin/home/lky/tools/java/hadoop-0.18.3/src/examples/python>
            run.bat WordCount.py  hdfs:///user/lky/input  file:///c:/cygwin/home/lky/tools/java/hadoop-0.18.3/tmp2




          結果輸出:

          cat c:/cygwin/home/lky/tools/java/hadoop-0.18.3/tmp2/part-00000
          (http://www.apache.org/).       1
          Apache  1
          Foundation      1
          Software        1
          The     1
          This    1
          by      1
          developed       1
          includes        1
          product 1
          software        1

          下面重頭來了 :(簡潔的 jy hdoop 代碼)
          #
          #
           Licensed to the Apache Software Foundation (ASF) under one
          #
           or more contributor license agreements.  See the NOTICE file
          #
           distributed with this work for additional information
          #
           regarding copyright ownership.  The ASF licenses this file
          #
           to you under the Apache License, Version 2.0 (the
          #
           "License"); you may not use this file except in compliance
          #
           with the License.  You may obtain a copy of the License at
          #
          #
               http://www.apache.org/licenses/LICENSE-2.0
          #
          #
           Unless required by applicable law or agreed to in writing, software
          #
           distributed under the License is distributed on an "AS IS" BASIS,
          #
           WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
          #
           See the License for the specific language governing permissions and
          #
           limitations under the License.
          #

          from org.apache.hadoop.fs import Path
          from org.apache.hadoop.io import *
          from org.apache.hadoop.mapred import *

          import sys
          import getopt

          class WordCountMap(Mapper, MapReduceBase):
              one 
          = IntWritable(1)
              
          def map(self, key, value, output, reporter):
                  
          for w in value.toString().split():
                      output.collect(Text(w), self.one)

          class Summer(Reducer, MapReduceBase):
              
          def reduce(self, key, values, output, reporter):
                  sum 
          = 0
                  
          while values.hasNext():
                      sum 
          += values.next().get()
                  output.collect(key, IntWritable(sum))

          def printUsage(code):
              
          print "wordcount [-m <maps>] [-r <reduces>] <input> <output>"
              sys.exit(code)

          def main(args):
              conf 
          = JobConf(WordCountMap);
              conf.setJobName(
          "wordcount");
           
              conf.setOutputKeyClass(Text);
              conf.setOutputValueClass(IntWritable);
              
              conf.setMapperClass(WordCountMap);        
              conf.setCombinerClass(Summer);
              conf.setReducerClass(Summer);
              
          try:
                  flags, other_args 
          = getopt.getopt(args[1:], "m:r:")
              
          except getopt.GetoptError:
                  printUsage(
          1)
              
          if len(other_args) != 2:
                  printUsage(
          1)
              
              
          for f,v in flags:
                  
          if f == "-m":
                      conf.setNumMapTasks(int(v))
                  
          elif f == "-r":
                      conf.setNumReduceTasks(int(v))
              conf.setInputPath(Path(other_args[0]))
              conf.setOutputPath(Path(other_args[
          1]))
              JobClient.runJob(conf);

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







          整理 www.aygfsteel.com/Good-Game
          posted on 2009-09-04 17:14 劉凱毅 閱讀(1983) 評論(0)  編輯  收藏 所屬分類: python集群開發數據挖掘
          主站蜘蛛池模板: 项城市| 遂溪县| 图木舒克市| 阜宁县| 尖扎县| 鹤岗市| 五华县| 筠连县| 阿瓦提县| 平泉县| 六枝特区| 萨迦县| 苍溪县| 四会市| 海伦市| 托克逊县| 常德市| 北辰区| 息烽县| 巴林右旗| 蒲城县| 建瓯市| 邛崃市| 清涧县| 海盐县| 柳州市| 边坝县| 和静县| 遂昌县| 崇义县| 泰安市| 大埔县| 和平县| 兴文县| 博白县| 桂阳县| 武冈市| 婺源县| 鞍山市| 武山县| 新河县|