1. 程式人生 > >使用hadoop-streaming初體驗mapreduce

使用hadoop-streaming初體驗mapreduce

接下來記錄一下如何使用hadoop-streaming執行一個簡單的mapreduce

hadoop-streaming


hadoop-streaming和spark-streaming不是一個意思

簡單的說hadooop-streaming是一個框架,可以讓任何語言編寫的mr程式都能在hadoop上執行,只需要遵循標準輸入stdin輸出stdout即可。

因此我們可以用python寫一個mr過程來體驗一下

先寫一個map.py

 import sys
   
 for line in sys.stdin:
           ss = line.strip().split(' ')
           for word in ss:
                   print('\t'.join([word.strip(),"1"]))

隨便寫一個測試檔案 word.txt

張三 李四
黃二 小牛
張三 小牛
李四 黃一

然後使用以下命令,體會一下map過程

cat word.txt | python map.py

輸出

張三	1
李四	1
黃二	1
小牛	1
張三	1
小牛	1
李四	1
黃一	1

是不是很有趣~

接著我們寫一個簡單的red.py體驗一下reduce過程

import sys 

cur_word = None
sum=0

for line in sys.stdin:
    word,cnt = line.strip().split('\t')

    if cur_word == None:
        cur_word = word
    if cur_word!=word:
        print('\t'.join([cur_word,str(sum)]))
        cur_word = word
        sum=0
    sum+=int(cnt)
執行
cat word.txt | python map.py | sort -k 1 | python red.py

上述命令對map的結果進行了sort,這是模擬了mr的排序過程

輸出

小牛	2
張三	2
李四	2
黃一	1

一個簡單的wordcount就這麼寫好啦~

那麼怎麼才能提交python編寫的mr程式給hadoop呢

這就需要用到hadoop-streaming這個框架了

在這裡為了以後使用方便,寫成shell指令碼

HADOOP_CMD="/Users/huangxiao/hadoop-2.7.3/bin/hadoop"#我的hadoop位置
STREAM_JAR_PATH="/Users/huangxiao/hadoop-2.7.3//share/hadoop/tools/lib/hadoop-streaming-
2.7.3.jar"#streaming這個jar包的位置
INPUT_FILE_PATH_1="/word.txt"#測試檔案在hdfs中的位置。所以需要先將檔案傳入hdfs中
OUTPUT_PATH="/output"#檔案輸出目錄(執行mr前一定不能存在,mr自己會建立)

$HADOOP_CMD fs -rmr -skipTrash $OUTPUT_PATH#刪除原有的輸出資料夾

#step 1.下面程式碼就是使用streaming框架的命令,具體引數就不解釋了
$HADOOP_CMD jar $STREAM_JAR_PATH \
        -input $INPUT_FILE_PATH_1 \
        -output $OUTPUT_PATH \
        -mapper "python map.py" \
        -reducer "python red.py" \
        -file ./map.py \
        -file ./red.py

然後

bash run.sh

就可以看到hadoop執行這個程式啦

還可以在8088埠檢視喲

執行結果如下



當然啦這只是入門增加興趣的小demo

現在很多專案都是用spark來做了

相關推薦

使用hadoop-streaming體驗mapreduce

接下來記錄一下如何使用hadoop-streaming執行一個簡單的mapreducehadoop-streaminghadoop-streaming和spark-streaming不是一個意思簡單的說hadooop-streaming是一個框架,可以讓任何語言編寫的mr程式

Centos 7下VMware三臺虛擬機器Hadoop叢集體驗

一、下載並安裝Centos 7   傳送門:https://www.centos.org/download/      注:下載DVD ISO映象 這裡詳解一下VMware安裝中的兩個過程 網絡卡配置 二、SecureCRT遠端操控 p

hadoop streaming 來執行mapreduce的指令碼

2013-02-01 周海漢/文 2013.2.1 http://abloz.com tom white的《hadoop the_definitive_guide 3nd edition》附錄C裡面講到用streaming

【Spark深入學習 -15】Spark Streaming前奏-Kafka體驗

rod htm 新的 callback tails 包括 -c 舉例 清理 ----本節內容------- 1.Kafka基礎概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知識 1.2.2.架構和原理 1.2.

Hadoop體驗:快速搭建Hadoop偽分布式環境

hadoop 偽分布式 大數據 0.前言 本文旨在使用一個全新安裝好的Linux系統從0開始進行Hadoop偽分布式環境的搭建,以達到快速搭建的目的,從而體驗Hadoop的魅力所在,為後面的繼續學習提供基礎環境。 對使用的系統環境作如下說明:操作系統:CentOS 6.5 64位主機I

Hadoop集群啟動、體驗

查看 name 清理 分享 文本 mat 我們 datanode some 1. 啟動方式要啟動Hadoop集群,需要啟動HDFS和YARN兩個集群。註意:首次啟動HDFS時,必須對其進行格式化操作。本質上是一些清理和準備工作,因為此時的HDFS在物理上還是不存在的。hdf

