Python海量數據處理之_Hadoop(一)集群搭建

1. 說明

?數據處理時,可能會遇到數千萬以及上億條數據的情況。如果一次性處理所有數據,就會遇到內存不夠,計算時間太長等問題。上篇《Python海量數據處理之_單機優化》講述了單機的處理大數據的解決方案。下面將講述如何利用服務器集群處理大數據,這里使用的工具是Hadoop,內容太多,分為三部分介紹,本篇是第一部分集群搭建,后兩部分分別是原理和python調用。

2. Hadoop簡介

?如果有多臺用于數據計算的機器,可以使用Hadoop框架建立集群,統一分配布屬。Hadoop是由Apache基金會所開發的分布式系統基礎架構,最核心的設計是:HDFS和MapReduce。HDFS為數據提供了存儲,MapReduce為數據提供了計算,其中Mapper指的就是拆分處理,Reducer指的就是將結果合并。和單機一樣,核心也是拆分,處理,再合并。
?多臺機器同時處理數據,相對更復雜,需要考慮:數據共享,同步,沖突,資源分析,計算順序,以及主控宕機等等問題。

3. Hadoop安裝

?首先,需要配置起Hadoop環境,才能進行各種實驗。Hadoop有三種安裝方式:單機,偽分布式和分布式,前兩種都是在單機上安裝使用的。偽分布式即可以用單機實現,又可以理解分布式的原理,本文主要介紹偽分布式Hadoop的安裝。

1) 安裝Java

?Hadoop是java語言實現的,所以需要先安裝java和配置相關的環境變量,一般用apt-get安裝后環境就被自動配置了。

2) 創建hadoop用戶

?不一定非要創建hadoop用戶,因為考慮到有刪除ssh密碼等操作,為了機器安全性,這里創建了hadoop用戶。

$ sudo adduser hadoop
$ su hadoop # 之后的操作都在hadoop用戶下進行

3) 安裝配置ssh

?為了使本機能使用ssh登陸,需要安裝ssh服務端,并關掉 PAM認證,并設用戶密碼為空

$ sudo apt-get install -y openssh-server # 安裝ssh服務
$ sudo vim /etc/ssh/sshd_config # 將UsePAM設為no
$ sudo /etc/init.d/ssh start # 啟動ssh服務,如果安裝時已自啟動,則配置后用restart重啟
$ ssh localhost # 連接后用exit接出,此時用戶目錄下生成.ssh目錄
$ cd ~/.ssh # 以下幾步是為了設置當前用戶無密碼登陸
$ ssh-keygen -t rsa # 設置密碼為空,即直接回車
$ cat ./id_rsa.pub >> ./authorized_keys 

4) 下載Hadoop

?http://www.apache.org/dyn/closer.cgi/hadoop/common/
?建議下載2.6或2.7的版本,不同版本配置文件不同,而2.7前后的版本教程較多,不用下源碼,下載bin包即可。

$ cd /home/hadoop/ # 安裝在哪里都行,但需要注意在配置文件中指定目錄
$ tar xvzf  hadoop-2.7.5.tar.gz
$ ln –s hadoop-2.7.5 hadoop # 方便以后更換版本
$ vi ~/.bashrc 

#加下以入內容(在/etc/profile中設置也行)。設置后,用source ./barshrc讓它立即生效。

export HADOOP_PREFIX="/home/hadoop/hadoop"  # 具體根據安裝目錄設置
export YARN_CONF_DIR="/home/hadoop/hadoop"  
export HADOOP_COMMON_LIB_NATIVE_DIR="$HADOOP_PREFIX/lib/native"  
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"  
export PATH=$PATH:$HADOOP_PREFIX/bin

5) 配置core-site.xml

$  vi hadoop/etc/hadoop/core-site.xml

在configure中加入如下內容(具體根據安裝目錄設置)
<configuration>
        <property>
             <name>hadoop.tmp.dir</name>
             <value>file:/home/hadoop/hadoop/tmp</value>
             <description>Abase for other temporary directories.</description>
        </property>
        <property>
             <name>fs.defaultFS</name>
             <value>hdfs://localhost:9000</value>
        </property>
</configuration>

6) 配置hdfs-site.xml

$  vi hadoop/etc/hadoop/hdfs-site.xml
在configure中加入如下內容

<configuration>
        <property>
             <name>dfs.replication</name>
             <value>1</value>
        </property>
        <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/home/hadoop/hadoop/tmp/dfs/name</value>
        </property>
        <property>
             <name>dfs.datanode.data.dir</name>
             <value>file:/home/hadoop/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

7) 配置mapered-site.xml

$ cp ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
$ vi ./etc/hadoop/mapred-site.xml
在configure中加入如下內容

<configuration>
        <property>
             <name>mapreduce.framework.name</name>
             <value>yarn</value>
        </property>
</configuration>

8) 配置yarn-site.xml

$ vi ./etc/hadoop/yarn-site.xml

<configuration>
        <property>
             <name>yarn.nodemanager.aux-services</name>
             <value>mapreduce_shuffle</value>
            </property>
</configuration>

9) 格式化namenode

$ hadoop namenode -format

?如果顯示Exiting with status 0,則創建成功

10) 在etc/hadoop/*-env.sh中設置JAVA_HOME

(根據自己機器的配置)

export JAVA_HOME=/usr/lib/jvm/java-1.9.0-openjdk-amd64/

11) 啟動hdfs

$ hadoop/sbin/start-dfs.sh

12) 看當前服務啟動狀態

$ jps

?成功啟動后還可以通過訪問http://localhost:50070,來查看狀態。

13) 啟動所有服務

./sbin/start-all.sh

?成功啟動后還可以通過訪問http://localhost:8088/cluster,來查看狀態。

14) 問題及解決

?我在執行start-dfs.sh時,報錯util.NativeCodeLoader,意思是調用內部庫時出錯,內部庫指的是用JNI調的C庫,解決方法是用ldd看看so庫鏈接是否正常,如果so庫與當前系統不能匹配,則需要重編源碼。還有一種情況,就是環境變量沒設對,我這邊設置了兩個環境變量:

$ export JAVA_LIBRARY_PATH=/home/hadoop/hadoop/lib/native/
$ export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

之后問題得以解決,根本原因是不同Hadoop版本環境變量名有差別,所以跟著文檔做常會出現各種問題,而文檔中指定的版本很可能不是主流版本,已經無法下載了。解決方法是跟進腳本,定位具體問題。

4. 編譯Hadoop源碼

?如果上述可工作正常,則無需要編譯源碼。有些情況下,環境與二進制版本不一致,則需要下載源碼編譯,我下載的也是2.7.5版本的src包。重編時坑也很多。
源碼包解壓后,目錄中有BUILDING.txt文件,執行其中所有apt-get相關命令。然后編譯:

$ mvn package -Pdist,native -DskipTests –Dtar

mvn是編譯工具maven,編譯過程非常慢,編出將近4G。編譯后生成文件為hadoop-dist/target/hadoop-2.7.5.tar.gz,

在編譯過程中遇到三種報錯:
?一種報錯是“protoc failure”,用apt-get安裝該包后又報錯版本不對,最后編譯了protobuf-2.5.0包(注意install后要ldconfig,否則還是找不到),得以解決。
?另一個報錯是“No plugin descriptor found at META-INF”,我從csdn下載了一個,改了版本號就能用了。
?還有一種報錯是連不上marven服務器,于是在設置文件/etc/maven/settings.xml中加入了國內的鏡像地址。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容