centOS 7 环境下安装Hadoop2.6
本文采用模拟分布式(自己创建了俩个虚拟机进行模拟)体验安装Hadoop的过程。
参考文章:
渣渣的夏天——CentOS 7.6 安装 Hadoop2.6.0
羽风之歌——CentOS 7.0 hadoop 2.6 安装与配置
程序媛想事儿——一步步教你Hadoop多节点集群安装配置
一、环境及所需软件
1.环境
我使用的操作系统是centOS 7 ,运行在VMWare15 pro虚拟机上。
开启了两个虚拟机,一台作为NameNode。另一台作为DataNode。
对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS(Hadoop Distributed Filesystem)集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。
2.软件
把压缩包添加到虚拟机中的方式有很多。我是选择了在虚拟机中下载。
选择了2.6.0版本的Hadoop和1.7.0_80的jdk。下载jdk需要oracle账号,没有就注册一下就好。
二、前期准备
没有特别说明,本文的操作即是在NameNode这台虚拟机的root用户下的操作。
1.解压缩软件
(1)将下载好的Hadoop放在/home/hadoop-2.6下。放在什么目录下,这个自己随便,只要在配置环境变量时注意就好了。
创建 /home/hadoop-2.6 文件夹
mkdir /home/hadoop-2.6
转到 /home/hadoop-2.6 文件夹下
cd /home/hadoop-2.6
将hadoop压缩包复制到该文件夹之下
#linux默认下载到用户的download文件夹之下,注意自己的文件路径,yyq是我的用户名
cp /home/yyq/下载/hadoop-2.6.0.tar.gz /home/hadoop-2.6
解压缩
tar -zxvf hadoop-2.6.0.tar.gz
(2)相似的步骤,把jdk放在 /home/jdk 文件夹下解压缩
mkdir /home/jdk
cd /home/hadoop-2.6
cp /home/yyq/下载/jdk-7u80-linux-i586.tar.gz /home/jdk
tar -zxvf jdk-7u80-linux-i586.tar.gz
2.配置环境变量
编辑配置文件
vi ~/.bash_profile
在文末添加以下配置,注意环境变量的路径,根据自己的路径来写:
#export PATH
export JAVA_HOME=/home/jdk/jdk1.7.0_80
export JAVA_JRE=/home/jdk/jdk1.7.0_80/jre
export HADOOP_HOME=/home/hadoop-2.6/hadoop-2.6.0
# path
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export PATH=$JAVA_HOME/bin:$PATH
更新配置
source ~/.bash_profile
3.开启NameNode与DataNode之间的ssh免密登录
3.1 为什么要开启ssh免密登录
Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。
3.2 ssh免密登录的原理
SSH之所以能够保证安全,原因在于它采用了公钥加密。过程如下:
①远程主机收到用户的登录请求,把自己的公钥发给用户。
②用户使用这个公钥,将登录密码加密后,发送回来。
③远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
3.3 实现
(1)修改主机名
主机名的主要作用就是可以不用记比如 129.45.36.1 这样的的地址,主机名就是网络IP的一个别名,叫什么不重要。但是为了方便,我们还是修改下。
将NameNode的主机名修改为NameNode,输入命令
vi /etc/hostname
#把其中的内容替换为“NameNode”,并保存退出。
去到DataNode虚拟机里,按照相同的步骤进行操作,修改主机名为DataNode1。
vi /etc/hostname #在DataNode1的root用户下。
#把其中的内容替换为“NameNode”,并保存退出。
(2)配置IP地址和其对应主机名
修改NameNode和DataNode的 /etc/hosts 文件,都是root用户
vi /etc/hosts
#在文件中添加以下内容,IP地址需要跟自己的虚拟机相匹配,这个要自己查,一定要一定好IP地址与主机名的关系。
192.168.140.146 DataNode1
192.168.140.145 NameNode
(3)设置秘钥
NameNode虚拟机中:
ssh-keygen -t rsa # 输入后按三次 enter 键即可
DataNode虚拟机中:
#DataNode的root用户
ssh-keygen -t rsa
输入后按三次 enter 键即可,生成的密钥会自动保存在 /root/.ssh 文件夹之下。然后将公钥交给NameNode。
#DataNode的root用户
scp /root/.ssh/id_rsa.pub root@Namenode:/root/.ssh/id_rsa.pub.Datanode1
NameNode虚拟机中:
将生成的密钥添加到authorized_keys文件中
cd /root/.ssh
cat id_rsa.pub >> authorized_keys
cat id_rsa.pub.Datanode1 >> authorized_keys
修改 authorized_keys 文件的权限,非常重要!!!必须是这个权限,不能高也不能低
chmod 644 authorized_keys
将 authorized_keys 文件也传一份到DataNode,这样DataNode也可以对NameNode进行免密登录。
scp ~/.ssh/authorized_keys root@Datanode1:/root/.ssh/authorized_keys
3.4 测试连接,并关闭防火墙
#如果不需要输入密码,那么NameNode对DataNode的免密ssh已经实现
ssh Datanode1
#关闭DataNode的防火墙
systemctl stop firewalld
#如果不需要输入密码,那么DataNode对NameNode的免密ssh已经实现
ssh Namenode
#关闭NameNode的防火墙
systemctl stop firewalld
exit
exit
三、配置Hadoop
1.准备工作
切换目录
cd $HADOOP_HOME
建立文件夹
mkdir namenode
mkdir datanode
切换目录
cd etc/hadoop/
2. 配置公共属性 core-site.xml
vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://Namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
#value一定要跟自己虚拟机的地址相对应
<value>/home/hadoop-2.6/hadoop-2.6.0/tmp/hadoop-${user.name}</value>
</property>
</configuration>
3. 配置 hdfs-site.xml
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
#value一定要跟自己虚拟机的地址相对应
<value>/home/hadoop-2.6/hadoop-2.6.0/namenode/name_1</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
#value一定要跟自己虚拟机的地址相对应
<value>/home/hadoop-2.6/hadoop-2.6.0/datanode/data_1</value>
</property>
</configuration>
4. 配置MapReduce mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>Namenode:9001</value>
</property>
</configuration>
5. 配置 hadoop-env.sh
vi hadoop-env.sh
# 在末行添加,路径要对
export JAVA_HOME=/home/jdk/jdk1.7.0_80
6. 配置 slaves
vi slaves
Datanode1
7. 配置DataNode
把文件复制到DataNode上去。
scp -r /home/hadoop-2.6/ root@Datanode1:/home/hadoop-2.6
scp -r /home/jdk/ root@Datanode1:/home/jdk
注意还要配置DataNode的环境变量,详情见本文的 “二、2.”。
四、验证Hadoop是否配置成功
运行Hadoop
cd $HADOOP_HOME
cd etc/hadoop
# 仅第一次启动需要格式化,之后直接切换到该目录下输入启动命令即可,多次格式化会出错
hdfs namenode -format
# 启动
start-dfs.sh
# 关闭
# stop-dfs.sh