Hadoop: MapReduce使用hdfs中的檔案
本程式碼包含功能:獲取DataNode名,並寫入到HDFS檔案系統中的檔案hdfs:///copyOftest.c中。
並計數檔案hdfs:///copyOftest.c中的wordcount計數,有別於Hadoop的examples中的讀取本地檔案系統中的檔案,這次讀取的是HDFS中的檔案。
package com.fora;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.Mapper.Context;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class FileOperate {
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
init();/*初始化檔案*/
Configuration conf = new Configuration();
Job job = new Job(conf, "word count");
job.setJarByClass(FileOperate.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
/* set the path of input and output*/
FileInputFormat.addInputPath(job, new Path("hdfs:///copyOftest.c"));
FileOutputFormat.setOutputPath(job, new Path("hdfs:///wordcount"));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()){
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException{
int sum = 0;
for (IntWritable val : values){
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void init()throws IOException {
/*copy local file to hdfs*/
Configuration config = new Configuration();
FileSystem hdfs = null;
String srcFile = "/test.c";
String dstFile = "hdfs:///copyOftest.c";
System.out.print("copy success!\n");
hdfs = FileSystem.get(config);
Path srcPath = new Path(srcFile);
Path dstPath = new Path(dstFile);
hdfs.copyFromLocalFile(srcPath, dstPath);
String fileName = "hdfs:///copyOftest.c";
Path path = new Path(fileName);
FileStatus fileStatus =null;
fileStatus = hdfs.getFileStatus(path);
System.out.println(fileStatus.getBlockSize());
FileSystem fs = FileSystem.get(config);
DistributedFileSystem hdfs1 = (DistributedFileSystem) fs;
DatanodeInfo[] dataNodeStats = hdfs1.getDataNodeStats();
/*create a file on hdfs*/
Path Outputpath = new Path("hdfs:///output/listOfDatanode");
FSDataOutputStream outputStream = hdfs.create(Outputpath);
String[] names = new String[dataNodeStats.length];
for (int i = 0; i < dataNodeStats.length; i++) {
names[i] = dataNodeStats[i].getHostName();/*get the list of datanodes*/
System.out.println(names[i]);
/*write the list of datanodes to file on hdfs*/
outputStream.write(names[i].getBytes(), 0, names[i].length());
}
}
}
執行結果:
[ [email protected] bin]# hadoop jar HDFS.jar com.fora.FileOperate
copy success!
67108864
master
slave1
11/07/21 15:45:23 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
11/07/21 15:45:23 INFO input.FileInputFormat: Total input paths to process : 1
11/07/21 15:45:23 INFO mapred.JobClient: Running job: job_201107210917_0003
11/07/21 15:45:24 INFO mapred.JobClient: map 0% reduce 0%
11/07/21 15:45:31 INFO mapred.JobClient: map 100% reduce 0%
11/07/21 15:45:43 INFO mapred.JobClient: map 100% reduce 100%
11/07/21 15:45:45 INFO mapred.JobClient: Job complete: job_201107210917_0003
11/07/21 15:45:45 INFO mapred.JobClient: Counters: 17
11/07/21 15:45:45 INFO mapred.JobClient: Job Counters
11/07/21 15:45:45 INFO mapred.JobClient: Launched reduce tasks=1
11/07/21 15:45:45 INFO mapred.JobClient: Rack-local map tasks=1
11/07/21 15:45:45 INFO mapred.JobClient: Launched map tasks=1
11/07/21 15:45:45 INFO mapred.JobClient: FileSystemCounters
11/07/21 15:45:45 INFO mapred.JobClient: FILE_BYTES_READ=228
11/07/21 15:45:45 INFO mapred.JobClient: HDFS_BYTES_READ=126
11/07/21 15:45:45 INFO mapred.JobClient: FILE_BYTES_WRITTEN=488
11/07/21 15:45:45 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=146
11/07/21 15:45:45 INFO mapred.JobClient: Map-Reduce Framework
11/07/21 15:45:45 INFO mapred.JobClient: Reduce input groups=19
11/07/21 15:45:45 INFO mapred.JobClient: Combine output records=19
11/07/21 15:45:45 INFO mapred.JobClient: Map input records=8
11/07/21 15:45:45 INFO mapred.JobClient: Reduce shuffle bytes=228
11/07/21 15:45:45 INFO mapred.JobClient: Reduce output records=19
11/07/21 15:45:45 INFO mapred.JobClient: Spilled Records=38
11/07/21 15:45:45 INFO mapred.JobClient: Map output bytes=211
11/07/21 15:45:45 INFO mapred.JobClient: Combine input records=22
11/07/21 15:45:45 INFO mapred.JobClient: Map output records=22
11/07/21 15:45:45 INFO mapred.JobClient: Reduce input records=19
[ [email protected] bin]# hadoop dfs -ls /
Found 6 items
-rw-r--r-- 1 root supergroup 126 2011-07-21 15:45 /copyOftest.c
-rw-r--r-- 1 root supergroup 26 2011-07-21 15:16 /listOfDatanode
drwxr-xr-x - root supergroup 0 2011-07-21 15:45 /output
-rw-r--r-- 1 root supergroup 10400 2011-07-20 16:51 /test.txt
drwxr-xr-x - root supergroup 0 2011-07-20 16:09 /tmp
drwxr-xr-x - root supergroup 0 2011-07-21 15:45 /wordcount
[ [email protected] bin]# hadoop dfs -ls /wordcount
Found 2 items
drwxr-xr-x - root supergroup 0 2011-07-21 15:45 /wordcount/_logs
-rw-r--r-- 1 root supergroup 146 2011-07-21 15:45 /wordcount/part-r-00000
[[email protected] bin]# hadoop dfs -cat /wordcount/part-r-00000
2011-07-21 1
File 1
Hadoop 1
System! 1
a 1
aimed 1
at 1
coping 1
file 3
from 1
from:fora 1
is 1
local 1
system 1
thank 1
the 1
this 2
to 1
you! 1
[[email protected] bin]#
相關推薦
小何講Linux: Linux中檔案及檔案描述符概述
在Linux中,一切皆檔案!所有對裝置和檔案的操作都是使用檔案描述符來進行的。檔案描述符是一個非負的整數,它是一個索引值,並指向在核心中每個程序所開啟的檔案的記錄表;當開啟一個現存檔案或建立一個新檔案
Hadoop: MapReduce使用hdfs中的檔案
本程式碼包含功能:獲取DataNode名,並寫入到HDFS檔案系統中的檔案hdfs:///copyOftest.c中。 並計數檔案hdfs:///copyOftest.c中的wordcount計數,有別於Hadoop的examples中的讀取本地檔案系統中的檔案,這次讀取的
介面測試系列:工作中所用(三:__read_config.py檔案)
import os from common import fileUtil def __read_config(): base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) settings_file
轉:ZooKeeper原理及其在Hadoop和HBase中的應用
簡介 ZooKeeper是一個開源的**分散式協調服務**,由雅虎建立,是Google Chubby的開源實現。分散式應用程式可以基於ZooKeeper實現諸如**資料釋出/訂閱、負載均衡、命名服務、分散式協調/通知、叢集管理、Master選舉、分散式鎖和分散式佇列**等功能。 基
Qt開發技巧:編寫.pro檔案,在構建流程中加入命令列的方法
1、在專案構建前執行命令 在專案構建前執行命令cmd 存在問題 system(cmd) 存在執行多次的問題,可以參考message函式的QMake Manual說明
另類爬蟲:從PDF檔案中爬取表格資料
簡介 本文將展示一個稍微不一樣點的爬蟲。 以往我們的爬蟲都是從網路上爬取資料,因為網頁一般用HTML,CSS,JavaScript程式碼寫成,因此,有大量成熟的技術來爬取網頁中的各種資料。這次,我們需要爬取的文件為PDF檔案。本文將展示如何利用Python的camelot模組
磁碟當前目錄下存在檔案 c1.txt,其中存放了一段英文文字。請程式設計實現將c1.txt中英文文字全部轉換為答謝字母,並儲存到c2.txt中。要求:c2.txt檔案前面儲存的是c1.txt文案中的原始文字,後面緊跟著的是轉換後的文字
#include"stdio.h"#include"string.h" void main(){ FILE *fp1,*fp2; char ch[1000]=" ",c; int i=0; fp1=fopen("c1.txt","r"); fp2=fopen("c2.txt","w");
介面測試系列:工作中所用(十:配置檔案的讀寫操作 configparser模組)
global_cache.py # -*- codeding: utf-8 -*- import configparser import hashlib import os from common.base import ENV class globalInfo: def get_
Python每日一題:第3題:統計一個檔案中每個單詞出現的次數
題目: 統計一個檔案中每個單詞出現的次數,列出出現頻率最多的5個單詞。 前言: 這道題在實際應用場景中使用比較廣泛,比如統計歷年來四六級考試中出現的高頻詞彙,記得李笑來就利用他的程式設計技能出版過一本背單詞的暢銷書,就是根據詞頻來記單詞,深受學生喜歡。這就是一個把程式設計技能用來解決實際問
Hadoop程式執行中 “沒有許可權讀寫檔案”
問題:在hdfs與本地檔案系統進行檔案讀寫的時候顯示許可權不夠 解決: 1、hdfs中的檔案許可權不夠 檢視hdfs檔案許可權,通過 hadoop fs -chmod 777 XXXX 進行許可權的修改 2、本地(Linux)檔案許可權不夠
《機器學習實戰》第2章閱讀筆記3 使用K近鄰演算法改進約會網站的配對效果—分步驟詳細講解1——資料準備:從文字檔案中解析資料(附詳細程式碼及註釋)
本篇使用的資料存放在文字檔案datingTestSet2.txt中,每個樣本資料佔據一行,總共有1000行。 樣本主要包含以下3中特徵: (1)每年獲得飛行常客里程數 (2)玩視訊遊戲所耗時間百分比 (3)每週消費的冰淇淋公升數 在使用分類器之前,需要將處理的檔案格式
YOLOV3實戰4:Darknet中cfg檔案說明和理解
大家好,我是小p,從今天起,將逐漸從原始碼角度解析Darknet,歡迎加入物件檢測群813221712討論和交流,進群請看群公告! 今天將要說明的是Darknet中的cfg檔案,廢話少說,直接幹!(以cfg/yolov3.cfg為例,其它類似) [net]
Linux中檔案編輯操作:
Linux 系統中使用vi命令進行檔案編輯操作: 按insert鍵進入編輯模式 編輯完成後按esc鍵推出編輯模式 : wq 儲存並退出 : w 儲存 : w filename 另存為 filename : wq! 儲存並強制退出 : wq! Filena
041:模版中載入靜態檔案詳解
載入靜態檔案: 在一個網頁中,不僅僅只有一個 html 骨架,還需要 css 樣式檔案, js 執行檔案以及一些圖片等。因此在 DTL 中載入靜態檔案是一個必須要解決的問題。在 DTL 中,使用 static 標籤來載入靜態檔案。要使用 static 標籤,首先需要 {% load static %} 。載
Python進階,ConfigParser:Python中對於ini格式的配置檔案的使用
ConfigParser:配置檔案的讀取 原文連結和公眾號 更多文章教程: Python雁橫(或者微信搜尋:py_0123),如果需要一個學習交流的地方可以加我的QQ群:719139688
Caffe中檔案引數設定(九-1):訓練和測試自己的圖片-linux版本
在深度學習的實際應用中,我們經常用到的原始資料是圖片檔案,如jpg,jpeg,png,tif等格式的,而且有可能圖片的大小還不一致。而在caffe中經常使用的資料型別是lmdb或leveldb,因此就產生了這樣的一個問題:如何從原始圖片檔案轉換成caffe中能夠執行的db(l
Python中scrapy爬蟲框架的資料儲存方式(包含:圖片、檔案的下載)
注意:1、settings.py中ITEM_PIPELINES中數字代表執行順序(範圍是1-1000),引數需要提前配置在settings.py中(也可以直接放在函式中,這裡主要是放在settings.py中),同時settings.py需要配置開啟2、 process_it
MOAC中“MO:安全性配置檔案“對於開發者
1. 獲取配置檔案的值:應用開發員->配置檔案->輸入使用者配置檔名,找到上面的名稱,即可填入fnd_profile.VALUE()中。 2. MO:安全性配置檔案有值的話,就代表啟用了MOAC. 3. 其中“MO:業務實體”和“MO:安全性配置檔案”兩
Android開發: Eclipse中匯入專案前有紅叉提示但是專案檔案內容無錯誤的解決方法
Eclipse中,Android專案名稱前有紅叉,但專案內所有檔案都無錯誤,通常發生在匯入專案時。 先可以去看一下幾個視窗的輸出內容,不同的錯誤日誌要採用不同的方法,要靈活使用各種方法! 1>選單路徑----Window/Show View/Console 2
Hadoop——查詢摸個檔案在HDFS叢集中的位置
import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.f