當前位置:首頁 » 網頁前端 » hadoop腳本使用教程
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hadoop腳本使用教程

發布時間: 2022-11-21 07:53:55

⑴ hadoop集群上怎樣執行shell腳本

首先 chmod +x 腳本名,賦予執行許可權,然後進入腳本所在目錄 ./腳本名 就可以執行了

⑵ Hadoop常見問題解答

Hadoop常見問題解答
(1)Hadoop適不適用於電子政務?為什麼?
電子政務是利用互聯網技術實現政府組織結構和工作流程的重組優化,建成一個精簡、高效、廉潔、公平的政府運作信息服務平台。因此電子政務肯定會產生相關的大量數據以及相應的計算需求,而這兩種需求涉及的數據和計算達到一定規模時傳統的系統架構將不能滿足,就需要藉助海量數據處理平台,例如Hadoop技術,因此可以利用Hadoop技術來構建電子政務雲平台。

總結一下,任何系統沒有絕對的適合和不適合,只有當需求出現時才可以決定,在一個非常小的電子政務系統上如果沒有打數據處理以及計算分析需求時就不需要hadoop這樣的技術,而實際上,商用的電子政務平台往往涉及到大規模的數據和大量的計算分析處理需求,因此就需要Hadoop這樣的技術來解決。(2)hadoop對於實時在線處理有優勢嗎?
直接使用hadoop進行實時處理時沒有優勢的,因為Hadoop主要解決的是海量批處理作業計算問題,但是可以使用基於Hadoop的分布式NOsql系統HBase系統以及相關實時處理系統:
1. 基於Hadoop的HBase可以做到實時處理以及相關需求的實時計算,主要解決海量<key,value>相關查詢計算等需求。
2. 可以考慮Spark計算,Spark是基於共現內存RDD的系統,比Hadoop更快,時候迭代式計算,例如數據挖掘,機器學習演算法等。
3. 還有Storm,Storm是一個免費開源、分布式、高容錯的實時計算系統,Storm經常用於在實時分析、在線機器學習、持續計算、分布式遠程調用和ETL等領域。
4. 考慮S4, S4是Yahoo!在2010年10月開源的一套通用、分布式、可擴展、部分容錯、具備可插拔功能的平台。這套平台主要是為了方便開發者開發處理流式數據(continuous unbounded streams of data)的應用。
你可以依據實際的需求來選擇合適的系統。
(3)Hadoop存儲海量數據沒有問題,但是如何能夠做到海量數據的實時檢索?
1,可以結合開源的搜索引擎Apache Lucene,Solr 或ElasticSearch
2,海量數據的實時檢索可以考慮HBase,建議可以使用hadoop將數據構建成以查詢key為鍵的數據集,然後將<key, value>集合寫入Hbase表中,Hbase會自動以key為鍵進行索引,在數十億甚至以上的級別下,查詢key的value響應時間也估計再10毫秒內。
如果檢索條件是多個組合的情況下,可以適當的設計多個hbase表格,這樣的檢索也是很快的,同時Hbase也是支持二級索引。在符合條件下查詢,Hbase也是支持MapRece的,如果對響應時間要求不高的情況下,可以考慮將hive和Hbase系統結合來使用。
如果數據量不是很大的情況下也可以考慮支持類似SQL的NOSLQ系統。
(4)能不能給點hadoop的學習方法以及學習規劃,hadoop系統有點龐大,感覺無從學起?
首先搞清楚什麼是hadoop以及hadoop可以用來做什麼?
然後,可以從最經典的詞頻統計程序開始,初步了解MapRece的基本思路和處理數據的方式。
接著,就可以正式學習hadoop的基本原理,包括HDFS和MapRece,先從整體,宏觀核心原理看,先別看源碼級別。
進一步,就可以深入HDFS和MapRece和模塊細節,這個時候可以結合源碼深入理解,以及實現機制。
最後就是需要實戰了,可以結合自己的項目或者相關需求來完成一些hadoop相關應用。
(5) 大的文件拆分成很多小的文件後,怎樣用Hadoop進行高效的處理這些小文件?以及怎樣讓各個節點盡可能的負載均衡?
1. 怎樣用Hadoop進行高效的處理這些小文件?
你這個問題提的很好,hadoop在處理大規模數據時是很高效的,但是處理大量的小文件時就會因為系統資源開銷過大而導致效率較低,針對這樣的問題,可以將小文件打包為大文件,例如使用SequcenFile文件格式,例如以文件簽名為key,文件內容本身為value寫成SequcenFile文件的一條記錄,這樣多個小文件就可以通過SequcenFile文件格式變為一個大文件,之前的每個小文件都會映射為SequcenFile文件的一條記錄。
2. 怎樣讓各個節點盡可能的負載均衡?
在hadoop集群中負載均衡是非常關鍵的,這種情況的導致往往是因為用戶的數據分布的並不均衡,而計算資源槽位數確實均衡分布在每個節點,這樣在作業運行時非本地任務會有大量的數據傳輸,從而導致集群負載不均衡,因此解決不均衡的要點就是將用戶的數據分布均衡,可以使用hadoop內置的balancer腳本命令。
對於因為資源調度導致的不均衡則需要考慮具體的調度演算法和作業分配機制。
(6)c/c++ 程序員如何入門Hadoop到深入了解,並在Linux伺服器上布置運用,有沒有方向性的指導?
針對C/C++用戶,Hadoop提供了hadoop streaming介面和pipes介面,hadoop streaming介面以標准輸入和標准輸出作為用戶程序和hadoop框架交互的中間件,pipes這是專門針對C/C++語言的介面,以socket作為同學中介。
從使用上建議從streaming入手,pipes相比streaming問題比較多,而且pipes調試不容易。
(7)現在企業中使用Hadoop版本主要是1.x還是2.x?
目前網路,騰訊,阿里為主的互聯網公司都是以hadoop 1.X為基準版本的,當然每個公司都會進行自定義的二次開發以滿足不同的集群需求。
2.X在網路內部還沒有正式使用,還是以1.X為主,不過網路針對1.X的問題開發了HCE系統(Hadoop C++ Expand系統)
補充,Hadoop2.x在其他公司應用的很多,比如京東
(8)以後想從事大數據方面工作,演算法要掌握到什麼程度,演算法佔主要部分嗎?
首先,如果要從事大數據相關領域的話,hadoop是作為工具來使用的,首先需要掌握使用方法。可以不用深入到hadoop源碼級別細節。
然後就是對演算法的理解,往往需要設計到數據挖掘演算法的分布式實現,而演算法本身你還是需要理解的,例如常用的k-means聚類等。
(9)現在spark,storm越來越火,谷歌也發布了Cloud Dataflow,是不是Hadoop以後主要應該學習hdfs和yarn,而且以後Hadoop程序員的主要做的就是把這些東西打包,只提供介面讓普通的程序員也能使用,就像Cloudera和Google一樣?
這位同學,你多慮了,hadoop和spark, strom是解決不同的問題,不存在哪個好那個壞,要學習Hadoop還是以主流的hadoop-1.X為版本,2.X最主要的就是多了yarn框架,很好理解的。
如果你是hadoop本身研發建議都看,如果你是hadoop應用相關研發,看主流的1.X就行,我的書《Hadoop核心技術》是以主流的1.X為版本講解的,有興趣可以看看。
(10)小白問一句,大數據處理都是伺服器上安裝相關軟體嗎,對程序有什麼影響呢,集群、大數據是屬於運維的工作內容還是攻城獅的呢?
傳統的程序只能運行在單機上,而大數據處理這往往使用分布式編程框架編寫,例如hadoop maprece,只能運行在hadoop集群平台上。
運維的責任:保證集群,機器的穩定性和可靠性
hadoop系統本身研發:提高Hadoop集群的性能,增加新功能。
大數據應用:把hadoop作為工具,去實現海量數據處理或者相關需求。
(11)學習hadoop該怎麼入手呢?應該做一些什麼樣的項目呢?
可以參考我上面的幾個回答,可以從最簡單詞頻統計程序入手,然後學習理解HDFS和MapRece的基本原理和核心機制,如果僅僅把Hadoop作為一個工具來使用的話這樣就可以了,最重要的就是實戰了,可以嘗試使用Hadoop處理一些數據,例如做日誌分析,數據統計,排序,倒排索引等典型應用。
(12)100個以上hadoop節點,一般怎麼開發,運維?任務很多的情況下任務資源怎麼分配,任務執行順序是定時腳本還是別的什麼方式控制?
1. 首先大數據的應用開發和hadoop集群的規模是沒有關系,你指的是集群的搭建和運維嗎,對於商用的hadoop系統來說涉及到很多東西,建議參考《hadoop核心技術》實戰篇 「第10章Hadoop集群搭建 」 章節。
2. 任務的分配是有hadoop的調度器的調度策略決定的,默認為FIFO調度,商業集群一般使用多隊列多用戶調度器,可以參考參考《hadoop核心技術》高級篇 「第9章Hadoop作業調度系統」 章節。
3. 任務的執行順序是有用戶控制的,你自然可以定時啟動,也可以手動啟動。
(13)基於Hadoop做開發,是否必須會使用Java,使用其他開發語言是否無法更好的融入整個Hadoop的開發體系?
基於Hadoop做開發可以使用任何語言,因為hadoop提高了streaming編程框架和pipes編程介面,streaming框架下用戶可以使用任何可以操作標准輸入輸出的計算機語言來開發hadoop應用。
(14)在rece階段老是卡在最後階段很長時間,在網上查的說是有可能是數據傾斜,我想問這個有啥解決方法嗎?
1,你這個就是數據傾斜啊 好多數據都集中在一個rece里 其他rece里分配的數據比較少 默認情況下決定哪些數據分配到哪個rece是由rece個數和partiiton分區決定的 默認是對key進行hash運算 一般情況下用mapreuce傾斜很少 除非你用的HIVE
2,rece分為3個子階段:shuffle、sort和rece,如果rece整個過程耗時較長,建議先看一下監控界面是卡在哪個階段,如果是卡在shuffle階段往往是網路阻塞問題,還有就是某rece數據量太大,也就是你所說的數據傾斜問題,這種問題往往因為某個key的value太多,解決方法是:第一,默認的partiiton可能不適合你的需求,你可以自定義partiiton;第二就是在map端截斷,盡量讓達到每個rece端的數據分布均勻。
(15)非大數據的項目能否用hadoop?
非大數據項目是否可以用Hadoop的關鍵問題在於是否有海量數據的存儲,計算,以及分析挖掘等需求,如果現有系統已經很好滿足當前需求那麼就沒有必要使用Hadoop,沒有必要使用並不意味這不能使用Hadoop,很多傳統系統能做的Hadoop也是可以做的,例如使用HDFS來代替LINUX NFS,使用MapRece來代替單伺服器的統計分析相關任務,使用Hbase代替Mysql等關系資料庫等,在數據量不大的情況下通常Hadoop集群肯定比傳統系統消耗更多的資源。
(16)hadoop maprece 和第三方資源管理調度系統如何集成?
Hadoop的調度器設計的一個原則就是可插拔式調度器框架,因此是很容易和第三方調度器集成的,例如公平調度器FairScheler和容量調度器CapacityScheler,並配置mapred-site.xml的maprece.jobtracker.taskscheler以及調度器本身的配置參數,例如公平調度器控制參數則需要編輯fair- scheler.xml進行配置,具體可以參考我的新書《Hadoop核心技術》實戰篇第十章節10.11的集群搭建實例中的10.10.9 配置第三方調度器,同時可以進一步深入學習第9章 Hadoop作業調度系統,在這一章中會詳細介紹各種第三方調度器以及使用配置方法。

