Hadoop:搭建伪分布式集群

配置SSH免密登录

免密登录的前提是两台服务器上都必须安装了SSH服务,当服务器A远程请求登录到服务器B时,服务器B会查看授权文件(authorized_keys),如果授权文件没有服务器A的公钥则直接不让其免密登录,如果查找到服务器A的公钥则用该公钥加密一个随机码返回给服务器A,服务器A拿到这个随机码后用本机的私钥进行解密,解密结果用自己的私钥加密后再次发给服务器B,服务器B比对结果如果验证通过则让其免密登录。

注: 在非对称加密中公钥加密的数据只有私钥能解,反之私钥加密的数据只有公钥能解

配置

1、在服务器A上生成一个公钥私钥对

1
ssh-keygen

执行后会在当前用户的家目录中的 .ssh 目录下生成id_rsa和id_rsa.pub两个文件,分别为私钥和公钥。
2、将公钥拷贝到服务器B

1
scp id_rsa.pub 192.168.56.101:/

3、登录服务器B将服务器A的公钥加入到授权文件中

1
cat /id_rsa.pub >> .ssh/authorized_keys

注: authorized_keys文件在用户家目录中的.ssh目录下,如果该目录下没有这个文件可以创建它,但该文件的权限必须为-rw——-(600)

SSH提供了一个更加简单的命令来简化上面步骤2和步骤3

1
ssh-copy-id 192.168.56.101

至此配置完成,测试

1
ssh 192.168.56.101

搭建Hadoop伪分布式集群

伪分布式顾名思义就是把软件的各个组件安装装在一台服务器上,但操作方式与完全分布式集群没有任何区别,一般用于做测试时使用。

环境说明:CentOS-7、Hadoop-2.7.3、JDK-1.8

安装JDK

Java系的软件安装比较简单,只需解压即可

1
tar -zxf jdk.tar.gz -C /opt

配置环境变量

1
vi /etc/profile

追加内容

1
2
export JAVA_HOME=/opt/jdk
export PATH=$PATH:$JAVA_HOME/bin

让其生效

1
source /etc/profile

安装Hadoop

解压

1
tar -zxf hadoop.tar.gz -C /opt

配置环境变量

1
vi /etc/profile

追加内容

1
2
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

让其生效

1
source /etc/profile

配置Hadoop

Hadoop的配置文件在$HADOOP_HOME/etc/hadoop下
1、修改 hadoop-env.sh

1
export JAVA_HOME=/opt/jdk

注: 因为Hadoop是通过SSH来启动组件,由于不在同一个Shell环境中所以通过$HADOOP_HOME的方式取不到对应的值

2、修改 core-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!-- 配置NameNode所在节点 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<!-- 配置数据存放位置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.3/data</value>
</property>
</configuration>

3、修改 hdfs-site.xml

1
2
3
4
5
6
7
<configuration>
<!-- 配置文件副本数,由于我们是伪分布式只有一台服务器所以配置成1 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

4、修改 mapred-site.xml

1
2
3
4
5
6
7
<configuration>
<!-- 指定MR运行在YARN上,默认值为local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

5、修改 yarn-site.xml

1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!-- 指定NodeManager获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址(主机名),由于只有一台服务器所以填本机即可 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
</configuration>

6、修改 slaves
该文件的作用为指定DataNode和NodeManager节点所在位置,其默认值为localhost所以可以不用修改

7、配置本机到本机的免密登录

1
2
3
4
5
# 生成公钥私钥对
ssh-keygen

# 拷贝给本机
ssh-copy-id localhost

Hadoop的组件是通过SSH来启动的,如果不配置的话会频繁输入密码

初始化Hadoop

1、格式化HDFS

1
2
3
4
5
# 旧命令
hadoop namenode -format

# 推荐命令
hdfs namenode -format

格式化完后会发现core-site.xml配置项 hadoop.tmp.dir 配置的目录下会出现一些文件, dfs/name 下存放的是NameNode的数据,dfs/data 下存放的是DataNode的数据

2、启动与关闭Hadoop服务组件

1
2
3
4
5
6
7
8
9
10
11
12
#----------- 开启服务 ------------
start-all.sh # 启动所有组件,已不推荐使用

# 官方推荐使用如下两个命令
start-dfs.sh # 启动NameNode、Secondary NameNode、DataNode
start-yarn.sh # 启动ResourceManager、NodeManager

#----------- 关闭服务 ------------
stop-all.sh # 关闭所有,不推荐使用

stop-dfs.sh # 关闭NameNode、Secondary NameNode、DataNode
stop-yarn.sh # 关闭ResourceManager、NodeManager

启动完成后可以使用JDK自带的工具检测组件是否启动成功,输入命令 jps 如果出现上文出现的5个进程则表示启动成功

  • 本文作者: Harmel
  • 本文链接: http://www.harmel.cn/2018/09/hadoop-pseudo-distributed.html
  • 版权声明: 文章如无特别说明,则表明该文章为原创文章,如需要转载,请注明出处。
  • 本站说明: 本站使用阿里云服务器,如果您喜欢我的网站,欢迎收藏,能捐赠支持一下就再好不过了。