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)
-
配置Hadoop環境變數 (hadoop-env.sh 中配置 JAVA_HOME)
-
core-site.xml 中配置localhost為主機名
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node01:9000</value> </property> </configuration>
-
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>
-
slaves / workers 配置datanode在哪啟動
初始化和啟動
-
初始化
- hdfs namenode -format
- 建立目錄
- 初始化一個空的fsimage
- VERSION: 存放叢集ID
- hdfs namenode -format
-
成功標誌
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
-
進入 name/current 觀察 editlog 的 id 是否在 fsimage 的後面
- hdfs dfs : 列出支援的檔案操作命令
- hdfs dfs -mkdir /bigdata
- hdfs dfs -mkdir -p /user/root (遞迴建立目錄)
-
SecondaryNameNode 只需要從 NameNode 拷貝最後時點的 FSImage 和增量 EditLog
-
/var/bigdata/hadoop/local/dfs/data/current/BP-1520940053-172.17.0.2-1603517073931/current/finalized/subdir0/subdir0
- 檔案被切割成四個塊, 每個塊伴隨著校驗和
-
自定義塊大小
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
檢查被切割的塊