1. 程式人生 > 其它 >Hadoop介紹以及偽分散式的搭建

Hadoop介紹以及偽分散式的搭建

HDFS檔案儲存系統

  每個block塊大小為128M,為什麼是128M?

  計算機硬碟吞吐速度為128M左右。(CPU,磁碟,網絡卡之間的協同效率 即 跨物理機/機架之間檔案傳輸速率)

block塊大小設計原則:最小化定址開銷,減少網路傳輸。

1. 如果塊設定過大

第一點: 從磁碟傳輸資料的時間會明顯大於定址時間,導致程式在處理這塊資料時,變得非常慢;

第二點: mapreduce中的map任務通常一次只處理一個塊中的資料,如果塊過大執行速度也會很慢。

第三點: 在資料讀寫計算的時候,需要進行網路傳輸.如果block過大會導致網路傳輸時間增長,程式卡頓/超時/無響應. 任務執行的過程中拉取其他節點的block或者失敗重試的成本會過高.

第四點: namenode監管容易判斷資料節點死亡.導致叢集頻繁產生/移除副本, 佔用cpu,網路,記憶體資源.

2. 如果塊設定過小

第一點: 存放大量小檔案會佔用NameNode中大量記憶體來儲存元資料,而NameNode的實體記憶體是有限的;

第二點: 檔案塊過小,定址時間增大,導致程式一直在找block的開始位置。

第三點: 作業系統對目錄中的小檔案處理存在效能問題.比如同一個目錄下檔案數量操作100萬,執行"fs -l "之類的命令會卡死.

第四點: ,則會頻繁的進行檔案傳輸,對嚴重佔用網路/CPU資源.

那麼為什麼是128M?

1.HDFS中,平均定址時間大概為10ms;

2.經測試發現,定址時間為傳輸時間的 1% 時,為最高效狀態;10ms/ 0.01 = 1000ms = 1s

3.目前磁碟的傳輸速率普遍為100MB/s,網絡卡普遍為千兆傳輸速率也是100MB/s;

  100MB/s X 1s = 100MB

  所以最佳預設block大小為128M

4.實際生產中,可以根據叢集之間的具體情況進行設定

  例如:跨物理機/機架之間檔案傳輸效率為200MB/s時,一般設定block塊大小為256MB;檔案傳輸速率為400MB/s時,一般設定block塊大小為512MB。最大一般不超過512MB,因為目前固態硬碟的讀寫速率應該不會超過512MB(RAID另行考慮)

hadoop生態圈

Centos7單機上搭建Hadoop(偽分佈模式)

這裡我都放在/opt目錄下,建立一個soft資料夾,將Hadoop解壓放在下面的hadoop260資料夾中

1、首先將Hadoop的壓縮包傳到/opt目錄下

2、依次在/opt目錄下建立soft和hadoop260資料夾,並將hadoop的壓縮包解壓到這裡,去掉一層目錄

[root@hadoopsingle opt]# mkdir -p soft/hadoop260
[root@hadoopsingle opt]# tar -zxf hadoop-2.6.0-cdh5.14.2.tar.gz -C /opt/soft/hadoop260/ --stri

3、接下來修改6個配置檔案

首先進入到/opt/soft/hadoop260/etc/hadoop這個資料夾,在執行下面的修改

  1.修改hadoop-env.sh檔案,將jdk配置進去。這個是hadoop啟動時的環境指令碼

[root@hadoopsingle hadoop]# vim hadoop-env.sh 

在下面這個位置,將你jdk的路徑填上 # The java implementation
to use. export JAVA_HOME=/opt/soft/jdk180

  2.修改core-site.xml檔案。

[root@hadoopsingle hadoop]# vim core-site.xml

修改如下:漢字為解釋  記得刪掉!!!!

<!-- Put site-specific property overrides in this file. -->


