導航:首頁 > 編程語言 > hadoop示常式序

hadoop示常式序

發布時間:2024-05-25 15:59:54

1. java怎麼連接hdfs文件系統,需要哪些包

apache的Hadoop項目提供一類api可以通過java工程操作hdfs中的文件,包括:文件打開,讀寫,刪除等、目錄的創建,刪除,讀取目錄中所有文件等。
1、到http://hadoop.apache.org/releases.html下載Hadoop,解壓後把所有jar加入項目的lib里
2、程序處理步驟: 1)得到Configuration對象,2)得到FileSystem對象,3)進行文件操作,簡單示例如下:
/**
*
*/
package org.jrs.wlh;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

/**
* @PutMeger.java
* java操作hdfs 往 hdfs中上傳數據
* @version $Revision$</br>
* update: $Date$
*/
public class PutMeger {

public static void main(String[] args) throws IOException {

String[] str = new String[]{"E:\\hadoop\\UploadFileClient.java","hdfs://master:9000/user/hadoop/inccnt.java"};
Configuration conf = new Configuration();
FileSystem fileS= FileSystem.get(conf);
FileSystem localFile = FileSystem.getLocal(conf); //得到一個本地的FileSystem對象

Path input = new Path(str[0]); //設定文件輸入保存路徑
Path out = new Path(str[1]); //文件到hdfs輸出路徑

try{
FileStatus[] inputFile = localFile.listStatus(input); //listStatus得到輸入文件路徑的文件列表
FSDataOutputStream outStream = fileS.create(out); //創建輸出流
for (int i = 0; i < inputFile.length; i++) {
System.out.println(inputFile[i].getPath().getName());
FSDataInputStream in = localFile.open(inputFile[i].getPath());

byte buffer[] = new byte[1024];
int bytesRead = 0;
while((bytesRead = in.read(buffer))>0){ //按照位元組讀取數據
System.out.println(buffer);
outStream.write(buffer,0,bytesRead);
}

in.close();
}

}catch(Exception e){
e.printStackTrace();
}
}

}

2. Hadoop實戰的作品目錄

