當前位置:首頁 » 操作系統 » hadoopforlinux

hadoopforlinux

發布時間: 2022-07-30 01:58:07

⑴ 怎麼搭建兩個hadoop集群的測試環境

環境配置:
虛擬機:
vmware workstation 12
系統:
ubuntu 16.04 LTS(推薦使用原版,不要用kylin)
節點: 192.168.159.132 master 192.168.159.134 node1 192.168.159.137 node2
jdk-8u101-linux-x64.gz (java)hadoop-2.7.3.tar.gz (Hadoop 包)
安裝步驟:
1、安裝虛擬機系統,並進行准備工作(可安裝一個然後克隆)
2.修改各個虛擬機的hostname和host
3.創建用戶組和用戶
4、配置虛擬機網路,使虛擬機系統之間以及和host主機之間可以通過相互ping通。
5.安裝jdk和配置環境變數,檢查是否配置成功
6、配置ssh,實現節點間的無密碼登錄 ssh node1/2指令驗證時候成功
7、master配置hadoop,並將hadoop文件傳輸到node節點
8、配置環境變數,並啟動hadoop,檢查是否安裝成功,執行wordcount檢查是否成功。

1.安裝虛擬機

在VM上安裝下載好的Ubuntu的系統,具體過程自行網路。可以安裝完一個以後克隆,但是本人安裝過程中遇到很多問題,經常需要刪除虛擬機,重新安裝,而被克隆的虛擬機不能刪除,所以本人就用了很長時候,一個一個安裝。

一共3台虛擬機:分配情況和IP地址如下:

(註:查看ip地址的指令 ifconfig)

安裝虛擬機時可以設置靜態IP,因為過程中常常遇到網路連接問題,ifconfig找不到IPV4地址。當然,也可以不設,默認分配。

192.168.159.132 master 192.168.159.134 node1 192.168.159.137 node2

2.修改虛擬機的hostname和hosts文件

以master上機器為例,打開終端,執行如下的操作,把hostname修改成master,hosts修改成如下所示的樣子:

#修改hostname的指令:sudo gedit /etc/hostname
#修改hosts指令:sudo gedit /etc/hosts
#將以下內容添加到hosts中192.168.159.132 master192.168.159.134 node1192.168.159.137 node2

如下圖所示:


自此,hadoop集群搭建成功!

⑵ 我在linux上裝單點hadoop,最後在./start-all.sh之後出現了一下代碼,誰能解釋一下,這是什麼意思

start-all.sh這個命令不用了,現在使用start-dfs.sh 和 start-yarn.sh代替start-all.sh命令,可能是因為跟spark里的start-all.sh命令重名了,這是列印的第一行信息的意思;

後面提示的WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable是缺少一個java類庫,不影響運行

要解決可以參考

網頁鏈接裡面有解決方法

localhost: namenode running as process 6357. Stop it first.

0.0.0.0: secondarynamenode running as process 6637.

Stop it first.starting yarn daemons

resourcemanager running as process 6777. Stop it first.
localhost: nodemanager running as process 6880. Stop it first.

這些都是因為你之前已經開啟了這些服務,正在運行,你再開啟就提示你先關閉

⑶ linux 下如何把源碼打包成hadoop-core-1.1.2.jar

1.首先確認,你的linux上有沒有安裝ant
2.確認你的 各種環境是否配置正確(不會的話去看hadoop開發指南)
我把我的build.xml發給你
<?xml version="1.0"?>
<!--build.xml - a simple Ant buildfile -->
<project name="Simple Buildfile" default="compile" basedir=".">

<!--Set up the env prefix for environment variable -->
<property environment="env"/>

<!-- The directory cotaining source code -->
<property name="src.dir" value="src" />

<!-- Temporary build directories -->
<property name="build.dir" value="build"/>
<property name="build.classes" value="${build.dir}/classes"/>
<property name="build.lib" value="${build.dir}/lib"/>
<property name="jar.name" value="howtouse.jar"/>

<!-- Hadoop path -->
<property name="hadoop.path" value="${env.HADOOP_HOME}"/>

<!-- Target to create the build directories prior to the -->
<!-- compile target -->
<target name="prepare">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes}"/>
<mkdir dir="${build.lib}"/>
</target>

<target name="clean" description="Removes all generated files.">
<delete dir="${build.dir}"/>
</target>

<target name="compile" depends="prepare" description="Compiles all source code.">
<javac srcdir="${src.dir}" destdir="${build.classes}" includeantruntime="false"
deprecation="false">
<classpath>
<pathelement location="${hadoop.path}/hadoop-core-0.20.203.0.jar"/>
<pathelement location="${hadoop.path}/hadoop-tools-0.20.203.0.jar"/>
<pathelement location="${hadoop.path}/hadoop-examples-0.20.203.0.jar"/>
<pathelement location="${hadoop.path}/lib/mockito-all-1.8.5.jar"/>
<pathelement location="${hadoop.path}/lib/junit-4.5.jar"/>
<pathelement location="${hadoop.path}/lib/commons-math-2.1.jar"/>
<pathelement location="${hadoop.path}/lib/commons-cli-1.2.jar"/>
<pathelement location="${hadoop.path}/contrib/datajoin/hadoop-datajoin-0.20.203.0.jar"/>
</classpath>
</javac>
</target>

<target name="jar" depends="compile" description="Generates jar in the dist directory.">
<!-- Exclude unit tests from the final Jar file -->
<jar jarfile="${jar.name}" basedir="${build.classes}" excludes="**/*Test.class"/>

</target>

<target name="all" depends="clean,jar" description="Cleans,compiles,then builds the Jar file."/>

