這篇文章主要是講Hadoop2.9.2集群環(huán)境的搭建,其他關于Hadoop相關的一些知識可以從網絡上去查看。
1.機器準備
????我這里集群環(huán)境是由4臺機器組成,其中一臺作為NameNode,其他3臺作為DataNode。如果使用虛擬機的話,可以先配置好一臺機器,另外3臺使用虛擬機的克隆方法直接克隆即可。
1.1 IP配置
hadoop集群中我們把所有的機器都設置為靜態(tài)的ip,網絡設置方法:
vi?/etc/sysconfig/network-scripts/ifcfg-XXX (備注XXX指的是具體的網卡名字)文件中添加以下屬性
BOOTPROTO=static? # 設置為靜態(tài)ip
IPADDR=192.168.0.101 # 具體的ip地址 看自己情況
NETMASK=255.255.255.0 # 子網掩碼
GATEWAY=192.168.0.1 # 網關地址 看自己路由器情況
DNS1=192.168.0.1 # 域名解析器1 看自己路由器情況
DNS2=114.114.114.114 #備用域名解析器2
ONBOOT=yes # 設置為自動啟用該網卡
1.2 域名配置(所有機器都需要配置)
ip配置好之后,為了方便使用,我們可以給每臺機器都設置一個方便記憶的域名。
使用命令vi /etc/hosts編輯該文件,添加以下內容
192.168.0.101 namenode.bigdata.com? # 前面寫機器的ip 后面自己定義一個域名
192.168.0.102 datanode1.bigdata.com
192.168.0.103 datanode2.bigdata.com
192.168.0.104 datanode3.bigdata.com
配置好之后,每臺機器都可以通過 ping 域名測試一下是否能夠互通。
ping?namenode.bigdata.com
ping?datanode1.bigdata.com
ping?datanode2.bigdata.com
ping?datanode3.bigdata.com
1.3 免密登錄配置(所有機器都需要配置)
????因為hadoop集群中,我們啟動集群時,會使用遠程的方式訪問別的集群中的機器,為了方便使用,我們可以設置免密的遠程登錄功能。
????這里使用RSA的加密,RSA會生成兩個秘鑰串,一個是私鑰保存在id_rsa文件中,另外一個是公鑰保存在id_rsa.pub文件中,私鑰自己保留,把公鑰發(fā)送到別的機器的authorized_keys文件中,別的機器遠程訪問該機器時,會攜帶公鑰一起過來,公鑰就會和私鑰進行配對,如果能配對成功,就運行其登錄。
a. 新建一個hadoop用戶用于免密登錄的
useradd hadoop
passwd hadoop 設置密碼
切換用戶
su - hadoop
b. 創(chuàng)建公鑰和私鑰? 保存的路徑在 ~/.ssh目錄下 (~表示當前登錄用戶的home目錄)
ssh-keygen -t rsa
生成兩個文件
id_rsa 私鑰
?id_rsa.pub 公鑰
c. 把所有機器的公鑰都保存在一個認證文件authorized_keys中
authorized_keys認證文件中保存了所有機器的公鑰。
認證文件也保存在~/.ssh目錄下
先在一臺機器上操作 namenode.bigdata.com
在hadoop用戶的home目錄下執(zhí)行以下命令:
可以輸入cd 回車進入當前登錄的用戶的home目錄
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
將遠程機器的公鑰一起輸入到當前機器authorized_keys文件中
?ssh hadoop@datanode1.bigdata.com cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh hadoop@datanode2.bigdata.com cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh hadoop@datanode3.bigdata.com cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
d. 把 namenode.bigdata.com機器中的認證文件 分發(fā)到其他的三臺機器中
?scp .ssh/authorized_keys hadoop@datanode1.bigdata.com:~/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@datanode2.bigdata.com:~/.ssh/authorized_keys
scp .ssh/authorized_keys hadoop@datanode3.bigdata.com:~/.ssh/authorized_keys
?f. 將機器名添加至可信任的機器列表中
?還是先在namenode.bigdata.com機器上操作 ,然后將文件分發(fā)到其他3臺機器中
ssh hostname
例如:
?shh localhost
ssh namenode.bigdata.com
ssh datanode1.bigdata.com
ssh datanode2.bigdata.com
ssh datanode3.bigdata.com
分發(fā):
scp .ssh/known_hosts hadoop@datanode1.bigdata.com:~/.ssh/known_hosts
scp .ssh/known_hosts hadoop@datanode2.bigdata.com:~/.ssh/known_hosts
scp .ssh/known_hosts hadoop@datanode3.bigdata.com:~/.ssh/known_hosts
d. 確認文件權限
?.ssh 700
.ssh/authorized_keys 600
e. 修改配置文件? 需要切換至root登錄
vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile? ? ? .ssh/authorized_keys
2. 安裝環(huán)境 root用戶(所有機器都要安裝)
?2.1 jdk環(huán)境
yum 安裝
yum install -y java-1.8.0-openjdk-devel.x86_64
2.2 hadoop 安裝
先安裝 yum install -y wget
wget https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.2/hadoop-2.9.2.tar.gz
在線將后面路徑中的文件下載到本地?
解壓hadoop至 /usr/local目錄下
tar -xvf hadoop-2.9.2.tar.gz -C /usr/local
2.3 配置環(huán)境變量
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
export HADOOP_HOME=/usr/local/hadoop-2.9.2
?export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
?vi /usr/local/hadoop-2.9.2/etc/hadoop/hadoop-env.sh
source /etc/profile 使環(huán)境變量生效
添加
?export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
3. 修改hadoop的配置文件
使用root賬戶修改hadoop的文件的所有者
chown -R hadoop:hadoop /usr/local/hadoop-2.9.2
切換至hadoop用戶
su - hadoop
配置文件的目錄:/usr/local/hadoop-2.9.2/etc/hadoop
修改以下幾個配置文件
core-site.xml 配置集群的核心配置文件
<configuration>
? ? <property>
? ? ? ? <name>fs.defaultFS</name>
? ? ? ? <value>hdfs://namenode.bigdata.com:9000</value>
? ? </property>
? ? <property>
? ? ? ? <name>hadoop.tmp.dir</name>
? ? ? ? <value>file:/usr/local/hadoop-2.9.2/tmp</value>
? ? </property>
</configuration>
?hdfs-site.xml:配置HDFS的信息
<configuration>
? ? <property>
? ?? ? <name>dfs.namenode.name.dir</name>
? ?? ? <value>file:/usr/local/hadoop-2.9.2/data/namespace</value>
? ?? ? <final>true</final>
? ?? ? <description>Path on the local filesystem where the NameNode stores</description>
? ? </property>
? ? <property>
? ?? ? <name>dfs.datanode.data.dir</name>
? ?? ? <value>/usr/local/hadoop-2.9.2/data/dataspace</value>
? ?? ? <final>true</final>
? ?? ? <description>Path on the local filesystem where the DataNode stores Data</description>
? ? </property>
? ? <property>
? ?? ? <name>dfs.namenode.secondary.http-address</name>
? ?? ? <value>namenode.bigdata.com:9100</value>
? ? ? ? <final>true</final>
? ? ? ? <description>The secondary namenode http server address and port</description>
? ? </property>
? ? <property>
? ?? ? <name>dfs.webhdfs.enabled</name>
? ?? ? <value>true</value>
? ?? ? <final>true</final>
? ?? ? <description>Enable WebHDFS (REST API) in Namenodes and Datanodes</description>
? ? </property>
? ? <property>
? ? ? ? <name>dfs.permissions</name>
? ? ? ? <value>false</value>
? ? ? ? <final>true</final>
? ? ? ? <description>Disable permission checking in HDFS</description>
? ? </property>
? ? <property>
? ?? ? <name>dfs.replication</name>
? ?? ? <value>3</value>
? ? ? ? <final>true</final>
? ? ? ? <description>Default block replication</description>
? ? </property>
</configuration>
?mapred-site.xml 配置MapReduce
<configuration>
? ? <property>
? ?? ? <name>mapreduce.framework.name</name>
? ? ? ? <value>yarn</value>
? ? ? ? <final>true</final>
? ? ? ? <description>The runtime framework for executing MapReduce jobs</description>
? ? </property>
</configuration>
yarn-site.xml 配置yarn
<configuration>
? ? <property>
? ? ? ? <name>yarn.resourcemanager.scheduler.address</name>
? ? ? ? <value>datanode1.bigdata.com:9001</value>
? ? ? ? <final>true</final>
? ? ? ? <description>The address of the scheduler interface</description>
? ? </property>
? ? <property>
? ? ? ? <name>yarn.resourcemanager.resource-tracker.address</name>
? ? ? ? <value>datanode1.bigdata.com:9002</value>
? ? ? ? <final>true</final>
? ? </property>
? ? <property>
? ?? ? <name>yarn.resourcemanager.address</name>
? ? ? ? <value>datanode1.bigdata.com:9003</value>
? ? ? ? <final>true</final>
? ? ? ? <description>The address of the applications manager interface in the RM</description>
? ? </property>
? ? <property>
? ?? ? <name>yarn.resourcemanager.admin.address</name>
? ? ? ? <value>datanode1.bigdata.com:9004</value>
? ? ? ? <final>true</final>
? ? ? ? <description>The address of the RM admin interface</description>
? ? </property>
? ? <property>
? ?? ? <name>yarn.resourcemanager.webapp.address</name>
? ? ? ? <value>datanode1.bigdata.com:9005</value>
? ? ? ? <final>true</final>
? ? ? ? <description>The http address of the RM web application</description>
? ? </property>
? ? <property>
? ? ? ? <name>yarn.nodemanager.aux-services</name>
? ? ? ? <value>mapreduce_shuffle</value>
? ? ? ? <final>true</final>
? ? </property>
</configuration>
slaves:添加所有的數據結點的host
datanode1.bigdata.com
datanode2.bigdata.com
datanode3.bigdata.com
先配置好一臺機器
分發(fā)至其他機器
scp core-site.xml hdfs-site.xml mapred-site.xml slaves yarn-site.xml hadoop@datanode1.bigdata.com:/usr/local/hadoop-2.9.2/etc/hadoop
scp core-site.xml hdfs-site.xml mapred-site.xml slaves yarn-site.xml hadoop@datanode2.bigdata.com:/usr/local/hadoop-2.9.2/etc/hadoop
scp core-site.xml hdfs-site.xml mapred-site.xml slaves yarn-site.xml hadoop@datanode3.bigdata.com:/usr/local/hadoop-2.9.2/etc/hadoop
4. 啟動集群
?4.1 格式化 在namenode主節(jié)點上操作 只需操作一次
這步操作就類似于你重裝系統(tǒng)時,必須要先格式化是一個意思。格式化會清空HDFS上的所有文件的。
hdfs namenode -format hadoop_cluster
4.2 啟動集群 hadoop用戶啟動
任意結點都可以
開啟 start-dfs.sh
關閉集群 stop-dfs.sh
4.3 啟動yarn 需要在yarn的resourcemanager機器上啟動
開啟 start-yarn.sh
關閉stop-yarn.sh
啟動之后可以通過jps命令查看進程