hadoop+spark偽分布式環境搭建
安裝須知
- 單機模式(standalone):
- 該模式是Hadoop的默認模式。這種模式在一台單機上運行,沒有分布式文件系統,而是直接讀寫本地操作系統的文件系統。
- 偽分布模式(Pseudo-Distributed Mode)
- 這種模式也是在一台單機上運行,但用不同的Java進程模仿分布式運行中的各類結點,其中所有的守護進程都運行在同一台機器上。
- 全分布模式(Fully Distributed Mode)
Hadoop守護進程運行在一個集群上,一台主機也可以運行完全分布式,需要安裝多個獨立的linux鏡像,配置不同IP。
需要的軟件及版本
軟件 |
版本 |
Java編程語言(JDK8) |
1.8.0_161 |
操作系統:LinuxCentOS |
6.4 |
操作系統:Windows |
Windows7/8/10 |
Apache Hadoop |
2.7.5 |
Apache Spark |
2.3.0 |
Apache Maven |
3.5.2 |
LinuxCentOS下:Eclipse IDE |
eclipse-jee-luna-SR2-linux-gtk |
Windows下:Eclipse IDE |
eclipse-jee-oxygen-2-win32-x86_64 |
安裝步驟大綱
(1).硬/軟件准備(虛擬一台主機)
(2).安裝linux操作系統
(3).准備網絡連接
(4).linux系統的一些配置
(5).安裝JDK
(6).安裝Hadoop
(7).安裝Scala+Spark
(8)安裝eclipse和maven
(9)運行wordcount例子程序
1.硬/軟件准備
- 第一步:硬/軟件准備(虛擬一台主機)
- (1)物理主機一台,CPU必須支持虛擬化功能(主流機大部分支持,如果被禁止可以在BIOS設置項里面設置開啟),內存最好4G及以上,安裝虛擬機的硬盤至少要留出20G空間。
- (2)上述所有需求版本軟件,由於我們的CentOS是32位,所以這些軟件最好下載32位的linux版本的壓縮包
- (3)SecureCRTPortable(遠程終端)
- VMware Workstation Pro(虛擬機)
- filezilla(windows與linux之間文件傳輸)
2.安裝linux操作系統
(1)安裝VM虛擬機,安裝完畢后打開准備好的CentOS鏡像(本教程以CentOS6.4為例子,6.x與7.x差別不大)
(2) 設置虛擬機的內存,處理器,硬盤和網絡適配器,本教程設置如下: 內存:2GB
處理器:處理器數量1,內核數量1(根據個人機器配置適當調整)
硬盤:20GB
重點 網絡適配器設置:自定義 VMnet8(NAT模式)
3.准備網絡連接
(1)設置VM虛擬機的”虛擬網卡”的信息
在VM選項中點擊 編輯(Edit)->虛擬網絡編輯器(Virtual NetWork Editor)->選擇Vmnet8 NAT模式 ,先配置子網IP,再配置子網掩碼,最后設置NAT設置 (NAT setting ),配置完點擊應用(apply),會在windows下的網絡和共享下適配器管理中產生一個VMnet8的虛擬網卡。
具體配置參考如下:
Subnet IP:192.168.2.0 (可調整)
子網掩碼:255.255.255.0
NAT setting->Gateway IP 改為:192.168.2.1(可調整)
(2)設置物理主機生成的虛擬網卡的信息
打開網絡和共享中心,網絡適配器,選擇新生成的VMnet8,設置IP地址 為192.168.2.2(也可以根據情況調整)
(3)開啟此虛擬機並選擇I have moved it,這樣將不會重新生成虛擬網卡, 原來對虛擬機的配置不會浪費
(也可以根據情況調整,但要保證物理主 機生成的虛擬網卡,虛擬主 機虛擬網卡,CentOS的IP在同一網段中,即都配置為192.168.2.X )
4.linux系統的一些配置
(1)登陸虛擬機,初始用戶名及密碼為hadoop(hadoop)
(2)查看ip地址,在控制台輸入命令ifconfig查看本機的IP
$ifconfig
(3)修改ip地址的方式
第一種:命令行輸入 $setup,進入偽圖形界面,輸入密碼hadoop進入並選擇NetWork configuration ,然后根據提示進行修改,具體如下
Static IP :192.168.2.100
gateWay IP:192.168.2.1
DNS Server:8.8.8.8
保存並退出 (推薦使用這種方式,簡單不容易出錯)
第二種:修改配置文件方式(需要簡單linux使用基礎,關於vi編輯器操作指令,不太推薦,了解就好)
輸入以下指令並修改IP,:wq保存並退出
$vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="static"
HWADDR="00:0C:29:3C:BF:E7"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
IPADDR=“192.168.2.100” (一般只修改這個就可以了)
NETMASK="255.255.255.0"
GATEWAY="192.168.2.1"
(4)重啟網絡設置,使新配置生效
進入管理員用戶重啟網絡設置,命令如下:
$su
輸入密碼:hadoop 進入root用戶,輸入以下指令,使新網絡配置生效
$service network restart
最后用ping命令檢測是否連通
$ping 192.168.2.2
$ping 192.168.2.1
$ping www.baidu.com(如果連接到網絡就能ping通)
Ctrl +Z(掛起進程)和Ctrl+C(強制中斷)都可終止程序運行
(5)讓普通用戶具備sudo執行權限(root用戶即管理員用戶具有某些配置文件的權限,一般用戶沒有,需要root用戶賦予,或者使用sudo命令)
切換到root用戶,輸入$su,然后輸入密碼,進入root用戶,然后輸入以下命令 $vi /etc/sudoers, 在打開的文件里,找到
##allow root to run any commands anywhere
root ALL=(ALL) ALL
在這個地方添加一行:hadoop ALL=(ALL) ALL
然后保存並退出(記得改完退出root用戶,不建議在root用戶下操作)
(6)修改系統配置文件,設置啟動項,讓虛擬機以后默認以命令行模式啟動,輸入以下命令:
$sudo vi /etc/inittab
修改id后面的數字,改為3,多用戶模式,默認虛擬機以多用戶命令行模式啟動
(7)利用軟件SecureCRT遠程終端連接虛擬機,點擊Quick Connect,輸入如下:
protocol:SSH2
hostname:虛擬機ip地址 192.168.2.100(舉例)
port:22
username:hadoop
選擇accept&save ,然后就可以在遠程終端操控虛擬機,比較方便快捷
用戶密碼都是hadoop
(8)修改默認主機名
進入hadoop用戶,然后輸入命令
$sudo vi /etc/sysconfig/network
然后修改HOSTNAME=bigdata(設置自己認為有意義的名字即可)
然后輸入命令$sudo hostname立刻生效
* 如果是分布式多節點最好設置為host01(序列)
(9)修改hosts文件,把IP地址與主機名對應(重要),輸入命令:
$sudo vi /etc/hosts
然后把自己的IP與主機名添加到最后一行,如
192.168.2.100 bigdata
保存並退出
可以$ping bigdata測試
至此,linux基本環境配置成功,接下來安裝軟件
5.安裝JDK
在linux系統下安裝一個軟件的步驟大致是這樣的:
一.把安裝包從本地主機上傳到linux主目錄下
二.解壓安裝包到指定路徑(建議自己在主目錄下定義)
三.根據軟件安裝位置修改系統環境變量,並使它生效
四.修改軟件相關配置文件,並測試是否成功
下面開始JDK的安裝:
(1).把安裝包從本地主機上傳到linux主目錄下
兩種方式
(a)利用軟件FileZilla(在本地與虛擬機之間傳文件的助手)
打開FileZilla,輸入主機名,用戶名,密碼和端口號
192.168.2.100 hadoop hadoop 22 然后快速連接(quick connect)
這時在左側顯示的是本地主機目錄,右側顯示的是虛擬主機目錄
只需要在左側找到安裝包拖動到右側目錄下,最好拖到根目錄下或者根目錄下指定的安裝包文件下(強烈推薦!!!)
(b)在遠程終端secureCRT中,使用快捷鍵Alt+p打開一個sftp,使用命令行把文件傳到虛擬機主目錄下,命令如下
put d:\xxx\yy\ll\jdk-7u65-linux-i585.tar.gz(自己的壓縮包路徑/名字)
(2).解壓安裝包到指定路徑
#創建文件夾
$mkdir /home/hadoop/app
#解壓
$tar –zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/app
(3).根據軟件安裝位置修改系統環境變量,並使它生效
#將java添加到環境變量中
$sudo vim /etc/profile
#在文件最后添加
export JAVA_HOME=/home/hadoop/app/jdk1.7.0-65
export PATH=$PATH:$JAVA_HOME/bin
#刷新配置
$source /etc/profile
(4).修改軟件相關配置文件,測試是否成功
最后在命令行輸入$java -version ,如果出現版本號既安裝成功
注意:具體路徑設置以自己的配置為准,不要死搬硬套,靈活設置
6.安裝Hadoop
(1)下面開始Hadoop的安裝:(參考JDK安裝過程)
先上傳hadoop的安裝包到服務器上去/home/hadoop/(兩種方式)
#解壓
tar -zxvf hadoop-2.4.1.tar.gz -C /home/hadoop/app
偽分布式需要修改5個配置文件
第一個:hadoop-env.sh $cd/home/hadoop/app/hadoop-2.4.1/etc/hadoop
$vim hadoop-env.sh
#新加第27行
export JAVA_HOME=/home/app/jdk1.7.0_65
第二個:core-site.xml
<!-- 指定HADOOP所使用的文件系統schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value> /home/hadoop/app/hadoop2.4.1/hdfs_tmp</value>
</property>
第三個:hdfs-site.xml
<!-- 指定HDFS副本的數量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
第四個:mapred-site.xml
<!-- 指定mr運行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第五個:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>bigdata</value>
</property>
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
(2)將hadoop添加到環境變量
$vim /etc/proflie
export JAVA_HOME=/home/app/java/jdk1.7.0_65
export HADOOP_HOME=/home/app/hadoop-2.4.1
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
刷新配置文件,使配置生效
$source /etc/profile
7.安裝Scala
根據jdk和hadoop的安裝經驗,按照四個步驟,完成安裝
下載Scala2.10.4,並按照前面的方式上傳到linux目錄下並解壓
添加環境變量
$sudo vi /etc/profile
#scala
export SCALA_HOME=/home/app/scala (根據具體情況修改)
export PATH=$SCALA_HOME/bin:$PATH
$source /etc/profile
#測試是否安裝成功
$scala -version
(2)安裝Spark(按照自己的安裝路徑和版本文件名等配置,不要照着敲)
根據jdk和hadoop的安裝經驗,按照四個步驟,完成安裝
按照前面的方式上傳到linux目錄下並解壓
添加環境變量
$sudo vi /etc/profile
#spark
export SPARK_HOME=/home/hadoop/app/spark-2.3.0-bin-hadoop2.4
export PATH=$SPARK_HOME/bin:$PATH
$source /etc/profile
#測試是否安裝成功
$spark-shell
#修改conf目錄下的spark-env.sh,添加環境變量
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/home/hadoop/app/spark
export SPARK_JAR=/home/hadoop/app/spark/lib/spark-assembly-2.3.0-hadoop2.4.0.jar
export PATH=$SPARK_HOME/bin:$PATH
8.安裝eclipse+maven
在linux系統下安裝一個軟件的步驟大致是這樣的:
一.把安裝包從本地主機上傳到linux主目錄下
二.解壓安裝包到指定路徑(建議自己在主目錄下定義)
三.根據軟件安裝位置修改系統環境變量,並使它生效
四.修改軟件相關配置文件,並測試是否成功
和安裝前面這些軟件一樣,安裝eclipse和maven同樣是把安裝包上傳到linux主目錄,然后解壓到指定文件夾,修改環境變量,把軟件安裝位置添加到環境變量,如果需要修改配置文件就修改,不需要就可以不用修改。最后測試是否成功,這兩個都不用修改配置文件。
9.運行wordcount例子
#格式化namenode(是對namenode進行初始化)
$hdfs namenode -format (hadoop namenode -format)
#進入hadoop
$cd /home/hadoop/app/hadoop-2.4.1/sbin
#先啟動HDFS
$./start-dfs.sh
#再啟動YARN
$./start-yarn.sh
#驗證是否啟動成功
使用jps命令驗證 $jps
#啟動Spark
$ cd /home/hadoop/app/spark-1.1.0-bin-hadoop2.4/sbin
$ ./start-all.sh
#驗證是否啟動成功
使用jps命令驗證
$jps
啟動成功輸入jps后會出現下面的進程:
1.namenode
2.secondnamenode
3.datanode
4.nodemanager
5.Resourcemanager
還可以添加免密認證,然后編寫腳本一鍵執行啟動所有進程
出現這些進程就可以開始運行簡單的程序了,我們從wordcount開始示范,必須深入學習之后才能明白每一步和每一個進程代表的含義,目前只是搭建了一個能運行最簡單的程序的環境,實際應用中還有很多待解決問題,有待深入學習。
首先了解簡單的在分布式文件系統HDFS操作的命令
HDFS shell
1.0查看幫助
hadoop fs -help <cmd>
1.1上傳
hadoop fs -put <linux上文件> <hdfs上的路徑>
1.2查看文件內容
hadoop fs -cat <hdfs上的路徑>
1.3查看文件列表
hadoop fs -ls /
1.4下載文件
hadoop fs -get <hdfs上的路徑> <linux上文件>
Hadoop運行wordcount例子
$ cd /home/hadoop/app/hadoop-2.4.1/share/hadoop/mapreduce
$ vi test.txt
輸入以下字符串:
hello world
hello tom
hello jim
hello kitty
hello angelababy
在web瀏覽器打開http://192.168.2.100:50070
選擇Utilities-> Browse the file system就能查看hdfs系統中的文件test.txt
在hdfs根目錄下建一個文件夾
$hadoop fs -mkdir /wordcount
$hadoop fs -mkdir /wordcount/input
然后使用hdfs的上傳指令
$hadoop fs -put test.txt /wordcount/input
然后可以在web端找到對應的路徑和文件
接着就開始從最簡單的wordcount例子開始
大數據技術-WordCount例子分別在hadoop和spark運行的具體教程
基於Hadoop的MapReduce框架下的WordCount運行示例
第一步:在eclipse中編寫程序
(1) 新建java工程,在新建工程下的src文件下新建包,推薦使用三段式命名法,如com.hadoop.cn,然后繼續在包下新建.java文件,開始編寫wordcount程序;
(2)由於wordcount程序需要很多hadoop相關的包,所以我們在動手編寫程序之前最好先將准備好的hadoop_jar文件中的包添加到項目關聯庫中,具體操作如下:
右鍵點擊wordcount項目,選擇Build Path下的Add External Archive,然后找到我們准備好的hadoop_jar文件全選並確定。
(3)按照mapreduce框架的規范編寫代碼
第二步:使用eclipse打jar包
程序編寫完成之后,右鍵點擊項目,選擇Export,然后選擇Java下的JAR file,然后點擊next,如圖所示,修改自己想保存jar包的位置,然后點擊finish,為了方便傳輸,可以放在桌面,傳到linux系統后再刪除。
第三步:發送jar包到linux系統並用命令行提交運行
利用文件傳輸工具filezilla,將桌面上的jar包傳到linux系統下,一般保存在home/app/hadoop/share/mapreduce這個文件下,也可以新建自己的文件,把jar包拖動到該文件下,測試數據可以提前上傳到hdfs的/wordcount/input下,我們以test.txt為例,我們在mapreduce文件夾下的運行指令為:
基本格式:hadoop jar jar包名稱 主類—即main函數所在的類 輸入文件路徑 輸出文件路徑
例:hadoop jar WordCount_hadoop_test.jar cn.itcast.hadoop.mr.wordcount.WCRunner wordcount /wordcount/input /wordcount/output
注:寫主類的時候注意一定要寫 包名.主類名,主類的名字是你main函數所在類的名字,文件輸入路徑按照hdfs上的文件路徑名寫,輸出路徑可以自己指定,最好是項目名/output
基於Spark的WordCount運行示例
第一步:在eclipse中編寫程序
(1)新建java工程,在新建工程下的src文件下新建包,推薦使用三段式命名法,如com.hadoop.cn,然后繼續在包下新建.java文件,開始編寫wordcount程序;
(2)由於wordcount程序需要很多spark相關的包,所以我們在動手編寫程序之前最好先將准備好的spark_jar文件中的包添加到項目關聯庫中,具體操作如下:
右鍵點擊wordcount項目,選擇Build Path下的Add External Archive,然后找到我們准備好的spark_jar文件全選並確定。
(3) 按照spark編碼規范編寫代碼
第二步:使用eclipse打jar包
程序編寫完成之后,右鍵點擊項目,選擇Export,然后選擇Java下的JAR file,然后點擊next,如圖所示,修改自己想保存jar包的位置,然后點擊finish,為了方便傳輸,可以放在桌面,
傳到linux系統后再刪除。
第三步:發送jar包到linux系統並用命令行提交運行
利用文件傳輸工具filezilla,將桌面上的jar包傳到linux系統下,一般保存在home/app/spark/examples/jars這個文件下,也可以新建自己的文件,把jar包拖動到該文件下,測試數據可以提前上傳到hdfs的/wordcount/input下,我們以test.txt為例,我們在mapreduce文件夾下的運行指令為:
基本格式:spark-submit --class 主類-即main函數所在的類 jar包 輸入文件
spark-submit --class com.spark.count.JavaWordCount /home/hadoop/app/spark-2.3.0-bin-hadoop2.7/examples/jars/WordCount_spark_test.jar
/wordcount/input/test.txt
注:寫主類的時候注意一定要寫 包名.主類名,主類的名字是你main函數所在類的名字,文件輸入路徑按照hdfs上的文件路徑名寫