</project>

確保以上條件後
1.將自己寫的java文件放到 /home/hadoop/ant/build/src 使用XFTP
2.在HDFS中新建一個文件目錄專門用來裝資源文件 hadoop fs -mkdir /user/src
3.將simple.txt測試文件放到HDFS中 hadoop fs -put/user/src
4.將/home/hadoop/ant/build/src下的java文件編譯打包成play.jar(名字由build.xml決定)
方法:編譯之前必須保證與build.xml同級目錄下 ant jar
5.hadoop單機模式運行的時候必須保證在lib目錄下
hadoop jar play.jar hadoop/MaxTemperature /user/src/simple.txt output

⑷ 我在linux中執行hadoop fs -ls /後,顯示如下信息,WARN util.Nativ

Hadoop自帶的native包過舊,需要更新而已,替換個即可,進入hadoop目錄的native目錄替換一下,就可以了,在這里提供一個給你。記得先解壓

⑸ Hadoop讀寫文件時內部工作機制是怎樣的

客戶端通過調用FileSystem對象(對應於HDFS文件系統,調用DistributedFileSystem對象)的open()方法來打開文件(也即圖中的第一步),DistributedFileSystem通過RPC(Remote Procere Call)調用詢問NameNode來得到此文件最開始幾個block的文件位置(第二步)。對每一個block來說,namenode返回擁有此block備份的所有namenode的地址信息(按集群的拓撲網路中與客戶端距離的遠近排序,關於在Hadoop集群中如何進行網路拓撲請看下面介紹)。如果客戶端本身就是一個datanode(如客戶端是一個maprece任務)並且此datanode本身就有所需文件block的話,客戶端便從本地讀取文件。

以上步驟完成後,DistributedFileSystem會返回一個FSDataInputStream(支持文件seek),客戶端可以從FSDataInputStream中讀取數據。FSDataInputStream包裝了一個DFSInputSteam類,用來處理namenode和datanode的I/O操作。

客戶端然後執行read()方法(第三步),DFSInputStream(已經存儲了欲讀取文件的開始幾個block的位置信息)連接到第一個datanode(也即最近的datanode)來獲取數據。通過重復調用read()方法(第四、第五步),文件內的數據就被流式的送到了客戶端。當讀到該block的末尾時,DFSInputStream就會關閉指向該block的流,轉而找到下一個block的位置信息然後重復調用read()方法繼續對該block的流式讀取。這些過程對於用戶來說都是透明的,在用戶看來這就是不間斷的流式讀取整個文件。

當真個文件讀取完畢時,客戶端調用FSDataInputSteam中的close()方法關閉文件輸入流(第六步)。

如果在讀某個block是DFSInputStream檢測到錯誤,DFSInputSteam就會連接下一個datanode以獲取此block的其他備份,同時他會記錄下以前檢測到的壞掉的datanode以免以後再無用的重復讀取該datanode。DFSInputSteam也會檢查從datanode讀取來的數據的校驗和,如果發現有數據損壞,它會把壞掉的block報告給namenode同時重新讀取其他datanode上的其他block備份。

這種設計模式的一個好處是,文件讀取是遍布這個集群的datanode的,namenode只是提供文件block的位置信息,這些信息所需的帶寬是很少的,這樣便有效的避免了單點瓶頸問題從而可以更大的擴充集群的規模。


Hadoop中的網路拓撲


在Hadoop集群中如何衡量兩個節點的遠近呢?要知道,在高速處理數據時,數據處理速率的唯一限制因素就是數據在不同節點間的傳輸速度:這是由帶寬的可怕匱乏引起的。所以我們把帶寬作為衡量兩個節點距離大小的標准。

但是計算兩個節點之間的帶寬是比較復雜的,而且它需要在一個靜態的集群下才能衡量,但Hadoop集群一般是隨著數據處理的規模動態變化的(且兩兩節點直接相連的連接數是節點數的平方)。於是Hadoop使用了一個簡單的方法來衡量距離,它把集群內的網路表示成一個樹結構,兩個節點之間的距離就是他們離共同祖先節點的距離之和。樹一般按數據中心(datacenter),機架(rack),計算節點(datanode)的結構組織。計算節點上的本地運算速度最快,跨數據中心的計算速度最慢(現在跨數據中心的Hadoop集群用的還很少,一般都是在一個數據中心內做運算的)。

假如有個計算節點n1處在數據中心c1的機架r1上,它可以表示為/c1/r1/n1,下面是不同情況下兩個節點的距離:

• distance(/d1/r1/n1, /d1/r1/n1) = 0 (processes on the same node)

• distance(/d1/r1/n1, /d1/r1/n2) = 2 (different nodes on the same rack)

• distance(/d1/r1/n1, /d1/r2/n3) = 4 (nodes on different racks in the same data center)

• distance(/d1/r1/n1, /d2/r3/n4) = 6 (nodes in different data centers)

如下圖所示:


Hadoop

寫文件


現在我們來看一下Hadoop中的寫文件機制解析,通過寫文件機制我們可以更好的了解一下Hadoop中的一致性模型。


Hadoop

上圖為我們展示了一個創建一個新文件並向其中寫數據的例子。

首先客戶端通過DistributedFileSystem上的create()方法指明一個欲創建的文件的文件名(第一步),DistributedFileSystem再通過RPC調用向NameNode申請創建一個新文件(第二步,這時該文件還沒有分配相應的block)。namenode檢查是否有同名文件存在以及用戶是否有相應的創建許可權,如果檢查通過,namenode會為該文件創建一個新的記錄,否則的話文件創建失敗,客戶端得到一個IOException異常。DistributedFileSystem返回一個FSDataOutputStream以供客戶端寫入數據,與FSDataInputStream類似,FSDataOutputStream封裝了一個DFSOutputStream用於處理namenode與datanode之間的通信。