第一部分Hadoop——一種分布式編程框架
第1章Hadoop簡介2
1.1為什麼寫《Hadoop 實戰》3
1.2什麼是Hadoop3
1.3了解分布式系統和Hadoop4
1.4比較SQL資料庫和Hadoop5
1.5理解MapRece6
1.5.1動手擴展一個簡單程序7
1.5.2相同程序在MapRece中的擴展9
1.6用Hadoop統計單詞——運行第一個程序11
1.7Hadoop歷史15
1.8小結16
1.9資源16
第2章初識Hadoop17
2.1Hadoop的構造模塊17
2.1.1NameNode17
2.1.2DataNode18
2.1.3Secondary NameNode19
2.1.4JobTracker19
2.1.5TaskTracker19
2.2為Hadoop集群安裝SSH21
2.2.1定義一個公共賬號21
2.2.2驗證SSH安裝21
2.2.3生成SSH密鑰對21
2.2.4將公鑰分布並登錄驗證22
2.3運行Hadoop22
2.3.1本地(單機)模式23
2.3.2偽分布模式24
2.3.3全分布模式25
2.4基於Web的集群用戶界面28
2.5小結30
第3章Hadoop組件31
3.1HDFS文件操作31
3.1.1基本文件命令32
3.1.2編程讀寫HDFS35
3.2剖析MapRece程序37
3.2.1Hadoop數據類型39
3.2.2Mapper40
3.2.3Recer41
3.2.4Partitioner:重定向Mapper輸出41
3.2.5Combiner:本地rece43
3.2.6預定義mapper和Recer類的單詞計數43
3.3讀和寫43
3.3.1InputFormat44
3.3.2OutputFormat49
3.4小結50
第二部分實戰
第4章編寫MapRece基礎程序52
4.1獲得專利數據集52
4.1.1專利引用數據53
4.1.2專利描述數據54
4.2構建MapRece程序的基礎模板55
4.3計數60
4.4適應Hadoop API的改變64
4.5Hadoop的Streaming67
4.5.1通過Unix命令使用Streaming68
4.5.2通過腳本使用Streaming69
4.5.3用Streaming處理鍵/值對72
4.5.4通過Aggregate包使用Streaming75
4.6使用combiner提升性能80
4.7溫故知新83
4.8小結84
4.9更多資源84
第5章高階MapRece85
5.1鏈接MapRece作業85
5.1.1順序鏈接MapRece作業85
5.1.2具有復雜依賴的MapRece鏈接86
5.1.3預處理和後處理階段的鏈接86
5.2聯結不同來源的數據89
5.2.1Rece側的聯結90
5.2.2基於DistributedCache的復制聯結98
5.2.3半聯結:map側過濾後在rece側聯結101
5.3創建一個Bloom filter102
5.3.1Bloom filter做了什麼102
5.3.2實現一個Bloom filter104
5.3.3Hadoop 0.20以上版本的Bloom filter110
5.4溫故知新110
5.5小結111
5.6更多資源112
第6章編程實踐113
6.1開發MapRece程序113
6.1.1本地模式114
6.1.2偽分布模式118
6.2生產集群上的監視和調試123
6.2.1計數器123
6.2.2跳過壞記錄125
6.2.3用IsolationRunner重新運行出錯的任務128
6.3性能調優129
6.3.1通過combiner來減少網路流量129
6.3.2減少輸入數據量129
6.3.3使用壓縮129
6.3.4重用JVM132
6.3.5根據猜測執行來運行132
6.3.6代碼重構與演算法重寫133
6.4小結134
第7章細則手冊135
7.1向任務傳遞作業定製的參數135
7.2探查任務特定信息137
7.3劃分為多個輸出文件138
7.4以資料庫作為輸入輸出143
7.5保持輸出的順序145
7.6小結146
第8章管理Hadoop147
8.1為實際應用設置特定參數值147
8.2系統體檢149
8.3許可權設置151
8.4配額管理151
8.5啟用回收站152
8.6刪減DataNode152
8.7增加DataNode153
8.8管理NameNode和SNN153
8.9恢復失效的NameNode155
8.10感知網路布局和機架的設計156
8.11多用戶作業的調度157
8.11.1多個JobTracker158
8.11.2公平調度器158
8.12小結160
第三部分Hadoop也瘋狂
第9章在雲上運行Hadoop162
9.1Amazon Web Services簡介162
9.2安裝AWS163
9.2.1獲得AWS身份認證憑據164
9.2.2獲得命令行工具166
9.2.3准備SSH密鑰對168
9.3在EC2上安裝Hadoop169
9.3.1配置安全參數169
9.3.2配置集群類型169
9.4在EC2上運行MapRece程序171
9.4.1將代碼轉移到Hadoop集群上171
9.4.2訪問Hadoop集群上的數據172
9.5清空和關閉EC2實例175
9.6Amazon Elastic MapRece和其他AWS服務176
9.6.1Amazon Elastic MapRece176
9.6.2AWS導入/導出177
9.7小結177
第10章用Pig編程178
10.1像Pig一樣思考178
10.1.1數據流語言179
10.1.2數據類型179
10.1.3用戶定義函數179
10.2安裝Pig179
10.3運行Pig180
10.4通過Grunt學習Pig Latin182
10.5談談Pig Latin186
10.5.1數據類型和schema186
10.5.2表達式和函數187
10.5.3關系型運算符189
10.5.4執行優化196
10.6用戶定義函數196
10.6.1使用UDF196
10.6.2編寫UDF197
10.7腳本199
10.7.1注釋199
10.7.2參數替換200
10.7.3多查詢執行201
10.8Pig實戰——計算相似專利的例子201
10.9小結206
第11章Hive及Hadoop群207
11.1Hive207
11.1.1安裝與配置Hive208
11.1.2查詢的示例210
11.1.3深入HiveQL213
11.1.4Hive小結221
11.2其他Hadoop相關的部分221
11.2.1HBase221
11.2.2ZooKeeper221
11.2.3Cascading221
11.2.4Cloudera222
11.2.5Katta222
11.2.6CloudBase222
11.2.7Aster Data和Greenplum222
11.2.8Hama和Mahout223
11.3小結223
第12章案例研究224
12.1轉換《紐約時報》1100萬個庫存圖片文檔224
12.2挖掘中國移動的數據225
12.3在StumbleUpon推薦最佳網站229
12.3.1分布式StumbleUpon的開端230
12.3.2HBase和StumbleUpon230
12.3.3StumbleUpon上的更多Hadoop應用236
12.4搭建面向企業查詢的分析系統——IBM的ES2項目238
12.4.1ES2系統結構240
12.4.2ES2爬蟲241
12.4.3ES2分析242
12.4.4小結249
12.4.5參考文獻250
附錄AHDFS文件命令251

