天天看點

centos/ubuntu環境下hadoop僞分布式搭建

本人是學生一枚,前段時間參加了省裡舉辦的高校“大資料技術與應用”競賽。作為一名小白,從搭建環境學起,遇到了各種問題。用到了hadoop、linux、spark、scala、hive、sqoop、hbase、mysql。現把自己整理的過程分享出來。本人分享的都是非常淺顯的技術,在本機中運作幾次沒有問題的成果,指令都是直接可以複制使用,供大家參考。

本教程使用的檔案都在我的某度網盤裡 大家有需要可以自行下載下傳  pan.baidu.com/s/1i4UdHNR  密碼 whpd

來個防和諧的 屁A恩 點 baidu 點 誰喔m/s/1i4UdHNR密碼 whpd 

本教程對從沒接觸過linux和hadoop的同學有用,大神請忽視。有些出錯的問題是直接網上找到的解決辦法,大家自己選擇判斷。

開發環境:win10 

VMware Workstation Pro12 

ubuntu16.04 、centos 6.5、centos7   (以下$ 後面跟着的指令即為終端輸入的指令 複制時去掉$)

1、本人使用vm建立的虛拟機,建議大家安裝完linux系統以後,先裝上vmware tool,vmware tool安裝完成後要重新開機一下虛拟機,這樣就可以把win10(原系統)裡面的檔案或文字直接複制粘貼到linux中了。

1.1、首先在安裝的虛拟機上面點選右鍵 

centos/ubuntu環境下hadoop僞分布式搭建

我這裡已經安裝完成,未安裝時顯示的是更新 vmware tools ,點選後會在你虛拟機桌面上顯示一個cd盤,打開就是安裝檔案,或者在檔案管理器左邊同樣打開即是安裝檔案。

centos/ubuntu環境下hadoop僞分布式搭建

在這裡說明一下,linux的壓縮包是***.tar.gz 結尾的,不是Windows的zip或者rar。

1.2、本人linux系統中的使用者名是hadoop,linux中home檔案夾下的hadoop檔案夾是使用者直接可以操作的,删除、修改、從Windows裡面拖拽檔案到hadoop檔案夾。其他檔案夾是在 \ 目錄下的,有時使用者不能直接操作,是以安裝檔案一般都需要把檔案放到home/hadoop 中 再安裝到其他檔案夾。圖中打開home檔案夾裡面就有個hadoop檔案夾,這裡就不截圖展示了,不懂的同學自行百度下linux的檔案目錄結構就明白了。

centos/ubuntu環境下hadoop僞分布式搭建

1.3 、将vmware tools.tar.gz 複制到hadoop檔案夾下。在桌面空白處點選右鍵---打開終端。輸入以下指令:

-----------------------------------------------------------------------------------------

$ cd /home/hadoop  

//先進入hadoop目錄

$ sudo tar -zxvf VMwareTools-9.9.3-2759765.tar.gz -C /usr/local

//将vmtools解壓到 usr/local目錄中大家也可以解壓到opt、var等但是一般書本都解壓到local咱們按慣例吧·

$ cd /usr/local

//進入local目錄

$ ls

//ls是列出檔案夾中的所有檔案、檔案夾,當然也可以用滑鼠進目錄管理器進行檢視。

$ cd vmware-tools-distrib

// 我這裡解壓完成後是這個vmware-tools-distrib名字

//這裡說個小技巧 假如檔案夾裡隻有某個名字 輸入如vm 然後按tab鍵系統會自動補全後面的名字vmware-tools-distrib

$ sudo vmware-install.pl

// vmware-tools-distrib 檔案夾下有個vmware-install.pl 安裝即可 安裝過程中會有yes或no 一路enter yes就可以

成功後會提示enjoy vm····  重新開機reboot後就可以使用vm tools

----------------------------------------------------------------------------------------------------

2、準備工作 關閉防火牆 實作ssh免密碼登陸

2.1、在CentOS 6.x中,可以通過如下指令關閉防火牆:

$ sudo service iptables stop   # 關閉防火牆服務

$ sudo chkconfig iptables off  # 禁止防火牆開機自啟,就不用手動關閉了

centos7.0 中的關閉方法不一樣 是

直接關閉防火牆

$ systemctl stop firewalld.service        #停止firewall

$ systemctl disable firewalld.service   #禁止firewall開機啟動

ubuntu中預設關閉了防火牆

$ sudo ufw status     #檢視防火牆狀态