當客戶端開始寫數據時(第三步),DFSOutputStream把寫入的數據分成包(packet), 放入一個中間隊列——數據隊列(data queue)中去。DataStreamer從數據隊列中取數據,同時向namenode申請一個新的block來存放它已經取得的數據。namenode選擇一系列合適的datanode(個數由文件的replica數決定)構成一個管道線(pipeline),這里我們假設replica為3,所以管道線中就有三個datanode。DataSteamer把數據流式的寫入到管道線中的第一個datanode中(第四步),第一個datanode再把接收到的數據轉到第二個datanode中(第四步),以此類推。

DFSOutputStream同時也維護著另一個中間隊列——確認隊列(ack queue),確認隊列中的包只有在得到管道線中所有的datanode的確認以後才會被移出確認隊列(第五步)。

如果某個datanode在寫數據的時候當掉了,下面這些對用戶透明的步驟會被執行:

1)管道線關閉,所有確認隊列上的數據會被挪到數據隊列的首部重新發送,這樣可以確保管道線中當掉的datanode下流的datanode不會因為當掉的datanode而丟失數據包。

2)在還在正常運行的datanode上的當前block上做一個標志,這樣當當掉的datanode重新啟動以後namenode就會知道該datanode上哪個block是剛才當機時殘留下的局部損壞block,從而可以把它刪掉。

3)已經當掉的datanode從管道線中被移除,未寫完的block的其他數據繼續被寫入到其他兩個還在正常運行的datanode中去,namenode知道這個block還處在under-replicated狀態(也即備份數不足的狀態)下,然後他會安排一個新的replica從而達到要求的備份數,後續的block寫入方法同前面正常時候一樣。

有可能管道線中的多個datanode當掉(雖然不太經常發生),但只要dfs.replication.min(默認為1)個replica被創建,我們就認為該創建成功了。剩餘的replica會在以後非同步創建以達到指定的replica數。

當客戶端完成寫數據後,它會調用close()方法(第六步)。這個操作會沖洗(flush)所有剩下的package到pipeline中,等待這些package確認成功,然後通知namenode寫入文件成功(第七步)。這時候namenode就知道該文件由哪些block組成(因為DataStreamer向namenode請求分配新block,namenode當然會知道它分配過哪些blcok給給定文件),它會等待最少的replica數被創建,然後成功返回。


replica是如何分布的


Hadoop在創建新文件時是如何選擇block的位置的呢,綜合來說,要考慮以下因素:帶寬(包括寫帶寬和讀帶寬)和數據安全性。如果我們把三個備份全部放在一個datanode上,雖然可以避免了寫帶寬的消耗,但幾乎沒有提供數據冗餘帶來的安全性,因為如果這個datanode當機,那麼這個文件的所有數據就全部丟失了。另一個極端情況是,如果把三個冗餘備份全部放在不同的機架,甚至數據中心裏面,雖然這樣數據會安全,但寫數據會消耗很多的帶寬。Hadoop 0.17.0給我們提供了一個默認replica分配策略(Hadoop 1.X以後允許replica策略是可插拔的,也就是你可以自己制定自己需要的replica分配策略)。replica的默認分配策略是把第一個備份放在與客戶端相同的datanode上(如果客戶端在集群外運行,就隨機選取一個datanode來存放第一個replica),第二個replica放在與第一個replica不同機架的一個隨機datanode上,第三個replica放在與第二個replica相同機架的隨機datanode上。如果replica數大於三,則隨後的replica在集群中隨機存放,Hadoop會盡量避免過多的replica存放在同一個機架上。選取replica的放置位置後,管道線的網路拓撲結構如下所示:


Hadoop

總體來說,上述默認的replica分配策略給了我們很好的可用性(blocks放置在兩個rack上,較為安全),寫帶寬優化(寫數據只需要跨越一個rack),讀帶寬優化(你可以從兩個機架中選擇較近的一個讀取)。


一致性模型


HDFS某些地方為了性能可能會不符合POSIX(是的,你沒有看錯,POSIX不僅僅只適用於linux/unix, Hadoop 使用了POSIX的設計來實現對文件系統文件流的讀取 ),所以它看起來可能與你所期望的不同,要注意。

創建了一個文件以後,它是可以在命名空間(namespace)中可以看到的:

Path p = new Path("p");

fs.create(p);

assertThat(fs.exists(p), is(true));

但是任何向此文件中寫入的數據並不能保證是可見的,即使你flush了已經寫入的數據,此文件的長度可能仍然為零:

Path p = new Path("p");

OutputStream out = fs.create(p);

out.write("content".getBytes("UTF-8"));

out.flush();

assertThat(fs.getFileStatus(p).getLen(), is(0L));

這是因為,在Hadoop中,只有滿一個block數據量的數據被寫入文件後,此文件中的內容才是可見的(即這些數據會被寫入到硬碟中去),所以當前正在寫的block中的內容總是不可見的。

Hadoop提供了一種強制使buffer中的內容沖洗到datanode的方法,那就是FSDataOutputStream的sync()方法。調用了sync()方法後,Hadoop保證所有已經被寫入的數據都被沖洗到了管道線中的datanode中,並且對所有讀者都可見了:

Path p = new Path("p");

FSDataOutputStream out = fs.create(p);

out.write("content".getBytes("UTF-8"));

out.flush();

out.sync();