3. spark和hadoop的區別

直接比較Hadoop和Spark有難度,因為它們處理的許多任務都一樣,但是在一些方面又並不相互重疊。

比如說,Spark沒有文件管理功能,因而必須依賴Hadoop分布式文件系統(HDFS)或另外某種解決方案。

Hadoop框架的主要模塊包括如下:

4. 如何使用Python為Hadoop編寫一個簡單的MapRece程序

在這個實例中,我將會向大家介紹如何使用Python 為 Hadoop編寫一個簡單的MapRece
程序。
盡管Hadoop 框架是使用Java編寫的但是我們仍然需要使用像C++、Python等語言來實現Hadoop程序。盡管Hadoop官方網站給的示常式序是使用Jython編寫並打包成Jar文件,這樣顯然造成了不便,其實,不一定非要這樣來實現,我們可以使用Python與Hadoop 關聯進行編程,看看位於/src/examples/python/wordCount.py 的例子,你將了解到我在說什麼。

我們想要做什麼?

我們將編寫一個簡單的 MapRece 程序,使用的是C-Python,而不是Jython編寫後打包成jar包的程序。
我們的這個例子將模仿 WordCount 並使用Python來實現,例子通過讀取文本文件來統計出單詞的出現次數。結果也以文本形式輸出,每一行包含一個單詞和單詞出現的次數,兩者中間使用製表符來想間隔。

先決條件

編寫這個程序之前,你學要架設好Hadoop 集群,這樣才能不會在後期工作抓瞎。如果你沒有架設好,那麼在後面有個簡明教程來教你在Ubuntu linux 上搭建(同樣適用於其他發行版linux、unix)

如何使用Hadoop Distributed File System (HDFS)在Ubuntu Linux 建立單節點的 Hadoop 集群

如何使用Hadoop Distributed File System (HDFS)在Ubuntu Linux 建立多節點的 Hadoop 集群

Python的MapRece代碼

使用Python編寫MapRece代碼的技巧就在於我們使用了 HadoopStreaming 來幫助我們在Map 和 Rece間傳遞數據通過STDIN (標准輸入)和STDOUT (標准輸出).我們僅僅使用Python的sys.stdin來輸入數據,使用sys.stdout輸出數據,這樣做是因為HadoopStreaming會幫我們辦好其他事。這是真的,別不相信!

Map: mapper.py

將下列的代碼保存在/home/hadoop/mapper.py中,他將從STDIN讀取數據並將單詞成行分隔開,生成一個列表映射單詞與發生次數的關系:
注意:要確保這個腳本有足夠許可權(chmod +x /home/hadoop/mapper.py)。

#!/usr/bin/env python

import sys

# input comes from STDIN (standard input)
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
# split the line into words
words = line.split()
# increase counters
for word in words:
# write the results to STDOUT (standard output);
# what we output here will be the input for the
# Rece step, i.e. the input for recer.py
#
# tab-delimited; the trivial word count is 1
print '%s\\t%s' % (word, 1)在這個腳本中,並不計算出單詞出現的總數,它將輸出 "<word> 1" 迅速地,盡管<word>可能會在輸入中出現多次,計算是留給後來的Rece步驟(或叫做程序)來實現。當然你可以改變下編碼風格,完全尊重你的習慣。

