摘要:環境環境使用,,是使用開發的,推薦使用操作。本次我們來討論如何使用操作,進行文件上傳,下載,查看文件夾,以及如何使用進行編程。使用操作首先需要安裝和導入庫,使用。此參數要求指定的編碼。規則如下孫子在前,祖父在后孫子相同,祖父的名字按照排列
環境
環境使用:hadoop3.1,Python3.6,ubuntu18.04
Hadoop是使用Java開發的,推薦使用Java操作HDFS。
有時候也需要我們使用Python操作HDFS。
本次我們來討論如何使用Python操作HDFS,進行文件上傳,下載,查看文件夾,以及如何使用Python進行MapReduce編程。
使用Python操作HDFS首先需要安裝和導入hdfs庫,使用pip install hdfs。
1. 連接并查看指定路徑下的數據from hdfs import * client = Client("http://ip:port") #2.X版本port 使用50070 3.x版本port 使用9870 client.list("/") #查看hdfs /下的目錄2. 創建目錄
client.makedirs("/test") client.makedirs("/test",permision = 777 ) # permision可以設置參數3. 重命名、刪除
client.rename("/test","123") #將/test 目錄改名為123 client.delete("/test",True) #第二個參數表示遞歸刪除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()
其他參數:
read(args,?*kwds)? ?? ? ? ? ?
hdfs_path:hdfs路徑? ?? ? ? ? ?
offset:設置開始的字節位置?
l- ength:讀取的長度(字節為單位)? ?? ? ? ? ?
buffer_size:用于傳輸數據的字節的緩沖區的大小。默認值設置在HDFS配置。? ??? ?
encoding:指定編碼? ?? ? ? ? ?
chunk_size:如果設置為正數,上下文管理器將返回一個發生器產生的每一chunk_size字節而不是一個類似文件的對象? ?? ? ? ? ?
delimiter:如果設置,上下文管理器將返回一個發生器產生每次遇到分隔符。此參數要求指定的編碼。? ?? ? ? ? ?
progress:回調函數來跟蹤進度,為每一chunk_size字節(不可用,如果塊大小不是指定)。它將傳遞兩個參數,文件上傳的路徑和傳輸的字節數。稱為一次與- 1作為第二個參數。
6.上傳數據將文件上傳至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))
添加測試文本,test1.txt:
tale as old as time true as it can be beauty and the beast本地測試執行map代碼:
`
cat test1.txt | python map.py
`
結果:
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本地測試執行reduce代碼:
cat test1.txt | python map.py | sort -k1,1 | python reduce.py
執行結果:
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平臺執行map-reduce程序
本地測試完畢,編寫腳本在HDFS中執行程序
腳本:run.sh (請根據本機環境修改)
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
添加執行權限chmod a+x run.sh;
執行測試:bash run.sh,查看結果:
輸入文件file1的樣例如下:
20150101 x
20150102 y
20150103 x
20150104 y
20150105 z
20150106 x
輸入文件file2的樣例如下:
20150101 y
20150102 y
20150103 x
20150104 z
20150105 y
根據輸入文件file1和file2合并得到的輸出文件file3的樣例如下:
20150101 x
20150101 y
20150102 y
20150103 x
20150104 y
20150104 z
20150105 y
20150105 z
20150106 x
對于兩個輸入文件,即文件file1和文件file2,請編寫MapReduce程序,對兩個文件進行合并,并剔除其中重復的內容,得到一個新的輸出文件file3。
為了完成文件合并去重的任務,你編寫的程序要能將含有重復內容的不同文件合并到一個沒有重復的整合文件,規則如下:
第一列按學號排列;
學號相同,按x,y,z排列。
2. 挖掘父子關系輸入文件內容如下:
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
輸出文件內容如下:
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
你編寫的程序要能挖掘父子輩關系,給出祖孫輩關系的表格。規則如下:
孫子在前,祖父在后
孫子相同,祖父的名字按照A-Z排列
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43540.html
摘要:說明本文所有操作均在環境下進行。任何可以使用來編寫的應用,最終會由編寫。書中分別介紹了如何使用和結合進行開發。工具會創建作業,發送給各個,同時監控整個作業的執行過程。準備好的運行環境之后開始搭建的運行環境,參考單節點集群配置。 說明 本文所有操作均在 linux 環境下進行。 轉載請注明出處。 任何可以使用JavaScript來編寫的應用,最終會由JavaScript編寫。 作為...
閱讀 1428·2023-04-25 19:51
閱讀 1924·2019-08-30 15:55
閱讀 1738·2019-08-30 15:44
閱讀 2697·2019-08-30 13:58
閱讀 2690·2019-08-29 16:37
閱讀 1069·2019-08-29 15:34
閱讀 3989·2019-08-29 11:05
閱讀 2618·2019-08-28 17:51