assertThat(fs.getFileStatus(p).getLen(), is(((long) "content".length())));

這個方法就像POSIX中的fsync系統調用(它沖洗給定文件描述符中的所有緩沖數據到磁碟中)。例如,使用java API寫一個本地文件,我們可以保證在調用flush()和同步化後可以看到已寫入的內容:

FileOutputStream out = new FileOutputStream(localFile);

out.write("content".getBytes("UTF-8"));

out.flush(); // flush to operating system

out.getFD().sync(); // sync to disk (getFD()返回與該流所對應的文件描述符)

assertThat(localFile.length(), is(((long) "content".length())));

在HDFS中關閉一個流隱式的調用了sync()方法:

Path p = new Path("p");

OutputStream out = fs.create(p);

out.write("content".getBytes("UTF-8"));

out.close();

assertThat(fs.getFileStatus(p).getLen(), is(((long) "content".length())));


由於Hadoop中的一致性模型限制,如果我們不調用sync()方法的話,我們很可能會丟失多大一個block的數據。這是難以接受的,所以我們應該使用sync()方法來確保數據已經寫入磁碟。但頻繁調用sync()方法也是不好的,因為會造成很多額外開銷。我們可以再寫入一定量數據後調用sync()方法一次,至於這個具體的數據量大小就要根據你的應用程序而定了,在不影響你的應用程序的性能的情況下,這個數據量應越大越好。

⑹ 如何使用linux,hadoop進行分布式計算

Hadoop 應用程序
Hadoop 的最常見用法之一是 Web 搜索。雖然它不是惟一的軟體框架應用程序,但作為一個並行數據處理引擎,它的表現非常突出。Hadoop 最有趣的方面之一是 Map and Rece 流程,它受到 Google 開發的啟發。這個流程稱為創建索引,它將 Web 爬行器檢索到的文本 Web 頁面作為輸入,並且將這些頁面上的單詞的頻率報告作為結果。然後可以在整個 Web 搜索過程中使用這個結果從已定義的搜索參數中識別內容。
MapRece
最簡單的 MapRece 應用程序至少包含 3 個部分:一個 Map 函數、一個 Rece 函數和一個 main 函數。main 函數將作業控制和文件輸入/輸出結合起來。在這點上,Hadoop 提供了大量的介面和抽象類,從而為 Hadoop 應用程序開發人員提供許多工具,可用於調試和性能度量等。
MapRece 本身就是用於並行處理大數據集的軟體框架。MapRece 的根源是函數性編程中的 map 和 rece 函數。它由兩個可能包含有許多實例(許多 Map 和 Rece)的操作組成。Map 函數接受一組數據並將其轉換為一個鍵/值對列表,輸入域中的每個元素對應一個鍵/值對。Rece 函數接受 Map 函數生成的列表,然後根據它們的鍵(為每個鍵生成一個鍵/值對)縮小鍵/值對列表。
這里提供一個示例,幫助您理解它。假設輸入域是 one small step for man, one giant leap for mankind。在這個域上運行 Map 函數將得出以下的鍵/值對列表:
(one, 1) (small, 1) (step, 1) (for, 1) (man, 1)
(one, 1) (giant, 1) (leap, 1) (for, 1) (mankind, 1)

如果對這個鍵/值對列表應用 Rece 函數,將得到以下一組鍵/值對:
(one, 2) (small, 1) (step, 1) (for, 2) (man, 1)
(giant, 1) (leap, 1) (mankind, 1)

結果是對輸入域中的單詞進行計數,這無疑對處理索引十分有用。但是,現在假設有兩個輸入域,第一個是 one small step for man,第二個是 one giant leap for mankind。您可以在每個域上執行 Map 函數和 Rece 函數,然後將這兩個鍵/值對列表應用到另一個 Rece 函數,這時得到與前面一樣的結果。換句話說,可以在輸入域並行使用相同的操作,得到的結果是一樣的,但速度更快。這便是 MapRece 的威力;它的並行功能可在任意數量的系統上使用。圖 2 以區段和迭代的形式演示這種思想。
圖 2. MapRece 流程的概念流
現在回到 Hadoop 上,它是如何實現這個功能的?一個代表客戶機在單個主系統上啟動的 MapRece 應用程序稱為 JobTracker。類似於 NameNode,它是 Hadoop 集群中惟一負責控制 MapRece 應用程序的系統。在應用程序提交之後,將提供包含在 HDFS 中的輸入和輸出目錄。JobTracker 使用文件塊信息(物理量和位置)確定如何創建其他 TaskTracker 從屬任務。MapRece 應用程序被復制到每個出現輸入文件塊的節點。將為特定節點上的每個文件塊創建一個惟一的從屬任務。每個 TaskTracker 將狀態和完成信息報告給 JobTracker。圖 3 顯示一個示例集群中的工作分布。
圖 3. 顯示處理和存儲的物理分布的 Hadoop 集群
Hadoop 的這個特點非常重要,因為它並沒有將存儲移動到某個位置以供處理,而是將處理移動到存儲。這通過根據集群中的節點數調節處理,因此支持高效的數據處理。

⑺ 如何在Linux下安裝配置Apache Mahout

Mahout安裝詳細全過程
1、jdk安裝 2
2、SSH無密碼驗證配置 2
3、 Hadoop配置 3
4、Hadop使用 6
5、Maven安裝 7
6、安裝mahout 7
7、hadoop集群來執行聚類演算法 8
8、其他 8
————————————————————
1、jdk安裝
1.1、到官網下載相關的JDK
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

1.2、打開「終端」
輸入:sh jdk-6u24-linux-i586.bin