$ sudo ufw disable    #關閉防火牆

2.2、一般情況下,CentOS 預設已安裝了 SSH client、SSH server,打開終端執行如下指令進行檢驗:

$ rpm -qa | grepssh

如果傳回的結果包含了 SSH client 跟 SSH server,則不需要再安裝。

若需要安裝,則可以通過 yum 進行安裝(安裝過程中會讓你輸入 [y/N],輸入 y 即可):

$ sudo yum install openssh-clients                在ubuntu中 使用這個指令安裝 :sudo apt-get install ssh

$ sudo yum install openssh-server

接着執行如下指令測試一下 SSH是否可用:

$ ssh localhost

此時會有如下提示(SSH首次登陸提示),輸入 yes 。然後按提示輸入密碼000000(我這裡是六個0),這樣就登陸到本機了。

但這樣登陸是需要每次輸入密碼的,我們需要配置成SSH無密碼登陸。

首先輸入 exit 退出剛才的 ssh,就回到了我們原先的終端視窗,然後利用 ssh-keygen 生成密鑰,并将密鑰加入到授權中:

$ exit                           # 退出剛才的 ssh localhost

$ cd ~/.ssh/                     # 若沒有該目錄,請先執行一次ssh localhost

$ ssh-keygen -trsa              # 會有提示,都按回車就可以

$ cat id_rsa.pub >> authorized_keys  # 加入授權

$ chmod 600 ./authorized_keys    # 修改檔案權限

此時再用 ssh localhost 指令,無需輸入密碼就可以直接登陸了。

3、安裝java hadoop是在java基礎上運作的 

大家自行去java官網下載下傳linux 使用的jdk 這裡我直接上指令 (jdk安裝包存到home/hadoop檔案夾裡)

$ cd /home/hadoop

$ sudo tar -zxvf jdk-7u91-linux-x64.tar.gz -C /usr/local               #解壓到/usr/local目錄下

$ cd /usr/local 

$ ls                                      #檢視解壓後的名字

$ sudo mv jdk***** jdk          # 将檔案夾名改為jdk   mv 原名 新名

#接着需要配置一下JAVA_HOME 環境變量,為友善,我們在 ~/.bashrc 中進行設定

$ vim ~/.bashrc

#vim編輯器使用方法: 按鍵盤字母 i 進行插入編輯 完成後按鍵盤Esc 會發現編輯光标沒有了 這時候鍵盤按 shift+:鍵 會出現一個冒号

#輸入 wq 是儲存退出 /輸入 q 是直接退出 /輸入 !q  是強制退出

#輸入 i 直接複制下面代碼

export JAVA_HOME=/usr/local/jdk     

export PATH=${JAVA_HOME}/bin:$PATH

export JRE_HOME=${JAVA_HOME}/jre                     #可以沒有

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  #可以沒有

#輸入:wq 退出

source ~/.bashrc  # 務必要儲存 java環境才能配置生效

#在終端裡輸入 

$ java -version 

centos/ubuntu環境下hadoop僞分布式搭建

顯示版本了 即為配置成功

4、安裝hadoop 配置環境變量

4.1、Hadoop 2 可以通過 http://mirror.bit.edu.cn/apache/hadoop/common/ 或者http://mirrors.cnnic.cn/apache/hadoop/common/ 下載下傳

大家自行去官網下載下傳hadoop 這裡我直接上指令 (hadoop安裝包存到home/hadoop檔案夾裡)

$ cd /home/hadoop

$ sudo cp -r hadoop-2.6.5.tar.gz -C /usr/local

$ cd /usr/local

$ sudo mv hadoop-2.6.5 hadoop           # 将檔案夾名改為hadoop

$ sudo chown -R hadoop:hadoop hadoop       # 修改檔案權限  

#這是上面句子的解釋 遞歸修改檔案夾my及包含的所有子檔案(夾)的所屬使用者(jay)和使用者組(fefjay):

$ chown -R jay:fefjay my #修改檔案所屬使用者為jay,所屬使用者組為fefjay      

#我這裡是hadoop使用者 hadoop使用者組

$ vim ~/.bashrc 

#複制粘貼

export HADOOP_HOME=/usr/local/hadoop                

#改成自己安裝後檔案夾的名字 我之前已經改為hadoop

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export PATH=$HADOOP_HOME/bin:$PATH

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin

$ source ~/.bashrc  #儲存

#在這裡  終端中輸入以下指令 就能看到hadoop的版本了 

