这篇文章主要是讲Hadoop2.9.2集群环境的搭建,其他关于Hadoop相关的一些知识可以从网络上去查看。
1.机器准备
我这里集群环境是由4台机器组成,其中一台作为NameNode,其他3台作为DataNode。如果使用虚拟机的话,可以先配置好一台机器,另外3台使用虚拟机的克隆方法直接克隆即可。
1.1 IP配置
hadoop集群中我们把所有的机器都设置为静态的ip,网络设置方法:
vi /etc/sysconfig/network-scripts/ifcfg-XXX (备注XXX指的是具体的网卡名字)文件中添加以下属性
BOOTPROTO=static # 设置为静态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文件中,私钥自己保留,把公钥发送到别的机器的authorized_keys文件中,别的机器远程访问该机器时,会携带公钥一起过来,公钥就会和私钥进行配对,如果能配对成功,就运行其登录。
a. 新建一个hadoop用户用于免密登录的
useradd hadoop
passwd hadoop 设置密码
切换用户
su - hadoop
b. 创建公钥和私钥 保存的路径在 ~/.ssh目录下 (~表示当前登录用户的home目录)
ssh-keygen -t rsa
生成两个文件
id_rsa 私钥
id_rsa.pub 公钥
c. 把所有机器的公钥都保存在一个认证文件authorized_keys中
authorized_keys认证文件中保存了所有机器的公钥。
认证文件也保存在~/.ssh目录下
先在一台机器上操作 namenode.bigdata.com
在hadoop用户的home目录下执行以下命令:
可以输入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机器中的认证文件 分发到其他的三台机器中
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机器上操作 ,然后将文件分发到其他3台机器中
ssh hostname
例如:
shh localhost
ssh namenode.bigdata.com
ssh datanode1.bigdata.com
ssh datanode2.bigdata.com
ssh datanode3.bigdata.com
分发:
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. 安装环境 root用户(所有机器都要安装)
2.1 jdk环境
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 配置环境变量
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 使环境变量生效
添加
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
先配置好一台机器
分发至其他机器
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主节点上操作 只需操作一次
这步操作就类似于你重装系统时,必须要先格式化是一个意思。格式化会清空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命令查看进程