Hadoop HDFS 3.2的部署


    之前寫過HDFS 2.6的部署,最近項目中嘗試使用最新的HDFS 3.2.1做離線存儲,部署方式略有不同,所以這里再簡單寫一下,這里只涉及到存儲因此不再配置yarn,只配置HDFS最基本的服務NameNode、DataNode、以及SecondaryNameNode,我這里用到的包是hadoop-3.2.1.tar.gz

    部署之前主機名&hosts,防火牆,ssh互信,jdk這些都不用說了,一定要提前配置標准,jdk用1.8即可,我這里6台機器,計划是其中1個NameNode,1個SecondaryNameNode,6個都是DataNode,當然這里是最簡單的配置沒有做NameNode高可用,這個放到后來再寫,由於hdfs每個節點配置都完全一樣,所以在一個節點配置好發送到其他節點就可以啦,下面開始配置:

    1). 解壓hadoop到指定位置

tar -xvzf hadoop-3.2.1.tar.gz -C /opt
ln -s hadoop-3.2.1 hadoop
cd /opt/hadoop

    同樣這里軟鏈接是慣用設置,然后開始配置

    2). 編輯etc/hadoop/core-site.xml,在<configuration></configuration>填入下面的配置:

        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://cloud1:9001</value>
        </property>
        <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>

    fs.defaultFS和之前2.6配置一樣,寫namenode的主機名和自己定義的端口,由於9000有沖突,因此我這里用9001

    io.file.buffer.size這個是寫文件操作的緩沖區大小,默認是4096B,這里調大為128k

    我這里配置上面兩個就夠了,另外還有臨時文件目錄hadoop.tmp.dir選項,需要也可以添加一下,完整的默認配置列表參考鏈接:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/core-default.xml,對應當前目錄下的share/doc/hadoop/hadoop-project-dist/hadoop-common/core-default.xml文件可以詳細查看其它的參數

    3). 編輯etc/hadoop/hdfs-site.xml,在<configuration></configuration>填入下面的配置:

        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///data/dfs/name</value>
        </property>
        <property>
                <name>dfs.hosts</name>
                <value>/opt/hadoop/etc/hadoop/dfs.hosts</value>
        </property>
        <property>
                <name>dfs.blocksize</name>
                <value>268435456</value>
        </property>
        <property>
                <name>dfs.namenode.handler.count</name>
                <value>100</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:///data/dfs/data</value>
        </property>
        <property>
                <name>dfs.namenode.http-address</name>
                <value>0.0.0.0:9870</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <property>
                <name>dfs.namenode.checkpoint.dir</name>
                <value>file:///data/dfs/namesecondary</value>
        </property>

    dfs.namenode.name.dir  配置namenode數據目錄,這個目錄啟動時會自動創建

    dfs.hosts 這個配置允許連接到namenode的主機列表,默認允許所有的主機,其實為了安全可以配置上集群所有節點的地址,對於集群內部所有節點的訪問不限制,然后再根據需要添加外部客戶端機器等,這里直接在本地磁盤創建一個文件即可,里面直接羅列所有的主機名,我這里是和配置文件放到了一塊,方便同步到其他節點

    dfs.blocksize  單個block的大小,hdfs上傳文件會把文件按照塊打散,這里使用的就是默認值,為256M

    dfs.namenode.handler.count  namenode處理rpc請求的並發數,默認是100,如果有更多的datanode或者並發比較高,則這里可以調大

    dfs.datanode.data.dir  datanode數據的本地存儲目錄,如果有多塊盤可以用逗號分隔多個目錄,這個目錄啟動時會自動創建

    dfs.namenode.http-address  配置namenode界面,默認值就是:0.0.0.0:9870

    dfs.replication  配置文件存儲的副本數,默認為3

    dfs.namenode.checkpoint.dir  配置檢查節點的數據目錄,即secondarynamenode的數據目錄,這個目錄啟動時會自動創建

    完成的默認配置參考鏈接:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml或當前目錄下的文件share/doc/hadoop/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

    4). 配置etc/hadoop/hadoop-env.sh

    必須配置的項是JAVA_HOME,如果安裝java時已經配置到/etc/profile則可以不用配置,因為我這里是openjdk所以需要配置一下:export JAVA_HOME=/usr

    HADOOP_HOME  建議配置一下,我這里是:export HADOOP_HOME=/opt/hadoop

    HADOOP_LOG_DIR 日志目錄,默認就是hadoop安裝目錄下的logs

    HADOOP_PID_DIR  hdfs服務的pid目錄,默認是在/tmp

    另外還有一些配置根據需要進行修改,當然上面這些配置都可以通過linux shell環境變量的方式設置,配置到/etc/profile或者/etc/profile.d/下面的變量文件中

export JAVA_HOME=/usr
export HADOOP_HOME=/opt/hadoop
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
export HADOOP_PID_DIR=/var/run

    5). 分發節點 & 格式化namenode & 啟動服務

    配置完上面的這些hdfs就算基本設置好了,然后可以將目錄發送到所有的其他節點,然后再每個機器分別啟動對應的服務,比如我這里節點1是namenode服務,節點2是secondarynamenode服務,節點1~6都是datanode服務,其中namenode服務和secondarynamenode服務最好分開不同的節點啟動,發送完成之后先格式化namenode:

bin/hdfs namenode -format

    格式化只執行一次,之后不要再執行,然后在每個節點分別手動以守護方式啟動服務即可:

# 啟動namenode服務
bin/hdfs --daemon start namenode
# 啟動secondarynamenode服務
bin/hdfs --daemon start secondarynamenode
# 啟動datanode服務
bin/hdfs --daemon start datanode

    這樣就啟動服務了,執行jps可以看到對應節點的對應的進程名,然后可以瀏覽器訪問http://namenode ip:9870可以看到namenode的界面

    單獨停止服務也非常簡單,只需要將上面命令的start改成stop即可

    6). 統一啟動

    上面單獨啟動的方式可能比較麻煩,也可以使用sbin/start-dfs.sh和sbin/stop-dfs.sh統一啟動和停止,啟動之前要配置hdfs的用戶,否則會報錯找不到對應的配置,其實是推薦使用hdfs專用的用戶來啟動而不是用root來啟動,上面為了方便直接用root配置的,正常來說應該有hdfs專門的用戶才對,現在修改etc/hadoop/hadoop-env.sh配置用戶:

export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root

    為了方便這里都配置成root,然后編輯etc/hadoop/workers文件里面默認是localhost,要修改成所有datanode節點的列表,啟動時腳本會自動讀取這個文件來啟動datanode節點,格式和上面咱們配置的dfs.hosts完全一樣,配置好了之后,然后就可以執行 sbin/start-dfs.sh 直接啟動整個集群了,注意這個腳本默認啟動的secondarynamenode節點和namenode是同一個節點,如果想更換節點還需要手動的進行調整. 

    上面就是hadoop hdfs 3存儲部分的基本配置了,經過上面配置就可以開始使用hdfs進行文件的存儲讀取等操作了,更多的配置以后再繼續分享,部署參考文檔:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM