1. 程式人生 > 實用技巧 >Hadoop學習筆記 -偽分散式

Hadoop學習筆記 -偽分散式

偽分散式

ps:寫在前面的話 這是個人的學習筆記,僅用於自己歸納,其中可能會有些莫名其妙的東西

準備工作

  • 環境

    • 設定 IP 和 主機名
    • 關閉防火牆和 selinux
    • 設定 hosts 對映
    • Hadoop
    • JAVA環境
    • ssh免密登入
  • ssh遇到的問題

    • root賬戶無法連線:

    • 修改/etc/ssh/sshd_config檔案

    • PermitRootLogin Prohibit-password 修改為:PermitRootLogin yes

  • 重啟ssh服務

  • 免密登入:

    • $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
      $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      $ chmod 0600 ~/.ssh/authorized_keys
      
  • B 包含了 A 的公鑰,A 就可以免密登入

搭建Hadoop(配置Hadoop)

  1. 配置Hadoop環境變數 (hadoop-env.sh 中配置 JAVA_HOME)

  2. core-site.xml 中配置localhost為主機名

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://node01:9000</value>
        </property>
    </configuration>
    
  3. hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    
        <property>
            <name>dfs.namenode.name.dir</name>
    	<value>/var/bigdata/hadoop/local/dfs/name</value>
        </property>
    
        <property>
            <name>dfs.datanode.data.dir</name>
    	<value>/var/bigdata/hadoop/local/dfs/data</value>
        </property>
    
        <property>
    	<name>dfs.namenode.secondary.http-address</name>
    	<value>node01:50090</value>
        </property>
        
        <property>
    	<name>dfs.namenode.checkpoint.dir</name>
    	<value>/var/bigdata/hadoop/local/dfs/secondary</value>
        </property>
    </configuration>
    
    
  4. slaves / workers 配置datanode在哪啟動

初始化和啟動

  • 初始化

    • hdfs namenode -format
      • 建立目錄
      • 初始化一個空的fsimage
      • VERSION: 存放叢集ID
  • 成功標誌

    2020-10-24 13:24:34,088 INFO common.Storage: Storage directory /var/bigdata/hadoop/local/dfs/name has been successfully formatted.
    2020-10-24 13:24:34,217 INFO namenode.FSImageFormatProtobuf: Saving image file /var/bigdata/hadoop/local/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
    2020-10-24 13:24:34,440 INFO namenode.FSImageFormatProtobuf: Image file /var/bigdata/hadoop/local/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 399 bytes saved in 0 seconds .
    
  • 啟動 (start-dfs.sh)

    • Starting namenodes on [node01]
      ERROR: Attempting to operate on hdfs namenode as root
      ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
      Starting datanodes
      ERROR: Attempting to operate on hdfs datanode as root
      ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
      Starting secondary namenodes [node01]
      ERROR: Attempting to operate on hdfs secondarynamenode as root
      ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
      
      
    • 解決 : 在hadoop-env.sh 中指定使用者名稱

      export HDFS_NAMENODE_USER=root
      export HDFS_DATANODE_USER=root
      export HDFS_SECONDARYNAMENODE_USER=root
      
    • 第一次 start-dfs.sh : datanode和secondary角色會初始化建立自己的資料目錄

    • 其中的VERSION中的clusterID是相同的

Startup Progress

  1. 進入 name/current 觀察 editlog 的 id 是否在 fsimage 的後面

    • hdfs dfs : 列出支援的檔案操作命令
    • hdfs dfs -mkdir /bigdata
    • hdfs dfs -mkdir -p /user/root (遞迴建立目錄)
  2. SecondaryNameNode 只需要從 NameNode 拷貝最後時點的 FSImage 和增量 EditLog

  3. /var/bigdata/hadoop/local/dfs/data/current/BP-1520940053-172.17.0.2-1603517073931/current/finalized/subdir0/subdir0

    • 檔案被切割成四個塊, 每個塊伴隨著校驗和
  4. 自定義塊大小

    for i in `seq 100000`;do echo "hello hadoop $i" >> data.txt;done hdfs dfs -D dfs.blocksize=1048576 -put data.txt /var/bigdata/hadoop/local/dfs/data/current/BP-1520940053-172.17.0.2-1603517073931/current/finalized/subdir0/subdir0

    檢查被切割的塊