<configuration>
  <property>

    檔案系統的對外介面,就填入該單機的IP地址,埠通用9000(比如以後Java連線時的介面)
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.234.200:9000</value>
  </property>
  <property>

    儲存系統臨時檔案的地方
    <name>hadoop.tmp.dir</name>
    <value>/opt/soft/hadoop260/tmp</value>
  </property>
  <property>

    將來任何組都可以訪問該hadoop系統,只要是root使用者的
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
  </property>
  <property>

    遠端訪問許可權,只要是root使用者的
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
  </property>
  <property>

    任何user都可登入,只要是root使用者的
    <name>hadoop.proxyuser.root.users</name>
    <value>*</value>
  </property>
</configuration>

如果不是root使用者,就必須到HDFS系統進行授權

  3.修改hdfs-site.xml檔案

[root@hadoopsingle hadoop]# vim hdfs-site.xml 

新增如下:

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>

    檔案存進來時,備份多少遍。一般為3份,但這裡單機模式,就先搞一份
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>

  4.修改檔案,首先拷貝一份,拷貝完再修改

[root@hadoopsingle hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@hadoopsingle hadoop]# vim mapred-site.xml

新增如下:

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>

    將mapreduce的排程工作分配給yarn
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

  5.修改yarn-site.xml檔案

[root@hadoopsingle hadoop]# vim yarn-site.xml 

新增如下:
<configuration>
     <property>
          因為是單機偽分佈,所以這裡直接寫localhost <name>yarn.resourcemanager.localhost</name> <value>localhost</value> </property> <property>
          心跳機制-->nodemanager來管理 <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>

  6.修改/etc/profile檔案,配置Hadoop的環境變數

#hadoop environment
export HADOOP_HOME=/opt/soft/hadoop260  這裡填你自己的Hadoop安裝路徑
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=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME

修改完記得source生效

4、初次啟動格式化一下

[root@hadoopsingle hadoop]# hadoop namenode -format

等到最後出現
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoopSingle/192.168.234.200
************************************************************/
格式化完成

5、啟動hadoop

[root@hadoopsingle hadoop]# start-all.sh

6、啟動完成後檢視下程序,如果以下全有,搭建完成。

[root@hadoopsingle hadoop]# jps
20497 SecondaryNameNode
20662 ResourceManager
20951 NodeManager
21015 Jps
20330 DataNode
20205 NameNode

  如果這裡程序缺少任意一個,按如下步驟檢視原因:

[root@hadoopsingle hadoop]# cd /opt/soft/hadoop260/logs/
首先進入到Hadoop的日誌資料夾,缺少哪個程序就檢視對應的日誌檔案,再日誌檔案最後部分會有錯誤資訊提示
[root@hadoopsingle logs]# ll
total 184
-rw-r--r--. 1 root root 27097 Sep  9 02:04 hadoop-root-datanode-hadoopsingle.log
-rw-r--r--. 1 root root   716 Sep  9 01:53 hadoop-root-datanode-hadoopsingle.out
-rw-r--r--. 1 root root 37768 Sep  9 02:04 hadoop-root-namenode-hadoopsingle.log
-rw-r--r--. 1 root root   716 Sep  9 01:53 hadoop-root-namenode-hadoopsingle.out
-rw-r--r--. 1 root root 25525 Sep  9 02:04 hadoop-root-secondarynamenode-hadoopsingle.log
-rw-r--r--. 1 root root   716 Sep  9 01:53 hadoop-root-secondarynamenode-hadoopsingle.out
-rw-r--r--. 1 root root     0 Sep  9 01:53 SecurityAuth-root.audit
drwxr-xr-x. 2 root root     6 Sep  9 02:03 userlogs
-rw-r--r--. 1 root root 29727 Sep  9 02:05 yarn-root-nodemanager-hadoopsingle.log
-rw-r--r--. 1 root root   702 Sep  9 01:53 yarn-root-nodemanager-hadoopsingle.out
-rw-r--r--. 1 root root 35633 Sep  9 02:04 yarn-root-resourcemanager-hadoopsingle.log
-rw-r--r--. 1 root root   702 Sep  9 01:53 yarn-root-resourcemanager-hadoopsingle.out

7、關閉叢集命令

[root@hadoopsingle hadoop]# stop-all.sh