$ cd/usr/local/hadoop

$ ./bin/hadoop version  

4.2、#Hadoop 可以在單節點上以僞分布式的方式運作,Hadoop 程序以分離的 Java 程序來運作,節點既作為 NameNode 也作為 #DataNode,同時,讀取的是 HDFS 中的檔案。Hadoop 的配置檔案位于 /usr/local/hadoop/etc/hadoop/ 中,僞分布式需要修改2個#配置檔案 core-site.xml 和 hdfs-site.xml 。Hadoop的配置檔案是 xml 格式,每個配置以聲明 property 的 name 和 value 的方式來實作。

$ cd /usr/local/hadoop/etc/hadoop          #進入目錄 修改core-site.xml 和 hdfs-site.xml 

ls    #看到相關檔案

$ vim core-site.xml

#将當中的         <configuration></configuration> (這兩個在檔案的最後兩行)              修改為下面配置:

 ----------------------------------------------------------------------------複制粘貼即可

<configuration>

<property>

<!-- 指定hadoop運作時産生檔案的存儲路徑 -->

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

       <value>file:/usr/local/hadoop/tmp</value>

        <description>A base for othertemporary directories.</description>

    </property>

<property>

<!-- namenode的通信位址 -->

        <name>fs.defaultFS</name>

       <value>hdfs://localhost:9000</value>

    </property>

</configuration>

-----------------------------------------------------------------------------      : wq 退出

#同樣的,修改配置檔案 hdfs-site.xml:

$ vim hsfs-site.xml

-------------------------------------------------------------複制粘貼

<configuration>

<property>

<!-- 設定hdfs副本數量 -->

       <name>dfs.replication</name>

       <value>1</value>

    </property>

<property>

<!-- namenode 存放 name table 的目錄 -->

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

       <value>file:/usr/local/hadoop/tmp/dfs/name</value>

    </property>

<property>

<!-- datanode 存放資料 block 的目錄 -->

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

       <value>file:/usr/local/hadoop/tmp/dfs/data</value>

    </property>

</configuration>

-----------------------------------------------------------------          :wq

#使用終端 輸入 下面  

 $ cd    #回到根目錄

 $ hdfsnamenode -format           #輸入這個

成功的話,會看到 "successfully formatted" 和"Exitting with status 0"的提示 若為 "Exitting with status1" 則是出錯。

回去檢查防火牆 、ssh 和 core-site.xml 和 hdfs-site.xml是否輸入對。

centos/ubuntu環境下hadoop僞分布式搭建

#如果在這一步時提示 Error: JAVA_HOME is not set and could not be found. 的錯誤,則說明之前設定 JAVA_HOME 環境變量那邊就沒設定好,請按教程先設定好 JAVA_HOME 變量,否則後面的過程都是進行不下去的。如果已經按照前面教程在.bashrc檔案中設定了JAVA_HOME,還是出現 Error: JAVA_HOME is not set and could not be found. 的錯誤,那麼,請到hadoop的安裝目錄修改配置檔案“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在裡面找到“export JAVA_HOME=${JAVA_HOME}”這行,然後,把它修改成JAVA安裝路徑的具體位址,比如,“export JAVA_HOME=/usr/local/jdk”,然後,再次啟動Hadoop。

#接着開啟 NameNode 和 DataNode 守護程序。 終端輸入

$ ./sbin/start-dfs.sh                                     #start-dfs.sh 是個完整的可執行檔案,中間沒有空格

#若出現如下SSH提示,輸入yes即可。

centos/ubuntu環境下hadoop僞分布式搭建

啟動時可能會出現如下 WARN 提示:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable WARN 提示可以忽略,并不會影響正常使用。

啟動完成後,可以通過指令 jps 來判斷是否成功啟動,若成功啟動則會列出如下程序: "NameNode"、"DataNode" 和 "SecondaryNameNode"(如果 SecondaryNameNode 沒有啟動,請運作 sbin/stop-dfs.sh 關閉程序,然後再次嘗試啟動嘗試)。如果沒有 NameNode 或 DataNode ,那就是配置不成功,請仔細檢查之前步驟,或通過檢視啟動日志排查原因。

centos/ubuntu環境下hadoop僞分布式搭建

此外,若是 DataNode 沒有啟動,可嘗試如下的方法(注意這會删除 HDFS 中原有的所有資料,如果原有的資料很重要請不要這樣做):

# 針對 DataNode 沒法啟動的解決方法

