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