⑶ Hadoop 請教學習順序

雖然從事Hadoop方面工作,但是不是高手,畢竟只有一年經歷而已。
分享下本人的學習經歷吧。
了解Hadoop運行機制,可以學習Hadoop權威指南或者Hadoop實戰;
了解Hadoop運行流程,看懂HADOOP_HOME/bin/下面主要執行腳本。
查看core-default.xml/hdfs-default.xml/mapred-default.xml等默認配置
文件,及core-site.xml/hdfs-site.xml/mapred-site.xml等相關文件,學會
如何進行參數優化,以及掌握如何配置讀取壓縮文件,默認的gzip,及
自定義的lzo,學會自定義Combiner/Patitioner等,掌握各種輸入輸出
格式的區別及應用場景,學會自定義輸入輸出格式,其次學習MapRece演算法,
比如In-Map-Combing,相對頻度計算,Pairs演算法,Strips演算法等。掌握好
maprece編程。
在這其中,需要好好閱讀HADOOP_HOME/src/目錄下的Hadoop源碼,
這個就是開源最大的好處。說的比較亂,但是就湊合著借鑒下吧

⑷ 大數據:Hadoop入門

什麼是大數據:
(1.)大數據是指在一定時間內無法用常規軟體對其內容進行抓取,管理和處理的數據集合,簡而言之就是數據量非常大,大到無法用常規工具進行處理,如關系型資料庫,數據倉庫等。這里「大」是一個什麼量級呢?如在阿里巴巴每天處理數據達到20PB(即20971520GB).
2.大數據的特點:
(1.)體量巨大。按目前的發展趨勢來看,大數據的體量已經到達PB級甚至EB級。
(2.)大數據的數據類型多樣,以非結構化數據為主,如網路雜志,音頻,視屏,圖片,地理位置信息,交易數據,社交數據等。
(3.)價值密度低。有價值的數據僅佔到總數據的一小部分。比如一段視屏中,僅有幾秒的信息是有價值的。
(4.)產生和要求處理速度快。這是大數據區與傳統數據挖掘最顯著的特徵。
3.除此之外還有其他處理系統可以處理大數據。
Hadoop (開源)
Spark(開源)
Storm(開源)
MongoDB(開源)
IBM PureDate(商用)
Oracle Exadata(商用)
SAP Hana(商用)
Teradata AsterData(商用)
EMC GreenPlum(商用)
HP Vertica(商用)
註:這里我們只介紹Hadoop。
二:Hadoop體系結構
Hadoop來源:
Hadoop源於Google在2003到2004年公布的關於GFS(Google File System),MapRece和BigTable的三篇論文,創始人Doug Cutting。Hadoop現在是Apache基金會頂級項目,「
Hadoop」一個虛構的名字。由Doug Cutting的孩子為其黃色玩具大象所命名。
Hadoop的核心:
(1.)HDFS和MapRece是Hadoop的兩大核心。通過HDFS來實現對分布式儲存的底層支持,達到高速並行讀寫與大容量的儲存擴展。
(2.)通過MapRece實現對分布式任務進行處理程序支持,保證高速分區處理數據。
3.Hadoop子項目:
(1.)HDFS:分布式文件系統,整個Hadoop體系的基石。
(2.)MapRece/YARN:並行編程模型。YARN是第二代的MapRece框架,從Hadoop 0.23.01版本後,MapRece被重構,通常也稱為MapRece V2,老MapRece也稱為 MapRece V1。
(3.)Hive:建立在Hadoop上的數據倉庫,提供類似SQL語音的查詢方式,查詢Hadoop中的數據,
(5.)HBase:全稱Hadoop Database,Hadoop的分布式的,面向列的資料庫,來源於Google的關於BigTable的論文,主要用於隨機訪問,實時讀寫的大數據。
(6.)ZooKeeper:是一個為分布式應用所設計的協調服務,主要為用戶提供同步,配置管理,分組和命名等服務,減輕分布式應用程序所承擔的協調任務。
還有其它特別多其它項目這里不做一一解釋了。
三:安裝Hadoop運行環境
用戶創建:
(1.)創建Hadoop用戶組,輸入命令:
groupadd hadoop
(2.)創建hser用戶,輸入命令:
useradd –p hadoop hser
(3.)設置hser的密碼,輸入命令:
passwd hser
按提示輸入兩次密碼
(4.)為hser用戶添加許可權,輸入命令:
#修改許可權
chmod 777 /etc/sudoers
#編輯sudoers
Gedit /etc/sudoers
#還原默認許可權
chmod 440 /etc/sudoers
先修改sudoers 文件許可權,並在文本編輯窗口中查找到行「root ALL=(ALL)」,緊跟後面更新加行「hser ALL=(ALL) ALL」,將hser添加到sudoers。添加完成後切記還原默認許可權,否則系統將不允許使用sudo命令。
(5.)設置好後重啟虛擬機,輸入命令:
Sudo reboot
重啟後切換到hser用戶登錄
安裝JDK
(1.)下載jdk-7u67-linux-x64.rpm,並進入下載目錄。
(2.)運行安裝命令:
Sudo rpm –ivh jdk-7u67-linux-x64.rpm
完成後查看安裝路徑,輸入命令:
Rpm –qa jdk –l
記住該路徑,
(3.)配置環境變數,輸入命令:
Sudo gedit /etc/profile
打開profile文件在文件最下面加入如下內容
export JAVA_HOME=/usr/java/jdk.7.0.67
export CLASSPATH=$ JAVA_HOME/lib:$ CLASSPATH
export PATH=$ JAVA_HOME/bin:$PATH
保存後關閉文件,然後輸入命令使環境變數生效:
Source /etc/profile
(4.)驗證JDK,輸入命令:
Java –version
若出現正確的版本則安裝成功。
配置本機SSH免密碼登錄:
(1.)使用ssh-keygen 生成私鑰與公鑰文件,輸入命令:
ssh-keygen –t rsa
(2.)私鑰留在本機,公鑰發給其它主機(現在是localhost)。輸入命令:
ssh--id localhost
(3.)使用公鑰來登錄輸入命令:
ssh localhost
配置其它主機SSH免密登錄
(1.)克隆兩次。在VMware左側欄中選中虛擬機右擊,在彈出的快捷鍵菜單中選中管理---克隆命令。在克隆類型時選中「創建完整克隆」,單擊「下一步」,按鈕直到完成。
(2.)分別啟動並進入三台虛擬機,使用ifconfig查詢個主機IP地址。
(3.)修改每台主機的hostname及hosts文件。
步驟1:修改hostname,分別在各主機中輸入命令。
Sudo gedit /etc/sysconfig/network
步驟2:修改hosts文件:
sudo gedit /etc/hosts
步驟3:修改三台虛擬機的IP
第一台對應node1虛擬機的IP:192.168.1.130
第二台對應node2虛擬機的IP:192.168.1.131
第三台對應node3虛擬機的IP:192.168.1.132
(4.)由於已經在node1上生成過密鑰對,所有現在只要在node1上輸入命令:
ssh--id node2
ssh--id node3
這樣就可以將node1的公鑰發布到node2,node3。
(5.)測試SSH,在node1上輸入命令:
ssh node2
#退出登錄
exit
ssh node3
exit
四:Hadoop完全分布式安裝
1. Hadoop有三種運行方式:
(1.)單機模式:無須配置,Hadoop被視為一個非分布式模式運行的獨立Java進程
(2.)偽分布式:只有一個節點的集群,這個節點即是Master(主節點,主伺服器)也是Slave(從節點,從伺服器),可在此單節點上以不同的java進程模擬分布式中的各類節點
(3.)完全分布式:對於Hadoop,不同的系統會有不同的節點劃分方式。
2.安裝Hadoop
(1.)獲取Hadoop壓縮包hadoop-2.6.0.tar.gz,下載後可以使用VMWare Tools通過共享文件夾,或者使用Xftp工具傳到node1。進入node1 將壓縮包解壓到/home/hser目錄下,輸入命令: #進入HOME目錄即:「/home/hser」
cd ~
tar –zxvf hadoop-2.6.0.tar.gz
(2.)重命名hadoop輸入命令:
mv hadoop-2.6.0 hadoop
(3.)配置Hadoop環境變數,輸入命令:
Sudo gedit /etc/profile
將以下腳本加到profile內:
#hadoop
export HADOOP_HOME=/home/hser/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
保存關閉,最後輸入命令使配置生效
source /etc/profile
註:node2,和node3都要按照以上配置進行配置。
3.配置Hadoop
(1.)hadoop-env.sh文件用於指定JDK路徑。輸入命令:
[hser@node1 ~]$ cd ~/hadoop/etc/hadoop
[hser@node1 hadoop]$ gedit hadoop-env.sh
然後增加如下內容指定jDK路徑。
export JAVA_HOME=/usr/java/jdk1.7.0_67
(2.)打開指定JDK路徑,輸入命令:
export JAVA_HOME=/usr/java/jdk1.7.0_67
(4.)core-site.xml:該文件是Hadoop全局配置,打開並在元素中增加配置屬性如下:

fs.defaultFs hdfs://node1:9000 hadoop.tmp.dir file:/home/hser/hadoop/tmp 這里給出了兩個常用的配置屬性,fs.defaultFS表示客戶端連接HDFS時,默認路徑前綴,9000是HDFS工作的埠。Hadoop.tmp.dir如不指定會保存到系統的默認臨時文件目錄/tmp中。 (5.)hdfs-site.xml:該文件是hdfs的配置。打開並在元素中增加配置屬性。 (6.)mapred-site.xml:該文件是MapRece的配置,可從模板文件mapred-site.xml.template中復制打開並在元素中增加配置。 (7.)yarn-site.xml:如果在mapred-site.xml配置了使用YARN框架,那麼YARN框架就使用此文件中的配置,打開並在元素中增加配置屬性。 (8.)復制這七個命令到node2,node3。輸入命令如下: scp –r /home/hser/hadoop/etc/hadoop/ hser@node2:/home/hser/hadoop/etc/ scp –r /home/hser/hadoop/etc/hadoop/ hser@node3:/home/hser/hadoop/etc/ 4.驗證: 下面驗證hadoop是否正確 (1.)在Master主機(node1)上格式化NameNode。輸入命令: [hser@node1 ~]$ cd ~/hadoop [hser@node1 hadoop]$ bin/hdfs namenode –format (2)關閉node1,node2 ,node3,系統防火牆並重啟虛擬機。輸入命令: service iptables stop sudo chkconfig iptables off reboot (3.)輸入以下啟動HDFS: [hser@node1 ~]$ cd ~/hadoop (4.)啟動所有 [hser@node1 hadoop]$ sbin/start-all.sh (5.)查看集群狀態: [hser@node1 hadoop]$ bin/hdfs dfsadmin –report (6.)在瀏覽器中查看hdfs運行狀態,網址:http://node1:50070 (7.)停止Hadoop。輸入命令: [hser@node1 hadoop]$ sbin/stop-all.sh 五:Hadoop相關的shell操作 (1.)在操作系統中/home/hser/file目錄下創建file1.txt,file2.txt可使用圖形界面創建。 file1.txt輸入內容: Hello World hi HADOOP file2.txt輸入內容 Hello World hi CHIAN (2.)啟動hdfs後創建目錄/input2 [hser@node1 hadoop]$ bin/hadoop fs –mkdir /input2 (3.)將file1.txt.file2.txt保存到hdfs中: [hser@node1 hadoop]$ bin/hadoop fs –put -/file/file*.txt /input2/ (4.)[hser@node1 hadoop]$ bin/hadoop fs –ls /input2

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