$ ./sbin/stop-dfs.sh                                         # 關閉

$ rm-r ./tmp                                                   # 删除 tmp 檔案,注意這會删除 HDFS 中原有的所有資料

$ ./bin/hdfs namenode -format                     # 重新格式化 NameNode

$ ./sbin/start-dfs.sh                                       # 重新開機

#成功啟動後,可以通路 Web 界面 http://localhost:50070 檢視 NameNode 和 Datanode 資訊,還可以線上檢視 HDFS 中的檔案。

#下次啟動 hadoop 時,無需進行 NameNode 的初始化,隻需要運作 ./sbin/start-dfs.sh 就可以!我個人比較喜歡

直接終端輸入 start-all.sh

4.3、啟動Yarn             先關閉hadoop    ./sbin/stop-dfs.sh  或者 stop-all.sh

(僞分布式不啟動 YARN 也可以,一般不會影響程式執行)

YARN 是從 MapReduce 中分離出來的,負責資源管理與任務排程。YARN 運作于 MapReduce 之上,提供了高可用性、高擴充性,YARN 的更多介紹在此不展開,有興趣的可查閱相關資料。上述通過./sbin/start-dfs.sh 啟動 Hadoop,僅僅是啟動了 MapReduce 環境,我們可以啟動 YARN ,讓 YARN 來負責資源管理與任務排程。

下面直接上指令

$ cd /usr/local/hadoop/etc/hadoop          #進入目錄

$ ls                                                                #可以看到相關檔案

#首先修改配置檔案mapred-site.xml,源檔案是mapred-site.xml.template 這邊需要先進行重命名:

$ mv mapred-site.xml.template mapred-site.xml

#然後再進行編輯

$ vim mapred-site.xml

----------------------------------- ------------複制粘貼

<configuration>

<property>

<!-- 通知架構MR使用YARN -->

       <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

</configuration>

-------------------------------------------  :wq 儲存

#接着修改配置檔案yarn-site.xml:

$ vim yarn-site.xml

----------------------------------------------複制粘貼

<configuration>

<!-- reducer取資料的方式是mapreduce_shuffle -->

    <property>

       <name>yarn.nodemanager.aux-services</name>

       <value>mapreduce_shuffle</value>

        </property>

</configuration>

------------------------------------------ :wq儲存

# 然後就可以啟動 YARN 了(需要先執行過 ./sbin/start-dfs.sh)或者配置好直接start-all.sh 下面start-yarn.sh 也省略了

$ ./sbin/start-yarn.sh      #啟動YARN         

#開啟後通過 jps 檢視,可以看到多了 NodeManager 和 ResourceManager 兩個背景程序

注意:按上面的指令直接敲是完全可以的,假如出錯了我上面有一些出錯的例子,其他錯誤百度一下也能解決。注意看終端中提示的error 那一行 。

1、假如你建立的是A使用者 不想用A來配環境 直接再建立一個使用者即可。下面是步驟

1.1、ubuntu中建立hadoop使用者

sudo useradd –m hadoop –s /bin/bash   #終端中輸入這個指令

#上面這條指令建立了可以登陸的 hadoop使用者,并使用 /bin/bash 作為 shell

#接着使用如下指令設定密碼,可簡單設定為 123456,按提示輸入兩次密碼:

$ sudo passwd hadoop

#可為 hadoop 使用者增加管理者權限 這一步強烈建議做

$ sudo adduser hadoop sudo

#登出後登陸就看到新使用者hadoop了

1.2 centos中建立hadoop使用者

$ sudo useradd –m hadoop –s /bin/bash   #終端中輸入這個指令

#上面這條指令建立了可以登陸的 hadoop使用者,并使用 /bin/bash 作為 shell

#接着使用如下指令設定密碼,可簡單設定為 123456,按提示輸入兩次密碼:

$ sudo passwd hadoop

#可為 hadoop 使用者增加管理者權限 這一步強烈建議做

$ vim  /etc/sudoers           #終端中輸入這個 與ubuntu不一樣

#找到檔案裡面有下面一行 root  ALL```````

#   root  ALL=(ALL)    ALL       #在這一行下面添加 

hadoop ALL=(ALL)    ALL    # hadoop是新增的使用者

# :wq 儲存退出

#登出後登陸就看到新使用者hadoop了

建議登陸後使用在終端中輸入 su 輸入密碼進入root使用者進行以上所有java hadoop操作

繼續閱讀