1.3、設置JAVA_HOME環境系統變數
輸入:
vi /etc/environment
在文件中添加:
export JAVA_HOME=/root/jdk1.6.0_24
export JRE_Home=/root/jdk1.6.0_24/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
同樣,修改第二個文件。輸入:
vi /etc/profile
在umask 022之前添加以下語句:
export JAVA_HOME=/root/jdk1.6.0_24
export JRE_Home=/root/jdk1.6.0_24/jre
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

1.4、注銷用戶,檢測JDK版本。
輸入:
java -version

2、集群環境介紹
集群包含三個節點:1 個 namenode,2 個 datanode,節點之間區域網連接,可以相互 ping 通。節點 IP 地址分布如下:
Namenode: [email protected]
Datanode1: slave1 @192.168.1.20
Datanode2: [email protected]
三台節點上均是CentOS系統,Hadoop在/root/hadoop/目錄下。
在/etc/hosts上添加主機名和相應的IP地址:
192.168.1.10 master
192.168.1.20 slave1
192.168.1.21 slave2
3、SSH無密碼驗證配置
2.1 Hadoop 需要使用SSH 協議,namenode 將使用SSH 協議啟動 namenode和datanode 進程,偽分布式模式數據節點和名稱節點均是本身,必須配置 SSH localhost無密碼驗證。
用root用戶登錄,在家目錄下執行如下命令:ssh-keygen -t rsa
[root@master ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): & 按回車默認路徑 &
Created directory '/root/.ssh'. &創建/root/.ssh目錄&
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c6:7e:57:59:0a:2d:85:49:23:cc:c4:58:ff:db:5b:38 root@master
通過以上命令將在/root/.ssh/ 目錄下生成id_rsa私鑰和id_rsa.pub公鑰。進入/root/.ssh目錄在namenode節點下做如下配置:
[root@master .ssh]# cat id_rsa.pub > authorized_keys
[root@master .ssh]# scp authorized_keys 192.168.1.20:/root/.ssh/
[root@master .ssh]# scp authorized_keys 192.168.1.21:/root/.ssh/
配置完畢,可通過ssh 本機IP 測試是否需要密碼登錄。

2.2 和namenode無密碼登錄所有Datanode原理一樣,把Datanode的公鑰復制到
Namenode的.ssh目錄下。
[root@slave1 .ssh]# scp authorized_keys1 192.168.1.10:/root /.ssh
[root@ slave2.ssh]# scp authorized_keys2 192.168.1.10:/root /.ssh
將剛傳過來的authorized_keys1、2加入到authorized_keys
[root@ master.ssh]# cat authorized_keys1 > authorized_keys
[root@ master.ssh]# cat authorized_keys2 > authorized_keys
這樣也能在Datanode上關閉和啟動Hadoop服務。
4、 Hadoop配置
下載 hadoop-0.20.2.tar.gz, 進行解壓。
tar zxvf hadoop-0.20.2.tar.gz
修改/etc/profile,加入如下:
# set hadoop path
export HADOOP_HOME=/root/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

4.1、進入hadoop/conf, 配置Hadoop配置文件
4.1.1 配置hadoop-env.sh文件
添加 # set java environment
export JAVA_HOME=/root/jdk1.6.0_24
編輯後保存退出。

4.1.2 配置core-site.xml
# vi core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.10:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/hadooptmp</value>
</property>
</configuration>

4.1.3 配置hdfs-site.xml
# vi hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>

4.1.4 配置mapred-site.xml
# vi mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>192.168.1.10:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/mapred/local</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>/tmp/hadoop/mapred/system</value>
</property>
</configuration>

4.1.5 配置masters
# vi masters
192.168.1.10
4.1.6 配置slaves
# vi slaves
192.168.1.20
192.168.1.21

4.2、 Hadoop啟動
4.2.1 進入 /root/hadoop/bin目錄下,格式化namenode
# ./hadoop namenode –format

4.2.2 啟動hadoop所有進程
在/root/hadoop/bin 目錄下,執行start-all.sh命令
啟動完成後,可用jps命令查看hadoop進程是否啟動完全。正常情況下應該有如下進程:
10910 NameNode
11431 Jps
11176 SecondaryNameNode
11053 DataNode
11254 JobTracker
11378 TaskTracker

我在搭建過程中,在此環節出現的問題最多,經常出現啟動進程不完整的情況,要不是datanode無法正常啟動,就是namenode或是TaskTracker啟動異常。解決的方式如下:
1)在Linux下關閉防火牆:使用service iptables stop命令;
2)再次對namenode進行格式化:在/root/hadoop/bin 目錄下執行hadoop namenode -format命令
3)對伺服器進行重啟
4)查看datanode或是namenode對應的日誌文件,日誌文件保存在/root/hadoop/logs目錄下。
5)再次在/bin目錄下用start-all.sh命令啟動所有進程,通過以上的幾個方法應該能解決進程啟動不完全的問題了。

4.2.3 查看集群狀態
在 bin目錄下執行:hadoop dfsadmin -report
# hadoop dfsadmin –report

4.3 在WEB頁面下查看Hadoop工作情況
打開IE瀏覽器輸入部署Hadoop伺服器的IP:
http://localhost:50070
http://localhost:50030。