Hadoop叢集啟動、體驗

1. 啟動方式 要啟動Hadoop叢集,需要啟動HDFS和YARN兩個叢集。 注意:首次啟動HDFS時,必須對其進行格式化操作。本質上是一些清理和準備工作,因為此時的HDFS在物理上還是不存在的。 hdfs namenode–format或者hadoop namenod

使用Hadoop Streaming 完成MapReduce(Python程式碼)

一 Map和Reduce    首先看下MR的工作原理   MapReduce的好處是它可以把在記憶體中不能完成的事轉變成可以在硬碟上高效完成。 Map-­‐Reduce 對於叢集的好處: 1,在多節點上冗餘地儲存資料,以保證資料的持續性和一直可取性

Python Hadoop Mapreduce 實現Hadoop Streaming分組和二次排序

需求:公司給到一份全國各門店銷售資料,要求:1.按門店市場分類,將同一市場的門店放到一起;2.將各家門店按銷售額從大到小,再按利潤從大到小排列 一 需求一:按市場對門店進行分組 分組(partition) Hadoop streaming框架預設情況下會以’/t

Hadoop體驗(一)

大資料:資料集的大小超過了現有典型的資料庫軟體和工具處理的能力。於此同時,為了滿足資料的捕捉、儲存、聚合、管理這些大資料以及對資料的深度分析的技術,誕生出來一些處理大資料的架構。Hadoop就是一個典型而又很好的產物。他是Apache基金會所開發的分散式系統基礎架構。(免費!!) Ha

Hadoop streaming mapreduce多檔案輸入使用方法

寫Mapreduce程式時,常常會有同時處理多個輸入檔案的的需求,那麼如何在map程式中方便的知道這一條record到底來自哪個檔案呢?如果資料來源是可控的,我們尚可以通過欄位的個數等來判斷,然而這不是一個優雅的方法,其實hadoop已經給了留了解決方法:在map

小程序體驗:手把手教你寫出第一個小程序(一)

輸入框 個人 創建 公測 快速 nsh 成功 too 調用 本文筆者將根據quick start中的範例代碼,帶大家簡單地剖析一下小程序的運行方式,並介紹小程序開發中一些通用的特性,帶著大家一步步寫出自己的小程序。 適用對象:前端初學者,對小程序開發感興趣者 tip

vue.js2.0 自定義組件體驗

最新 解綁 然而 blog bool template 警告 rem 組件 理解 組件(Component)是 Vue.js 最強大的功能之一。組件可以擴展 HTML 元素,封裝可重用的代碼。在較高層面上,組件是自定義元素, Vue.js 的編譯器為它添加特殊功能。在有些

weblogic體驗

xsd 體驗 target java語言 註意 true 中間件 鼠標 使用 之前一直是用的tomcat,由於業務需要,需要使用weblogic部署項目,在這裏大概的記錄一下 weblogic是oracle出品的WEB容器,確切的說是一個基於JavaEE架構的中間件,使用

python體驗

list python 字典 python初體驗:1.python種類 CPython 代碼 -> C字節碼 -> 機器碼 (一行一行) pypy 代碼 -> C字節碼 -> 機器碼 全部轉換完 -> 執行 其他Python 代碼 -&g

Android逆向分析體驗

目錄 搜索 比較 .com -1 動態調試 總結 為我 修改 一、 準備知識 1. 懂Java Android開發。 2. 懂NDK ,C 語言 Android 動態鏈接庫.SO開發。 3.

vue.js 體驗— Chrome 插件開發實錄

原創 控件 https ext 方案 程序實現 瀏覽器中 display 博客 歡迎大家關註騰訊雲技術社區-博客園官方主頁,我們將持續在博客園為大家推薦技術精品文章哦~ 作者:陳緯傑 背景 對於經常和動畫開發打交道的開發者對於Animate.css這個動畫庫不

1Python全棧之路系列之Django體驗

編寫程序 online 網絡開發 程序員 堪薩斯 Python全棧之路系列之Django初體驗Django不得不說在Python中是一個非常強大的全棧框架,而且入門也比較簡單,只要你學完了基本的Django知識,接著再做一兩個項目,不大不小就成,然後你再去學其它的框架你會發現,在那些小而美

flask+jsonp跨域前後臺交互(接口體驗

script keys 返回 == 方法 png 前後臺 true run 1 # -*- coding: utf-8 -*- 2 from flask import Flask, jsonify 3 import psutil, time,json 4 5

Hibernate_01_體驗

基礎上 font cal close mysq getprop build nec address Hibernate的一個小例子(慕課網教程整理的代碼): 首先在eclipse--help--Eclipse MarketPlace中搜索“jboss Tool” 導入hi