入坑准備
在開始學習Hadoop之前需要提前准備幾個服務器。我在虛擬機上提前准備了4個Centos_7 64位的操作系統。並需要完成一下配置:
網絡配置:
1.修改主機名
2.設置映射關系
[root@master ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 222.18.157.50 hdp-master 222.18.157.51 hdp-slaver1 222.18.157.52 hdp-slaver2 222.18.157.53 hdp-slaver3
3.修改IP地址
[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 DEVICE=ens33 ONBOOT=yes # ipaddr gateway netmask dns IPADDR=222.18.157.50 GATEWAY=222.18.157.2 NETMASK=255.255.255.0 DNS1=114.114.114.114 DNS2=8.8.8.8
免密登陸設置:
在整個學習過程中,將hdp-master(222.18.157.50)設置為主機。hdp-slaver1(222.18.157.51)、hdp-slaver2(222.18.157.52)、hdp-slaver3(222.18.157.53)設置為從機。
在整個過程中,為了方便主機對從機的管理,需要進行免密登陸配置。
[root@hdp-master ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:kJEWZWy/U0INFpu5C58hcpPeeKLyeearUfUUK7JffQ0 root@hdp-master The key's randomart image is: +---[RSA 2048]----+ | o=o ++. | | o+o..+.o | | .o..o* o E | | . =o=.. ..| | . S o+o . o| | = Oo= . | | . + B. | | . +oo | | o==o. | +----[SHA256]-----+
可以發現目錄中多了一個.ssh隱藏文件,進入可以查看已經生成了相應的公鑰和私鑰文件。
[root@hdp-master ~]# cd .ssh/ [root@hdp-master .ssh]# ll 總用量 8 -rw-------. 1 root root 1679 9月 10 21:26 id_rsa -rw-r--r--. 1 root root 397 9月 10 21:26 id_rsa.pub
將公鑰文件拷貝到從機上即可。
[root@hdp-master .ssh]# ssh-copy-id root@hdp-slaver1 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@hdp-slaver1's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@hdp-slaver1'" and check to make sure that only the key(s) you wanted were added.
這樣hdp-master的公鑰就成功的拷貝到了從機hdp-slaver1上。注意,免密登陸是單向的。
JDK安裝:
由於Hadoop是用Java開發的,所以在正式安裝Hadoop之前還需要安裝JDK,點擊這里下載JDK。從官網上下載JDK的Linux版本的.tar.gz壓縮包並解壓。
將JDK添加到環境變量中,打開/etc/profile文件,並在最后添加以下代碼:
export JAVA_HOME=/root/learn_hadoop/jdk
export PATH=.:$PATH:$JAVA_HOME/bin
再執行source /etc/profile命令,使修改后的配置文件生效。可以執行以下命令查看Java的版本:
[root@hdp-master learn_hadoop]# java -version java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Hadoop安裝
經過了上述繁瑣的准備之后,現在開始正式安裝hadoop了。同樣需要從Hadoop官方網站上下載安裝包。在這里我下載的Hadoop版本是3.1.1,將下載后的安裝包解壓。
環境變量配置:
打開/etc/profile文件並添加下列代碼並執行source /etc/profile代碼:
export HADOOP_HOME=/root/learn_hadoop/hdp
export PATH=.:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
修改core-site.xml
在/root/learn_hadoop/hdp/etc/hadoop路徑下修改core-site.xml配置文件:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://222.18.157.50:9000</value> </property> </configuration>
修改hdfs-site.xml
在/root/learn_hadoop/hdp/etc/hadoop路徑下修改hdfs-site.xml配置文件:
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/root/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/root/dfs/data</value> </property> </configuration>
在Hadoop安裝過程中的一些基本配置已經完成,為了避免在從機中進行相同的操作,只需要將主機中的包拷貝到從機中即可。
HDFS客戶端的操作
HDFS客戶端有多種形式:
1.網頁模式
2.命令行模式
客戶端在那里運行並沒有約束,只要運行客戶端的機器能夠和HDFS集群連網就行。
文件的切塊大小和存儲的副本數量,都是由客戶端決定!
所謂的由客戶端決定,是通過配置參數來定的。HDFS的客戶端會讀以下兩個參數,來決定切塊大小、副本數量:
切塊大小的參數: dfs.blocksize
副本數量的參數: dfs.replication
啟動HDFS
在第一次啟動HDFS前需要初始化namenode的元數據目錄。(這一步非常重要!!!)
hadoop namenode -format
然后在hdp-master主機上啟用namenode的進程
hdfs --daemon start namenode
在windows中用瀏覽器訪問namenode提供的web端口:9870即可。
hdfs://222.18.157.50:9870
最后就可以啟動集群中的datanode
hdfs --daemon start datanode
自動啟動Hadoop集群
1. 配置在目錄 $HADOOP_HOME/etc/hadoop/ 下的 workers文件。將需要統一啟動的集群主機名寫入文件。
2. 配置在目錄 $HADOOP_HOME/sbin/ 下的文件 start-dfs.sh 和 stop-dfs.sh:
分別在文件前面寫入下列語句:
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
3. 配置在目錄 $HADOOP_HOME/sbin/ 下的文件 start-yarn.sh 和 stop-yarn.sh:
分別在文件前邊寫入下列語句:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
配置完成后就可以在Linux終端執行 start ,stop 語句,實現自動啟動集群功能。
HDFS客戶端命令行操作命令
查看hdfs中的目錄信息
hadoop fs -ls /hdfs路徑
上傳文件到hdfs中
hadoop fs -put /本地文件 /aaa hadoop fs -copyFromLocal /本地文件 /hdfs路徑 ## copyFromLocal等價於 put hadoop fs -moveFromLocal /本地文件 /hdfs路徑 ## 跟copyFromLocal的區別是:從本地移動到hdfs中
下載文件到客戶端本地磁盤
hadoop fs -get /hdfs中的路徑 /本地磁盤目錄 hadoop fs -copyToLocal /hdfs中的路徑 /本地磁盤路徑 ## 跟get等價 hadoop fs -moveToLocal /hdfs路徑 /本地路徑 ## 從hdfs中移動到本地
在hdfs中創建文件夾
hadoop fs -mkdir -p /aaa/xxx
移動hdfs中的文件(更名)
hadoop fs -mv /hdfs的路徑 /hdfs的另一個路徑
刪除hdfs中的文件或文件夾
hadoop fs -rm -r /aaa
修改文件的權限
hadoop fs -chown user:group /aaa hadoop fs -chmod 700 /aaa
追加內容到已存在的文件
hadoop fs -appendToFile /本地文件 /hdfs中的文件
顯示文本文件的內容
hadoop fs -cat /hdfs中的文件 hadoop fs -tail /hdfs中的文件