5、Hadop使用
一個測試例子wordcount:
計算輸入文本中詞語數量的程序。WordCount在Hadoop主目錄下的java程序包hadoop-0.20.2-examples.jar 中,執行步驟如下:
在/root/hadoop/bin/目錄下進行如下操作:
./hadoop fs -mkdir input(新建目錄名稱,可任意命名)
mkdir /root/a/
vi /root/a/a.txt
寫入hello world hello
# hadoop fs -FromLocal /root/a/ input
在/root/hadoop/bin下執行:
# ./hadoop jar hadoop-0.20.2-examples.jar wordcount input output (提交作業,此處需注意input與output是一組任務,下次再執行wordcount程序,還要新建目錄intput1與output1不能跟input與output重名)

6、Maven安裝
6.1下載Maven
解壓tar vxzf apache-maven-3.0.2-bin.tar.gz
mv apache-maven-3.0.2 /root/maven

6.2 vi ~/.bashrc
添加如下兩行
export M3_HOME=/root/maven
export PATH=${M3_HOME}/bin:${PATH}

6.3 先logout,之後再login
查看maven版本,看是否安裝成功
mvn -version

7、安裝mahout
安裝方法見:
https://cwiki.apache.org/confluence/display/MAHOUT/BuildingMahout

8、hadoop集群來執行聚類演算法
8.1數據准備
cd /root/hadoop
wget http://archive.ics.uci.e/ml/databases/synthetic_control/synthetic_control.data

8.2 ./hadoop fs -mkdir testdata
./hadoop fs -put synthetic_control.data testdata
./hadoop fs -lsr testdata

bin/hadoop jar /root/mahout/mahout-examples-0.4-job.jar org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

8.3查看一下結果吧
bin/mahout vectormp --seqFile /user/root/output/data/part-r-00000
這個直接把結果顯示在控制台上。

9、hadoop集群來執行推薦演算法
分布式
bin/hadoop jar /root/trunk/mahout-distribution-0.4/mahout-core-0.4-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -Dmapred.map.tasks=3 -Dmapred.rece.tasks=3 -Dmapred.input.dir=testdata/100wan.txt -Dmapred.output.dir=output2

偽分布式
bin/hadoop jar /root/trunk/mahout-distribution-0.4/mahout-core-0.4-job.jar org.apache.mahout.cf.taste.hadoop.pseudo.RecommenderJob --recommenderClassName org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender -Dmapred.input.dir=testdata/10wan.dat -Dmapred.output.dir=output_w10wan
10、其他
離開安全模式:hadoop dfsadmin -safemode leave

⑻ linux 下 hadoop 2.6編譯 找不到 dist和native是怎麼回事

1,安裝gcc,執行如下的幾個yum命令即可

Java代碼

yum -y install gcc

yum -y install gcc-c++

yum install make

yum install autoconf automake libtool cmake ncurses-devel openssl-devel gcc*

2,安裝JDK,並設置環境變數,完成後測試安裝成功否

Java代碼

[root@ganglia ~]# java -version

java version "1.5.0"

gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-4)

Copyright (C) 2007 Free Software Foundation, Inc.

This is free software; see the source for ing conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@ganglia ~]#

3, 安裝Maven,安裝完成後測試安裝與否

Java代碼

[root@ganglia ~]# mvn -v

Apache Maven 3.2.1 (; 2014-02-15T01:37:52+08:00)

Maven home: /usr/local/maven

Java version: 1.7.0_25, vendor: Oracle Corporation

Java home: /usr/local/jdk1.7.0_25/jre

Default locale: zh_CN, platform encoding: UTF-8

OS name: "linux", version: "2.6.32-431.el6.x86_64", arch: "amd64", family: "unix"

[root@ganglia ~]#

4, 安裝Ant, 安裝完成後,依舊測試成功與否

Java代碼

[root@ganglia ~]# ant -version

Apache Ant(TM) version 1.9.4 compiled on April 29 2014

[root@ganglia ~]#

5,安裝protobuf,安裝方式,從官網下載tar.gz的包,並上傳到linux上解壓,然後進入根目錄下,執行如下的幾個命令:

Java代碼

./configure

make

make check

make install

然後,執行如下命令,進行測試安裝成功與否

Java代碼

[root@ganglia protobuf-2.5.0]# protoc

Missing input file.

[root@ganglia protobuf-2.5.0]#

6,從hadoop官網下載hadoop2.2.0的版本的源碼的src的包,並查看目錄

Java代碼

[root@ganglia ~]# cd hadoop-2.2.0-src

[root@ganglia hadoop-2.2.0-src]# ll

總用量 108

-rw-r--r--. 1 67974 users 9968 10月 7 2013 BUILDING.txt

drwxr-xr-x. 2 67974 users 4096 10月 7 2013 dev-support

drwxr-xr-x. 4 67974 users 4096 6月 9 17:05 hadoop-assemblies

drwxr-xr-x. 3 67974 users 4096 6月 9 17:27 hadoop-client

drwxr-xr-x. 9 67974 users 4096 6月 9 17:14 hadoop-common-project

drwxr-xr-x. 3 67974 users 4096 6月 9 17:26 hadoop-dist

drwxr-xr-x. 7 67974 users 4096 6月 9 17:20 hadoop-hdfs-project

drwxr-xr-x. 11 67974 users 4096 6月 9 17:25 hadoop-maprece-project

drwxr-xr-x. 4 67974 users 4096 6月 9 17:06 hadoop-maven-plugins

drwxr-xr-x. 3 67974 users 4096 6月 9 17:27 hadoop-minicluster

drwxr-xr-x. 4 67974 users 4096 6月 9 17:03 hadoop-project

drwxr-xr-x. 3 67974 users 4096 6月 9 17:05 hadoop-project-dist

drwxr-xr-x. 12 67974 users 4096 6月 9 17:26 hadoop-tools

drwxr-xr-x. 4 67974 users 4096 6月 9 17:24 hadoop-yarn-project

