阿里雲上安裝hadoop並遠程操作

前言: 在公司用到了hadoop,於是想搭建一個hadoop環境.從慕課網上找了門 Hadoop基礎知識與電商網站日誌數據分析課學了下,這是筆記,供本人複習之用.

目錄

第一章 環境介紹

第二章 Hadoop的安裝

2.1 jdk安裝

2.2 配置ssh登陸

2.2.1 配置讓服務器能自己登陸自己

2.2.2 讓本地能通過ssh遠程連接阿里雲服務器

2.3 hadoop的安裝

第三章 啓動停止hadoop

3.1 格式化文件系統

3.2 啓動集羣

3.2.1 通過進程開啓 

3.2.2 通過網站驗證開啓

3.3 停止集羣

3.4 start與stop與hadoop-daemons.sh的關係 

第四章 HDFS 命令行操作

第五章 hadoop文件的存儲機制

第七章 API編程開發HDFS

7.1 配置maven庫

7.2 遠程操作阿里雲中的hadoop

7.2.1 上傳文件副本數爲3


第一章 環境介紹

服務器版本centos7.3 在阿里雲上買的,網絡1M,單核,硬盤40GB,內存2G.

Hadoop:hadoop-2.6.0-cdh5.15.1

下載地址:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1.tar.gz

Hadoop說明:http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1/

裝hadoop環境需要先配ssh與安裝jdk.

jdk:1.8

第二章 Hadoop的安裝

2.1 jdk安裝

https://blog.csdn.net/q610376681/article/details/83902538

最終java安裝目錄

2.2 配置ssh登陸

提醒:因爲本人也是第一次配,可能有一些冗餘操作,具體還是根據自己情況來,下面步驟只作爲參考.

附上幾個常用的操作文件命令:

清空文件內容:cat /dev/null > file_name

查找文件內的內容: 在命令行下輸入“/關鍵字”

重啓ssh服務:service sshd restart

2.2.1 配置讓服務器能自己登陸自己

即ssh localhost能夠成功.

可參考:https://blog.csdn.net/dongdong9223/article/details/81288378

值得注意的是,出現are you sure 的時候要輸入yes,不是直接回車.

2.2.2 讓本地能通過ssh遠程連接阿里雲服務器

1. 添加安全組規則:

https://help.aliyun.com/document_detail/25471.html?spm=a2c4g.11186623.2.14.d7837394Hhx40S#concept-sm5-2wz-xdb

2. 利用阿里雲生成密鑰對:

https://help.aliyun.com/document_detail/51793.html?spm=5176.2020520101.205.d51793.38cb4df5MgXi9M

3. 將密鑰對放在ssh中,並在ssh規則中添加對應密鑰:

https://blog.csdn.net/mier9042/article/details/82908774

我自己的環境:

my_computer2.pem阿里雲生成的密鑰

將密鑰添加到ssh中