我們將編寫一個簡單的 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會幫我們辦好其他事。這是真的,別不相信!

⑹ 如何使用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集群的狀態

使用腳本提交 1.使用spark腳本提交到yarn,首先需要將spark所在的主機和hadoop集群之間hosts相互配置(也就是把spark主機的ip和主機名配置到hadoop所有節點的/etc/hosts裡面,再把集群所有節點的ip和主機名配置到spark所在主機的/etc/hosts裡面)。 2.然後需要把hadoop目錄etc/hadoop下面的*-sit.xml復制到${SPARK_HOME}的conf下面. 3.確保hadoop集群配置了 HADOOP_CONF_DIR or YARN_CONF_DIR 1.yarn-standalone方式提交到yarn 在${SPARK_HOME}下面執行: SPARK_JAR=./assembly/target/scala-2.10.4/spark-assembly-0.9.0-incubating-hadoop2.2.0.jar \ ./bin/spark-class org.apache.spark.deploy.yarn.Client \ --jar ./examples/target/scala-2.10/spark-examples_2.10-assembly-0.9.0-incubating.jar \ --class org.apache.spark.examples.SparkPi \ --args yarn-standalone \ --num-workers 3 \ --master-memory 2g \ --worker-memory 2g \ --worker-cores 1 復制代碼 2. yarn-client 方式提交到yarn 在${SPARK_HOME}下面執行: SPARK_JAR=./assembly/target/scala...