-rw-r--r--. 1 67974 users 15164 10月 7 2013 LICENSE.txt

-rw-r--r--. 1 67974 users 101 10月 7 2013 NOTICE.txt

-rw-r--r--. 1 67974 users 16569 10月 7 2013 pom.xml

-rw-r--r--. 1 67974 users 1366 10月 7 2013 README.txt

[root@ganglia hadoop-2.2.0-src]#

7,修改/root/hadoop-2.2.0-src/hadoop-common-project/hadoop-auth/pom.xml文件,增加,補丁內容,這部分是hadoop2.2.0的bug,如果是其他的2.x的版本,可以視情況而定,內容如下:

Xml代碼

<dependency>

<groupId>org.mockito</groupId>

<artifactId>mockito-all</artifactId>

<scope>test</scope>

</dependency>

<!--新增的內容開始 -->

<dependency>

<groupId>org.mortbay.jetty</groupId>

<artifactId>jetty-util</artifactId>

<scope>test</scope>

</dependency>

<!--新增的內容結束 -->

<dependency>

<groupId>org.mortbay.jetty</groupId>

<artifactId>jetty</artifactId>

<scope>test</scope>

</dependency>

8,修改完畢後,回到hadoop-2.2.0-src的跟目錄下執行編譯打包命令:

Java代碼

mvn clean

mvn package -Pdist,native -DskipTests -Dtar

然後等待半個小時左右的編譯時間,網速快的話,時間可能會更短,編譯完成 編譯好的hadoop包,

Java代碼

[root@ganglia target]# pwd

/root/hadoop-2.2.0-src/hadoop-dist/target

[root@ganglia target]# ll

總用量 282348

⑼ windows本地沒有hadoop 下怎麼配置linux 下的hadoop home