在~/.ssh/下配置config(這裏沒嘗試之前的github還能否連上,網上說可能要在改點別的配置,因爲網上教程一堆,就沒寫,有問題再搜就行.HostName是ip,Host是我的遠程主機設置host名.

 連接,注意連接的時候要加上用戶名如root

2.3 hadoop的安裝

1. 下載並解壓到指定目錄

解壓後hadoop文件夾下目錄說明:

 

2.將java配置寫入/etc/hadoop/hadoop-env.sh,如果環境變量裏配置了java_home,下圖這樣即可.

3. 配置默認的文件系統,切換到etc/hadoop/core-site.xml文件上,下面配置寫入.

這裏hadoop000要在host裏進行配置

vi /etc/hosts

特別特別特別注意地址不能寫127.0.0.1和雲服務器的外網ip,這樣都會導致導致等會兒不能在外網操作hadoop,要填寫雲服務器的內網地址.

 4. 配置副本系數.現在是單機,所以是1.切換到etc/hadoop/hdfs-site.xml文件上,下面配置寫入.

5.修改臨時文件夾位置,此參數不改可能不影響使用,但是機器重啓以後可能有問題.此目錄下存放hdfs將文件切成的塊,重啓時tmp目錄會被清空,容易造成數據丟失.

所以我們將文件放在:

6. 配置dataNode,hadoop的結構是主從結構,一個nameNode帶幾個dataNode,所以我們要配置dataNode,打開/etc/hadoop中的slaves,修改其中的localhost爲hadoop000,效果是一樣的,但是有利於我們後期修改爲多節點.

第三章 啓動停止hadoop

3.1 格式化文件系統

注意:第一次執行的時候一定要格式化文件系統,不要重複執行

將hadoop配置到環境變量中以方便使用

source /etc/profile 使其生效.

格式化文件系統

hdfs namenode -format

如下顯示說明格式化成功. 

3.2 啓動集羣

切換到sbin中啓動下圖所示文件並啓動

啓動記錄:

3.2.1 通過進程開啓 

驗證,當出現下圖所示(除jps)即爲成功,數字可以不一樣,那是pid.

如果發現哪個進程不存在,去logs文件夾中找其中log文件.

3.2.2 通過網站驗證開啓

訪問ip:50070也可以校驗是否成功,如果連接不上,考慮防火牆的問題,我這裏用的是阿里雲,打開下面的防火牆,即訪問成功.

3.3 停止集羣

在sbin目錄下輸入如下命令停止

./stop-dfs.sh

3.4 start與stop與hadoop-daemons.sh的關係 

第四章 HDFS 命令行操作

輸入hadoop,會出現提示

看到fs是對文件系統進行操作,輸入hadoop fs,看到一堆對文件的操作.將嘗試較爲常用的.

首先查看hdfs中現存的文件

hadoop fs -ls /

發現空空如野,因爲剛創建.

具體的命令實踐:https://www.jianshu.com/p/ba8e047a2216

第五章 hadoop文件的存儲機制

當我們將大於block的文件放入hdfs中去時,其會被拆成多個塊.比如我們將jdk放入hdfs中.

因爲一個block是128M,我們的jdk是182M,可以看到jdk被分成了兩塊存儲到hdfs中.大小加起來剛好爲182M.

我們去之前配置的/app/tmp下找,經過很多級目錄可以找到這兩個塊.

並且cat之後也可以進行使用(這是視頻上的塊,我嫌麻煩沒自己敲).

第七章 API編程開發HDFS

建立maven項目.

在本地中配置hosts地址如下,我本地是windows,路徑爲C盤 - > Windows - > System32 - > drivers-> etc - > hosts文件

7.1 配置maven庫

<!--有些包要到這個庫去下-->
<repositories>
    <repository>
      <id>cloudera</id>
      <url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
    </repository>
  </repositories>
<!--引入的包-->
<dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.6.0-cdh5.15.1</version>
    </dependency>

7.2 遠程操作阿里雲中的hadoop

列舉了幾個常用的,其它的api可以網上搜搜,大同小異.

public class HDFSApp {
    public static final String HDFS_PATH = "hdfs://59.110.164.62:8020";
    FileSystem fileSystem = null;
    Configuration configuration = null;

    @Before
    public void setUp() throws URISyntaxException, IOException, InterruptedException {
        System.out.println("---setUp---");
        configuration = new Configuration();
        //設置true表示讓它返回的是host名字,而不是地址,如果不設置
        //會返回內網地址導致失敗.
        configuration.set("dfs.client.use.datanode.hostname", "true");
        fileSystem = FileSystem.get(new URI(HDFS_PATH),configuration,"root");
    }
    /**
     * 創建hdfs文件夾
     *       
     * @param 
     * @return 
     **/
    @Test
    public void mkdir() throws IOException {
        fileSystem.mkdirs(new Path("/hdfsapi/test"));
    }
    /**
     * 從hadoop中下載文件
     *       
     * @param 
     * @return 
     **/
    @Test
    public void text() throws IOException {
        FSDataInputStream in = fileSystem.open(new Path("/README.txt"));
        System.out.println("成功獲取輸入流");
        IOUtils.copyBytes(in,System.out,1024);
    }
    
    /**
     * 向hadoop中上傳文件.
     *       
     * @param 
     * @return 
     **/
    @Test
    public void create() throws IOException {
        FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/a.txt"));
        out.writeUTF("hello zhangchen");
        out.flush();
        out.close();
    }
    /**
     * 關閉連接
     *       
     * @param 
     * @return 
     **/
    @After
    public void tearDown(){
        configuration = null;
        fileSystem = null;
        System.out.println("---tearDown---");
    }
}

7.2.1 上傳文件副本數爲3

同時值得注意的是我們上傳的文件副本數爲3,和我們在本地配置的1的副本數不一樣,因爲它上傳時讀取的是默認配置,可以在dependency下的hdfs依賴中的xml文件中找到.

可以看到副本數爲3 

 

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