成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Python操作Hadoop,Python-MapReduce

SwordFly / 2922人閱讀

摘要:環(huán)境環(huán)境使用,,是使用開(kāi)發(fā)的,推薦使用操作。本次我們來(lái)討論如何使用操作,進(jìn)行文件上傳,下載,查看文件夾,以及如何使用進(jìn)行編程。使用操作首先需要安裝和導(dǎo)入庫(kù),使用。此參數(shù)要求指定的編碼。規(guī)則如下孫子在前,祖父在后孫子相同,祖父的名字按照排列

環(huán)境

環(huán)境使用:hadoop3.1,Python3.6,ubuntu18.04

Hadoop是使用Java開(kāi)發(fā)的,推薦使用Java操作HDFS。

有時(shí)候也需要我們使用Python操作HDFS。

本次我們來(lái)討論如何使用Python操作HDFS,進(jìn)行文件上傳,下載,查看文件夾,以及如何使用Python進(jìn)行MapReduce編程。

使用Python操作HDFS

首先需要安裝和導(dǎo)入hdfs庫(kù),使用pip install hdfs

1. 連接并查看指定路徑下的數(shù)據(jù)
from hdfs import * 
client = Client("http://ip:port")  #2.X版本port 使用50070  3.x版本port 使用9870
client.list("/")   #查看hdfs /下的目錄
2. 創(chuàng)建目錄
client.makedirs("/test")
client.makedirs("/test",permision = 777 ) # permision可以設(shè)置參數(shù)
3. 重命名、刪除
client.rename("/test","123")  #將/test 目錄改名為123
client.delete("/test",True)  #第二個(gè)參數(shù)表示遞歸刪除 
4.下載

/test/log.txt 文件下載至/home目錄下。

client.download("/test/log.txt","/home") 
5. 讀取
with client.read("/test/[PPT]Google Protocol Buffers.pdf") as reader:??? 
    print reader.read()

其他參數(shù):

read(args,?*kwds)? ?? ? ? ? ?

hdfs_path:hdfs路徑? ?? ? ? ? ?

offset:設(shè)置開(kāi)始的字節(jié)位置?

l- ength:讀取的長(zhǎng)度(字節(jié)為單位)? ?? ? ? ? ?

buffer_size:用于傳輸數(shù)據(jù)的字節(jié)的緩沖區(qū)的大小。默認(rèn)值設(shè)置在HDFS配置。? ??? ?

encoding:指定編碼? ?? ? ? ? ?

chunk_size:如果設(shè)置為正數(shù),上下文管理器將返回一個(gè)發(fā)生器產(chǎn)生的每一chunk_size字節(jié)而不是一個(gè)類似文件的對(duì)象? ?? ? ? ? ?

delimiter:如果設(shè)置,上下文管理器將返回一個(gè)發(fā)生器產(chǎn)生每次遇到分隔符。此參數(shù)要求指定的編碼。? ?? ? ? ? ?

progress:回調(diào)函數(shù)來(lái)跟蹤進(jìn)度,為每一chunk_size字節(jié)(不可用,如果塊大小不是指定)。它將傳遞兩個(gè)參數(shù),文件上傳的路徑和傳輸?shù)淖止?jié)數(shù)。稱為一次與- 1作為第二個(gè)參數(shù)。

6.上傳數(shù)據(jù)

將文件上傳至hdfs的 /test下。

client.upload(‘/test’,’/home/test/a.log’)
Python-MapReduce

編寫mapper代碼,map.py

import sys

for line in sys.stdin:
    fields = line.strip().split()
    for item in fields:
        print(item + " " + "1")

編寫reducer代碼,reduce.py

import sys

result = {}
for line in sys.stdin:
    kvs = line.strip().split(" ")
    k = kvs[0]
    v = kvs[1]
    if k in result:
        result[k]+=1
    else:
        result[k] = 1
for k,v in result.items():
    print("%s	%s" %(k,v))

添加測(cè)試文本,test1.txt

tale as old as time
true as it can be
beauty and the beast
本地測(cè)試執(zhí)行map代碼:

`
cat test1.txt | python map.py
`
結(jié)果:

tale 1
as 1
old 1
as 1
time 1
true 1
as 1
it 1
can 1
be 1
beauty 1
and 1
the 1
beast 1
本地測(cè)試執(zhí)行reduce代碼:

cat test1.txt | python map.py | sort -k1,1 | python reduce.py

執(zhí)行結(jié)果:

and    1
be    1
old    1
beauty    1
true    1
it    1
beast    1
as    3
can    1
time    1
the    1
tale    1
在Hadoop平臺(tái)執(zhí)行map-reduce程序

本地測(cè)試完畢,編寫腳本在HDFS中執(zhí)行程序

腳本:run.sh (請(qǐng)根據(jù)本機(jī)環(huán)境修改)

HADOOP_CMD="/app/hadoop-3.1.2/bin/hadoop"

STREAM_JAR_PATH="/app/hadoop-3.1.2/share/hadoop/tools/lib/hadoop-streaming-3.1.2.jar"

INPUT_FILE_PATH_1="/py/input/"

OUTPUT_PATH="/output"

$HADOOP_CMD fs -rmr-skipTrash $OUTPUT_PATH

# Step 1.

$HADOOP_CMD jar $STREAM_JAR_PATH   
-input $INPUT_FILE_PATH_1   
-output $OUTPUT_PATH   
-mapper "python  map.py"   
-reducer "python reduce.py"  
-file ./map.py   
-file ./reduce.py  

添加執(zhí)行權(quán)限chmod a+x run.sh;
執(zhí)行測(cè)試:bash run.sh,查看結(jié)果:

練習(xí) 1. 文件合并去重

輸入文件file1的樣例如下:
20150101 x
20150102 y
20150103 x
20150104 y
20150105 z
20150106 x

輸入文件file2的樣例如下:
20150101 y
20150102 y
20150103 x
20150104 z
20150105 y

根據(jù)輸入文件file1file2合并得到的輸出文件file3的樣例如下:

20150101 x
20150101 y
20150102 y
20150103 x
20150104 y
20150104 z
20150105 y
20150105 z
20150106 x

對(duì)于兩個(gè)輸入文件,即文件file1和文件file2,請(qǐng)編寫MapReduce程序,對(duì)兩個(gè)文件進(jìn)行合并,并剔除其中重復(fù)的內(nèi)容,得到一個(gè)新的輸出文件file3
為了完成文件合并去重的任務(wù),你編寫的程序要能將含有重復(fù)內(nèi)容的不同文件合并到一個(gè)沒(méi)有重復(fù)的整合文件,規(guī)則如下:

第一列按學(xué)號(hào)排列;

學(xué)號(hào)相同,按x,y,z排列。

2. 挖掘父子關(guān)系

輸入文件內(nèi)容如下:
child parent
Steven Lucy
Steven Jack
Jone Lucy
Jone Jack
Lucy Mary
Lucy Frank
Jack Alice
Jack Jesse
David Alice
David Jesse
Philip David
Philip Alma
Mark David
Mark Alma

輸出文件內(nèi)容如下:

grandchild grandparent
Steven Alice
Steven Jesse
Jone Alice
Jone Jesse
Steven Mary
Steven Frank
Jone Mary
Jone Frank
Philip Alice
Philip Jesse
Mark Alice
Mark Jesse

你編寫的程序要能挖掘父子輩關(guān)系,給出祖孫輩關(guān)系的表格。規(guī)則如下:

孫子在前,祖父在后

孫子相同,祖父的名字按照A-Z排列

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43540.html

相關(guān)文章

  • Hadoop使用 JavaScript 構(gòu)建

    摘要:說(shuō)明本文所有操作均在環(huán)境下進(jìn)行。任何可以使用來(lái)編寫的應(yīng)用,最終會(huì)由編寫。書中分別介紹了如何使用和結(jié)合進(jìn)行開(kāi)發(fā)。工具會(huì)創(chuàng)建作業(yè),發(fā)送給各個(gè),同時(shí)監(jiān)控整個(gè)作業(yè)的執(zhí)行過(guò)程。準(zhǔn)備好的運(yùn)行環(huán)境之后開(kāi)始搭建的運(yùn)行環(huán)境,參考單節(jié)點(diǎn)集群配置。 說(shuō)明 本文所有操作均在 linux 環(huán)境下進(jìn)行。 轉(zhuǎn)載請(qǐng)注明出處。 任何可以使用JavaScript來(lái)編寫的應(yīng)用,最終會(huì)由JavaScript編寫。 作為...

    Magicer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<