Rece: recer.py

將代碼存儲在/home/hadoop/recer.py 中,這個腳本的作用是從mapper.py 的STDIN中讀取結果,然後計算每個單詞出現次數的總和,並輸出結果到STDOUT。
同樣,要注意腳本許可權:chmod +x /home/hadoop/recer.py

#!/usr/bin/env python

from operator import itemgetter
import sys

# maps words to their counts
word2count = {}

# input comes from STDIN
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()

# parse the input we got from mapper.py
word, count = line.split('\\t', 1)
# convert count (currently a string) to int
try:
count = int(count)
word2count[word] = word2count.get(word, 0) + count
except ValueError:
# count was not a number, so silently
# ignore/discard this line
pass

# sort the words lexigraphically;
#
# this step is NOT required, we just do it so that our
# final output will look more like the official Hadoop
# word count examples
sorted_word2count = sorted(word2count.items(), key=itemgetter(0))

# write the results to STDOUT (standard output)
for word, count in sorted_word2count:
print '%s\\t%s'% (word, count)
測試你的代碼(cat data | map | sort | rece)

我建議你在運行MapRece job測試前嘗試手工測試你的mapper.py 和 recer.py腳本,以免得不到任何返回結果
這里有一些建議,關於如何測試你的Map和Rece的功能:
——————————————————————————————————————————————
\r\n
# very basic test
hadoop@ubuntu:~$ echo "foo foo quux labs foo bar quux" | /home/hadoop/mapper.py
foo 1
foo 1
quux 1
labs 1
foo 1
bar 1
——————————————————————————————————————————————
hadoop@ubuntu:~$ echo "foo foo quux labs foo bar quux" | /home/hadoop/mapper.py | sort | /home/hadoop/recer.py
bar 1
foo 3
labs 1
——————————————————————————————————————————————

# using one of the ebooks as example input
# (see below on where to get the ebooks)
hadoop@ubuntu:~$ cat /tmp/gutenberg/20417-8.txt | /home/hadoop/mapper.py
The 1
Project 1
Gutenberg 1
EBook 1
of 1
[...]
(you get the idea)

quux 2

quux 1

——————————————————————————————————————————————

在Hadoop平台上運行Python腳本

為了這個例子,我們將需要三種電子書:

The Outline of Science, Vol. 1 (of 4) by J. Arthur Thomson\r\n
The Notebooks of Leonardo Da Vinci\r\n
Ulysses by James Joyce
下載他們,並使用us-ascii編碼存儲 解壓後的文件,保存在臨時目錄,比如/tmp/gutenberg.

hadoop@ubuntu:~$ ls -l /tmp/gutenberg/
total 3592
-rw-r--r-- 1 hadoop hadoop 674425 2007-01-22 12:56 20417-8.txt
-rw-r--r-- 1 hadoop hadoop 1423808 2006-08-03 16:36 7ldvc10.txt
-rw-r--r-- 1 hadoop hadoop 1561677 2004-11-26 09:48 ulyss12.txt
hadoop@ubuntu:~$

復制本地數據到HDFS

在我們運行MapRece job 前,我們需要將本地的文件復制到HDFS中:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -FromLocal /tmp/gutenberg gutenberg
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls
Found 1 items
/user/hadoop/gutenberg <dir>
hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls gutenberg
Found 3 items
/user/hadoop/gutenberg/20417-8.txt <r 1> 674425
/user/hadoop/gutenberg/7ldvc10.txt <r 1> 1423808
/user/hadoop/gutenberg/ulyss12.txt <r 1> 1561677

執行 MapRece job

