在AWS上基於 Linux 14 搭建 Hadoop

創建僞分佈式的EC2 節點

1. 設置 root權限 sudo passwd root (子節點默認設置爲 passwd 爲 hadoop)
2. 進入權限 su root
------------------------------------------------------------------
3. 安裝 java 環境

apt-get install openjdk-7-jdk


4. 設置 環境變量 ( linux 查看java的安裝路徑 #  https://www.cnblogs.com/hanshuai/p/9604730.html )
vim /etc/profile
-----------------
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
--------------------
更新系統變量
5.source /etc/profile
--------------------
驗證JAVA_HOME
6.echo $JAVA_HOME
------------------------------------------------------------------
其他環境準備
sudo apt-get install ssh
sudo apt-get install rsync
-------------------------------------------------------------------
下載安裝 hadoop:
7. 下載 (hadoop -2.9.2 下載路徑  #  http://ftp.cuhk.edu.hk/pub/packages/apache.org/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz )

wget http://ftp.cuhk.edu.hk/pub/packages/apache.org/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz


---------------------
ls -a 查看是否下載下來了
----------------------
8. 解壓
tar -zxvf hadoop-2.9.2.tar.gz
------------------------
9.更改配置文件
etc/hadoop/core-site.xml:
--------------------
/etc/profile 
export HADOOP_HOME=/home/ubuntu/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
-------------
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>
---------------------------------------------
etc/hadoop/hdfs-site.xml:
---------------
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>
--------------------------------------------
etc/hadoop/hadoop-env.sh
--------------
修改java路徑 export JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/jre"

------------------------------------------------------------------------
運行前的其他準備
ssh localhost 
---------------------如果有問題先執行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
----------------------------------------------------
ssh-keygen -f "/home/ubuntu/.ssh/known_hosts" -R localhost
-----------------------------------------------------------------------
運行:(第10步是11的前提)
------------------------------
10.格式化文件
bin/hdfs namenode -format
------------------------------
運行
11. sbin/start-dfs.sh
(停止 : stop-all.sh)
----------------------------------------------------------------------------
12. 驗證已運行:
curl http://localhost:50070/

refer to https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html


===========================================================================================================================

設置多節點Hadoop


1.修改機器名稱
vi /etc/hostname
-爲了能正確解析主機名,最好也修改/etc/hosts文件裏對應的主機名 


----------------------------------------------------------
在   /etc/hosts 中添加下列

172.31.43.232 Master
172.31.41.121 Slave1
172.31.34.186 Slave2
172.31.34.139 Slave3

M 1 M 2  M 3  1 2  1 3   2 3

(無法ping通 需要在安全組開啓icmp協議)
-----------------------------------------------------------
2.設置SSH
再此之前要新建用戶 不要再root上操作(ubuntu)
-------------------------------------
ssh-keygen -t rsa (默認生成在 home/用戶名/.ssh   密碼直接回車)
-------------------------------
先把自己的key追加到權限中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys 
chmod 700 -R .ssh
----------------------------------------------------------
修改 /etc/ssh/sshd_config 取消這一行的註釋
AuthorizedKeysFile  %h/.ssh/authorized_keys 
----------------------------------------
** 把主機的公鑰發給從機
( $ rm -rf id_rsa.pub -- 刪除臨時公鑰 )
注意: 如果你用的是AWS上的EC2 並且設置了pem驗證 你需要把pem文件上傳
scp -i "CUHK.pem" path\CUHK.pem <username>@<yourEC2ip>:~ (WIN -> Ubuntu)
之後發動公鑰需要用到 pem 否則可能會出現 permission denied錯誤 如下所示
scp -i "CUHK.pem" ~/.ssh/id_rsa.pub  ubuntu@Slave1:~
....
scp id_rsa.pub  <EC2ip>:~
---------------------------------------
每次交換公鑰都要加入驗證
scp -i "CUHK.pem" ~/.ssh/id_rsa.pub ubuntu@Slave1:~
scp -i "CUHK.pem" ~/.ssh/id_rsa.pub ubuntu@Slave2:~
scp -i "CUHK.pem" ~/.ssh/id_rsa.pub ubuntu@Slave3:~
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys              

其他解決permission denied的方法 :
ssh-keygen -f    /home/ubuntu/.ssh/known_hosts  -R 172.31.90.181
--------------------------------------------------------------------
3. 編輯配置文件
(  refer to https://blog.csdn.net/weixin_40526756/article/details/80652525 )
core-site.xml         (備註:請先在 /usr/hadoop 目錄下建立 tmp 文件夾)
----------------

<configuration>
   <property>
        <name>fs.default.name</name>
        <value>hdfs://Master:9000</value>
    </property>
  <!-- dfs不能訪問dfs 負責會出現卡在job的情況 -- >
    <property>
           <name>dfs.permissions</name>
           <value>false</value>
   </property>
</configuration>


---------------------------
hdfs-site.xml
--------------------------

<configuration>
      <property>
          <name>dfs.namenode.secondary.http-address</name>
          <value>Master:50090</value>
      </property>
      <property>
            <name>dfs.replication</name>
            <value>3</value>
       </property>
       <property>
             <name>dfs.namenode.name.dir</name>
             <value>/home/ubuntu/hadoop-2.9.2/dfs/name</value>
        </property>
        <property>
              <name>dfs.datanode.data.dir</name>
             <value>/home/ubuntu/hadoop-2.9.2/dfs/data</value>
         </property>
</configuration>


--------------------------------
mapred-site.xml
-----------------------------

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>http://Master:9001</value>
    </property>

    <!-- 如果配置yarn 就需要 -->
    <property>
         <name>mapreduce.framework.name</name>
         <value>yarn</value>
    </property>
</configuration>


------------------------------
yarn-site.xml (可以不用配置)

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

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>Master</value>
</property>

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

<property>
    <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

-----------------------------
slaves 文件
-----------------
Master
Slave1
Slave2
Slave3
----------------
masters
--------------------
Master
-------------------------------------------------------------
4. 把Master上的文件複製到Slave上
scp -r  ~/hadoop-2.9.2/etc/hadoop/* ubuntu@Slave1:~/hadoop-2.9.2/etc/hadoop
.......
--------------------------------------
5. 首次啓動需要先在 Master 節點執行 NameNode 的格式化:(只能執行一次)
 bin/hdfs namenode -format
-----------------------------------------------
6.啓動
sbin/start-dfs.sh
sbin/start-all.sh

(sbin/start-yarn.sh / sbin/mr-jobhistory-daemon.sh start historyserver)

-------------------------------------------------------------------------------------------------------------
# 主頁 Slave的datanodes 看不到 可能也是 AWS 沒有開放 配置端口的原因  slave 的log datanode 顯示 一直retry
----------------------------------------------------------------------------------------------------------------------------------
$ ./bin/hadoop jar  ./share/hadoop/mapreduce/hadoop-mapreduce-example-2.9.2.jar teragen 21474837 terasort/input2G

錯誤解決方案 :https://blog.csdn.net/sinat_33769106/article/details/80905363

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章