⑻ cloudera 安裝hadoop後,怎樣啟動

你看的教程是舊的,新版的hadoop啟動腳本放在sbin下。start-all.sh已經逐漸被廢棄,採用新的啟動腳本:
sbin/hadoop-daemon.sh --script hdfs start datanodesbin/hadoop-daemon.sh --script hdfs start namenodesbin/yarn-daemon.sh start resourcemanagersbin/yarn-daemon.sh start proxyserversbin/mr-jobhistory-daemon.sh start historyserver【注意1】.不要隨意執行上述命令,需要你規劃好那幾個節點是namenode, 哪些節點是datanode, 哪個節點是resourcemanager, proxyserver, 以及historyserver
【注意2】.sbin/hadoop-daemon.sh --script hdfs start datanode 執行後只能只能啟動當前節點;
sbin/hadoop-daemons.sh --script hdfs start datanode可以啟動etc/hadoop/slaves中指定的datanode
【注意3】. 最新版本(hadoop2.2.0)的啟動腳本libexec/hadoop-config.sh有bug, 若想用
sbin/hadoop-daemons.sh --hosts your_host_files --script hdfs start datanode啟動節點,注意修改libexec/hadoop-config.sh第98行為:
98 elif [ "--hostnames" = "$1" ]同時要小心--hosts your_host_files option, 用戶指定的your_host_files一定放在etc/hadoop/下面,但是啟動時只指定該文件名,不包含任何路徑名,這也是該啟動腳本的一個缺陷。
【注意4】. 也可以採用
sbin/hadoop-daemons.sh --hostnames your_host_name --script hdfs start datanode啟動某個節點