現在,一切准備就緒,我們將在運行Python MapRece job 在Hadoop集群上。像我上面所說的,我們使用的是
HadoopStreaming 幫助我們傳遞數據在Map和Rece間並通過STDIN和STDOUT,進行標准化輸入輸出。

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar
-mapper /home/hadoop/mapper.py -recer /home/hadoop/recer.py -input gutenberg/*
-output gutenberg-output
在運行中,如果你想更改Hadoop的一些設置,如增加Rece任務的數量,你可以使用「-jobconf」選項:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar
-jobconf mapred.rece.tasks=16 -mapper ...

一個重要的備忘是關於Hadoop does not honor mapred.map.tasks
這個任務將會讀取HDFS目錄下的gutenberg並處理他們,將結果存儲在獨立的結果文件中,並存儲在HDFS目錄下的
gutenberg-output目錄。
之前執行的結果如下:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar
-mapper /home/hadoop/mapper.py -recer /home/hadoop/recer.py -input gutenberg/*
-output gutenberg-output

additionalConfSpec_:null
null=@@@userJobConfProps_.get(stream.shipped.hadoopstreaming
packageJobJar: [/usr/local/hadoop-datastore/hadoop-hadoop/hadoop-unjar54543/]
[] /tmp/streamjob54544.jar tmpDir=null
[...] INFO mapred.FileInputFormat: Total input paths to process : 7
[...] INFO streaming.StreamJob: getLocalDirs(): [/usr/local/hadoop-datastore/hadoop-hadoop/mapred/local]
[...] INFO streaming.StreamJob: Running job: job_200803031615_0021
[...]
[...] INFO streaming.StreamJob: map 0% rece 0%
[...] INFO streaming.StreamJob: map 43% rece 0%
[...] INFO streaming.StreamJob: map 86% rece 0%
[...] INFO streaming.StreamJob: map 100% rece 0%
[...] INFO streaming.StreamJob: map 100% rece 33%
[...] INFO streaming.StreamJob: map 100% rece 70%
[...] INFO streaming.StreamJob: map 100% rece 77%
[...] INFO streaming.StreamJob: map 100% rece 100%
[...] INFO streaming.StreamJob: Job complete: job_200803031615_0021

[...] INFO streaming.StreamJob: Output: gutenberg-output hadoop@ubuntu:/usr/local/hadoop$

正如你所見到的上面的輸出結果,Hadoop 同時還提供了一個基本的WEB介面顯示統計結果和信息。
當Hadoop集群在執行時,你可以使用瀏覽器訪問 http://localhost:50030/ ,如圖:

檢查結果是否輸出並存儲在HDFS目錄下的gutenberg-output中:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -ls gutenberg-output
Found 1 items
/user/hadoop/gutenberg-output/part-00000 <r 1> 903193 2007-09-21 13:00
hadoop@ubuntu:/usr/local/hadoop$

可以使用dfs -cat 命令檢查文件目錄

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop dfs -cat gutenberg-output/part-00000
"(Lo)cra" 1
"1490 1
"1498," 1
"35" 1
"40," 1
"A 2
"AS-IS". 2
"A_ 1
"Absoluti 1
[...]
hadoop@ubuntu:/usr/local/hadoop$

注意比輸出,上面結果的(")符號不是Hadoop插入的。

轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦

閱讀全文

與hadoop示常式序相關的資料

熱點內容
hacknet創建文件夾 瀏覽:730
什麼語言做app 瀏覽:922
應用數據哪些可清理 瀏覽:976
數據區域下移一行該怎麼辦 瀏覽:679
華為賬號用qq注冊賬號 瀏覽:327
台達plc編程完成怎麼試運行 瀏覽:412
華為b137升級包下載 瀏覽:992
美團發布數據報告去哪裡看 瀏覽:146
js的隱藏div顯示 瀏覽:637
ps教程圖片轉換為粉筆字 瀏覽:816
下載網易雲音樂最新版本 瀏覽:165
原神的數據文件指什麼 瀏覽:725
解壓找不到合適文件夾什麼意思 瀏覽:461
iphone經營類 瀏覽:138
哪裡可以看到老齡化數據 瀏覽:644
小型門戶網站有哪些 瀏覽:563
簡書網站打不開怎麼辦 瀏覽:467
關於新能源汽車有哪些外文資料庫 瀏覽:271
word公式編輯器怎麼打開 瀏覽:419
為什麼電腦上的文件傳不了去 瀏覽:919

友情鏈接