之前寫過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