⑼ 不同的hadoop,啟動腳本一樣么

你看的教程是舊的,新版的hadoop啟動腳本放在sbin下。start-all.sh已經逐漸被廢棄,採用新的啟動腳本: sbin/hadoop-daemon.sh --script hdfs start datanodesbin/hadoop-daemon.sh --script hdfs start namenodesbin/yarn-daemon.sh start

⑽ 如何配置Hadoop環境

資源下載

1、JDK下載:下載鏈接
2、hadoop:下載鏈接
3、下載完成後驗證一下下載,將計算的MD5值與官網的進行對比已驗證安裝包的准確性:

md5sum ./hadoop-2.6.*.tar.gz | tr "a-z" "A-Z" # 計算md5值,並轉化為大寫,方便比較1

一、創建Hadoop用戶

創建hadoop用戶,並分配以用戶名為家目錄/home/hadoop,並將其加入到sudo用戶組,創建好用戶之後,以hadoop用戶登錄:

sudo useradd -m hadoop -s /bin/bash sudo adser hadoop sudo
sudo passwd hadoop # 設置hadoop用戶密碼123

二、安裝JDK、Hadoop及配置環境變數

安裝,解壓JDK到/usr/lib/java/路徑下,Hadoop到/usr/local/etc/hadoop/路徑下:

tar zxf ./hadoop-2.6.*.tar.gz
mv ./hadoop-2.6.* /usr/local/etc/hadoop # 將 /usr/local/etc/hadoop作為Hadoop的安裝路徑12

解壓完成之後,可驗證hadoop的可用性:

cd /usr/local/etc/hadoop
./bin/hadoop version # 查看hadoop的版本信息12

若在此處,會出現類似以下的錯誤信息,則很有可能是該安裝包有問題。

Error: Could not find or load main class org.apache.hadoop.util.VersionInfo1

配置環境,編輯「/etc/profile」文件,在其後添加如下信息:

export HADOOP_HOME=/usr/local/etc/hadoopexport JAVA_HOME=/usr/lib/java/jdk1.8.0_45export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin12345

使配置的變數生效:

source /etc/profile1

三、測試一下

在此我們可以運行一個簡單的官方Demo:

cd `echo $HADOOP_HOME` # 到hadoop安裝路徑
mkdir ./input
cp ./etc/hadoop/*.xml ./input
hadoop jar ./share/hadoop/maprece/hadoop-maprece-examples-*.jar grep ./input ./output 'dfs[a-z.]+'1234

輸出的結果應該會是:

1 dfsadmin 1

  • 這里有一點需要注意,該Example程序運行時不能已存在output目錄,否則或將無法執行!

  • 四、Hadoop的偽分布式環境搭建

    什麼是偽分布式?Hadoop 偽分布式模式是在一台機器上模擬Hadoop分布式,單機上的分布式並不是真正的分布式,而是使用線程模擬的分布式。分布式和偽分布式這兩種配置也很相似,唯一不同的地方是偽分布式是在一台機器上配置,也就是名位元組點(namenode)和數據節點(datanode)均是同一台機器。

    需要配置的文件有core-site.xml和hdfs-site.xml這兩個文件他們都位於${HADOOP_HOME}/etc/hadoop/文件夾下。
    其中core-site.xml:

  • 1 <?xml version="1.0" encoding="UTF-8"?>

  • 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

  • 3 <!--

  • 4 Licensed ...

  • -->

  • 18

  • 19 <configuration>

  • 20 <property>

  • 21 <name>hadoop.tmp.dir</name>

  • 22 <value>file:/home/hadoop/tmp</value>

  • 23 <description>Abase for other temporary directories.</description>

  • 24 </property>

  • 25 <property>

  • 26 <name>fs.default.name</name>

  • 27 <value>hdfs://master:9000</value>

  • 28 </property>

  • 29 </configuration> 1234567891011121314151617

  • 文件hdfs-site.xml的配置如下:

  • 1 <?xml version="1.0" encoding="UTF-8"?>

  • 2 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

  • 3 <!--

  • 4 Licensed ...

  • -->

  • 18

  • 19 <configuration>

  • 20 <property>

  • 21 <name>dfs.replication</name>

  • 22 <value>1</value>

  • 23 </property>

  • 24 <property>

  • 25 <name>dfs.namenode.name.dir</name>

  • 26 <value>file:/home/hadoop/tmp/dfs/name</value>

  • 27 </property>

  • 28 <property>

  • 29 <name>dfs.datanode.data.dir</name>

  • 30 <value>file:/home/hadoop/tmp/dfs/data</value>

  • 31 </property>

  • 32 </configuration>

  • 配置完成後,執行格式化命令,使HDFS將制定的目錄進行格式化:

  • hdfs namenode -format1

  • 若格式化成功,在臨近輸出的結尾部分可看到如下信息:

    如果發現並沒有出現如上信息,則使用刷新節點命令進行刷新:

  • hdfs dfsadmin -refreshNodes1

  • 八、HDFS集群實例測試

    依然是之前的那個示例,首先,創建一個數據源文件夾,並添加數據:

  • hdfs dfs -mkdir /input

  • hdfs dfs -put /usr/local/etc/hadoop/etc/hadoop/*.xml /input12

  • 運行maprece示例:

  • hadoop jar /usr/local/etc/hadoop/share/hadoop/maprece/hadoop-maprece-examples-*.jar grep /input /output 'dfs[a-z.]+'1

  • holding…