Windows下運行Hadoop,通常有兩種方式:一種是用VM方式安裝一個Linux操作系統,這樣基本可以實現全Linux環境的Hadoop運行;另一種是通過Cygwin模擬Linux環境。後者的好處是使用比較方便,安裝過程也簡單。在這里咱們就來看看第二種方案:如何再Windows下快速安裝一個Hadoop環境,並結合Eclipse開發環境研究和調整Hadoop代碼。整個安裝過程包括以下三大步驟:安裝和配置Cygwin(http://cygwin.com/install.html)安裝和配置Hadoop-1.2.1(http://hadoop.apache.org/docs/stable/cluster_setup.html)安裝和配置Eclipse開發環境1安裝和配置Cygwin在Windows下通過安裝Cygwin模擬Linux環境,然後再安裝Hadoop,是一種簡單方便的方式,為Hadoop准備的模擬Linux環境安裝過程如下:1.1下載安裝文件針對不同系統類型下載相應的安裝文件,下載地址:http://cygwin.com/install.html。我這里的系統是window 7所以下載的是setup-x86.exe1.2安裝Cygwin剛剛下載的文件是模擬Linux系統所依賴的軟體包下載和管理工具,以後想要在模擬Linux環境中安裝或更新軟體都需要通過這個工具來完成,下面我們就先運行起來這個工具如下:左鍵雙擊setup-x86.exe文件運行安裝向導:cygwin安裝點擊【下一步】按鈕進入程序引導安裝頁,這里有三個選項,選擇第一項網路安裝:網路安裝:通過網路下載並安裝軟體包下載但不安裝:通過網路下載軟體包本地安裝:是用本地軟體包安裝cygwin安裝點擊【下一步】進入選擇模擬Linux系統的根目錄和用戶的向導頁。在Linux的文件系統中有且只有一個根目錄,在這里選擇目錄就是Linux中的那個根目錄了,這里選擇默認:c:\cygwin;用戶選擇第一項:本系統的所有有效用戶。cygwin安裝點擊【下一步】選擇本地軟體包目錄,該工具會自動記住並將以後下載的所有軟體包都會放到這里指定的目錄。我這里選擇:C:\Users\Administrator\Desktop\1,如果選擇不存在目錄,就好提示是否創建目錄選Yes就OK。cygwin安裝點擊【下一步】選擇您的網路連接,我這里使用的是代理伺服器上網,所以我選擇第二項:使用IE瀏覽器代理設置。經測試選擇第三項輸入代理伺服器地址和埠,不能正常訪問網路,原因不明。cygwin安裝點擊【下一步】,等待下載鏡像站點列表,下載完成後出現選擇下載軟體包的站點。如圖:cygwin安裝根據自己的情況選擇合適的下載地址,我這里選擇了國內的163站點,點擊【下一步】,這個工具就會自動下載軟體包信息列表下載完成後進入安裝軟體包選擇頁,如下圖:cygwin安裝這一步比較重要,以下軟體包要確保被安裝:cygwin安裝註:這個軟體包列表由前到後包括:分類、當前安裝版本,最新版本,安裝可執行文件?,安裝源代碼文件?,大小,包名稱和說明。基礎軟體包:Base及其下面的所有軟體包,操作方法:點擊Base後面的Default為Install。SSH相關軟體包:Net下的OpenSSL和和OpenSSH,用於Hadoop需要的SSH訪問,操作方法:點擊【+】展開Net節點,點擊各個軟體包前的最新版本號列的Keep為版本號即為選中安裝。其他軟體包根據自己的需要選中是否安裝即可,我這里還選中了Emacs、VIM、Perl、Python、Ruby、Science、subversion等常用工具。選擇完軟體包點擊【下一步】,進入自動下載與安裝,如下圖:cygwin安裝點擊【下一步】進入向導結束頁,勾選創建桌面快捷方式點擊【完成即可】,如圖:cygwin安裝到這里,您已經完成了模擬Linux環境的安裝,左鍵雙擊桌面上的圖標打開這個模擬Linux的終端窗口輸入幾個常用Linux命令體驗下這個模擬的Linux系統吧,除了可以執行Linux常用命令外,還可以執行Windows的命令例如:net start service_name等。體驗完成後繼續下面的配置工作。1.3配置Cygwin的SSH服務Cygwin安裝完成後,需要先配置SSH服務,以滿足Hadoop提出的SSH無密碼登入,過程如下:打開模擬Linux的終端,進入Linux環境執行命令:ssh-host-config如圖:Hadoop安裝第一次詢問:「Should privilege separation be used? (yes/no)」,輸入no回車。第二次詢問:「Do you want to install sshd a service?」,輸入yes回車。第三次提示:「Enter the value of CYGWIN for the demon: []」,直接回車。第四次詢問:「Do you want to use a different name? (yes/no)」,輸入no回車。第五次提示:「Please enter the password for user 『cyg_server』:」,輸入密碼回車,在此輸入密碼回車。最後提示配置完成。1.4啟動SSH服務在Linux終端或Windows命令行執行net start sshd或命令cygrunsrv –S sshd啟動SSH服務。測試ssh登入本機:在終端執行命令:ssh localhost提示輸入密碼:輸入密碼回車,如下圖:Hadoop安裝 1.5配置SSH免密碼登入在終端執行命令:ssh-keygen -t dsa -P 」 -f ~/.ssh/id_dsa生成秘鑰。執行命令:cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys生成認證文件。執行命令:ssh localhost測試是否無需輸入密碼即可登入。Hadoop安裝1.6Cygwin使用積累1.6.1在cygwin里訪問Windows盤cd /cygdrive/c1.6.2整合cygwin命令到Windows中假設cygwin安裝在d:/develop/cygwin,則將d:/develop/cygwin/bin添加到系統變數PATH中(最好加在windows前面,這樣的話,有些相同的命令的話,是先執行cygwin的命令,而不是windows命令,比如find)。添加完後就可以直接在cmd.exe下面執行tar czvf xxx.tgz ./基本上所有的命令都可以用了,包括ls,more,less,find,grep等。1.6.3使用TGZ備份將cygwin的BIN加入到PATH建一個BAT文件:@echo offd:cd d:/website/8thmanagetar czvf 8thmanage.tgz 8thmanage1.6.4Windows使用SHELL腳本將cygwin的BIN加入到PATH在$CYGWIN的目錄/var/下面建一腳本t.sh,注意,t.sh裡面的路徑,都是相對於$CYGWIN的,裡面需要訪問C盤的,請用/cygdrive/c/在Windows下執行:d:/cygwin/bin/bash d:/cygwin/var/t.sh(可以定期執行)1.6.5同步Windows系統用戶mkpasswd -l > /etc/passwdmkgroup -l > /etc/group如果有Domain的話,需要加上-d domainname1.6.6安裝系統服務cygrunsrv1.6.7cygwing下使用rsync安裝rsync組件進入cygwin,配置伺服器vi /etc/rsyncd.conf…screts file=/etc/tom.ipaddr.pas配置文件,參考我寫的另外一篇rsync的文章,注意:密碼文件許可權必須是0400chmod 0400 /etc/tom.ipaddr.pas啟動服務端rsync –daemon客戶端同步在客戶端的cygwin下面,運行rsync同步,具體命令,請參考另外一篇rsync的文章。1.6.8cygwin下使用SSHD需要安裝了cygrunsrc,openssh運行ssh-host-config -y一路回車,直到出現CYGWIN=時,輸入tty ntsec,再回車,(或者,增加一系統環境變數CUGWIN=nesec tty)已經安裝好SSHD服務到你的Windows服務中,可以直接在服務中啟動,關閉。(cygrunsrc -S sshd或者net start sshd)1.6.9中文顯示vi ~/.bashrc# 讓ls和dir命令顯示中文和顏色alias ls=』ls –show-control-chars –color』alias dir=』dir -N –color』# 設置為中文環境,使提示成為中文export LANG=」zh_CN.GBK」# 輸出為中文編碼export OUTPUT_CHARSET=」GBK」~/.inputrc為set completion-ignore-case onset meta-flag onset output-meta. onset convert-meta. offcygwin.bat腳本為:@echo offset MAKE_MODE=UNIX

⑽ Linux運行腳本,調用hadoop的Mapper,報錯Result Maps collection already contains value for

這個可能是程序有問題哦, 看下wo 的網名可以嗎?一定可以解決的啊!!

熱點內容
通過域名訪問內網 發布:2025-01-18 16:01:39 瀏覽:275
md5加密後的密碼是什麼意思 發布:2025-01-18 15:50:16 瀏覽:193
如何qq空間訪問許可權 發布:2025-01-18 15:49:30 瀏覽:532
matlab遺傳演算法約束 發布:2025-01-18 15:31:33 瀏覽:910
果凍java 發布:2025-01-18 15:25:59 瀏覽:696
電腦與時間伺服器同步間隔 發布:2025-01-18 15:21:28 瀏覽:55
蘋果手機apple登錄密碼在手機哪裡 發布:2025-01-18 15:13:43 瀏覽:381
吃雞去哪裡下手游安卓 發布:2025-01-18 15:10:59 瀏覽:669
東方財富dk指標源碼 發布:2025-01-18 14:45:53 瀏覽:436
陌陌登陸密碼是什麼 發布:2025-01-18 14:36:54 瀏覽:848