hadoop集群搭建

Posted 有水先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hadoop集群搭建相关的知识,希望对你有一定的参考价值。

环境

操作系统: debian
hadoop版本:apache 2.6.4
java版本:jdk8

ssh免密登陆

参考之前的文章: ssh免密登陆部署

修改主机名

分别在三台机器中,以root用户修改主机名为hadoop-master、hadoop-slave1、hadoop-slave2:

修改后,记得重启机器,才能生效

修改域名

在三台机器中,在/etc/hosts文件中追加如下内容:

Java安装

从:=》jdk8下载链接《=中下载jdk-8u202-linux-x64.tar.gz文件,上传到3台服务器上,解压,并配置环境变量:

使用root用户:

验证java安装:

hadoop组件规划

域名 组件
hadoop-master NameNode DataNode ResourceManager NodeManager SecondaryNameNode
hadoop-slave1 DataNode NodeManager
hadoop-slave1 DataNode NodeManager

hadoop包准备

在=》 apache hadoop2.6下载链接《=中下载hadoop-2.6.4.tar.gz文件,上传到3台服务器上,解压,并配置环境变量:

配置hadoop环境

hadoop-env.sh

配置hadoop启动过程ssh通信端口和jdk位置

core-site.xml

core-site.xml用于存储hadoop全局参数,如下参数须在core-site.xml文件中定义:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop-master:9000</value>
    <description>namenode暴露9000端口给客户端访问</description>
    <description>secondary namenode存储editlog和fsimage位置</description>
    </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/home/yuliang02/hadoop/tmp</value>
  </property>
</configuration>

在core-site.xml中定义fs.defaultFS后,命令行默认就访问这个hdfs集群:

如果把fs.defaultFS放到hdfs-site.xml中,就只能指定hadoop集群访问了:

必须在core-site中定义hadoop.tmp.dir,不然运行mapreduce程序时,发生如下错误:

hdfs-site.xml

定义文件存储目录,这些文件指定的目录不需要手动创建,格式化时已经定义好了。

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.name.dir</name>
        <value>/home/yuliang02/hadoop/name</value>
    <description>namenode存储editlog和fsimage位置</description>
    </property>
    <property>
        <name>dfs.data.dir</name>
        <value>/home/yuliang02/hadoop/data</value>
    <description>datanode存储block的位置</description>
    </property>
</configuration>

slaves文件

slaves文件指定哪些机器启动datanode服务和nodemanager服务。只在集群统一启动与集群统一关闭的时候有用。

hadoop-master
hadoop-slave1
hadoop-slave2

yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop-master</value>
        <description>指定resoruce-manager主机名</description>
    </property>
</configuration>

mapred-site.xml

<configuration>
<property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
   <property>
      <name>mapred.job.tracker</name>
      <value>http://hadoop-master:9001</value>
  </property>
  <property>
      <name>mapred.local.dir</name>
      <value>/home/yuliang02/hadoop/tmp</value>
  </property>
</configuration>

验证安装成果

默认50070端口访问hdfs UI:

默认8088端口访问yarn UI:

跑mapreduce程序:

成功:

Number of Maps  = 10
Samples per Map = 10
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Wrote input for Map #4
Wrote input for Map #5
Wrote input for Map #6
Wrote input for Map #7
Wrote input for Map #8
Wrote input for Map #9
Starting Job
21/10/07 21:08:41 INFO client.RMProxy: Connecting to ResourceManager at hadoop-master/10.212.31.65:8032
21/10/07 21:08:42 INFO input.FileInputFormat: Total input paths to process : 10
21/10/07 21:08:42 INFO mapreduce.JobSubmitter: number of splits:10
21/10/07 21:08:43 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1633612082365_0001
21/10/07 21:08:43 INFO impl.YarnClientImpl: Submitted application application_1633612082365_0001
21/10/07 21:08:43 INFO mapreduce.Job: The url to track the job: http://hadoop-master:8088/proxy/application_1633612082365_0001/
21/10/07 21:08:43 INFO mapreduce.Job: Running job: job_1633612082365_0001
21/10/07 21:08:55 INFO mapreduce.Job: Job job_1633612082365_0001 running in uber mode : false
21/10/07 21:08:55 INFO mapreduce.Job:  map 0% reduce 0%
21/10/07 21:09:21 INFO mapreduce.Job:  map 40% reduce 0%
21/10/07 21:09:33 INFO mapreduce.Job:  map 40% reduce 13%
21/10/07 21:09:36 INFO mapreduce.Job:  map 100% reduce 13%
21/10/07 21:09:39 INFO mapreduce.Job:  map 100% reduce 100%
21/10/07 21:09:44 INFO mapreduce.Job: Job job_1633612082365_0001 completed successfully
...
...
Job Finished in 62.845 seconds
Estimated value of Pi is 3.20000000000000000000

踩坑经历

UI显示datanode只有一个的问题

如下,live nodes显示3个:

datanodes页面只有一个:


从上面可以看到datanodes是正常运行的。

原因:/etc/hosts配置错误,在文件最前面把每个datanode域名都设置成一样的了,这样hadoop UI就只显示一个datanode。
解决办法:注释掉域名的配置。


总结和展望

  1. 这次搭建hadoop集群,比较大胆地进行了比较多的试验,测试不同配置对于集群的影响。
  2. 以后要搭建proxyserver,history server,journal node,standby namenode。
  3. 以后要配置kerberos。

新增配置

proxy server

在yarn的RM中,包括web-proxy工程,它可以启动一个单独的进程,对外提供web服务,从resourcemanager上点击正在执行的app,会跳转到yarn.web-proxy.address,这里展示正在执行的job信息,job执行结束后,会跳转到historyserver上;如果没有配置yarn.web-proxy.address,则这个功能会集成到RM中。

在yarn-site.xml中增加如下配置:

<property>
  <name>yarn.web-proxy.address</name>
  <value>hadoop-master:8090</value>
</property>

单独启动proxy server,start-all.sh并不能启动proxyserver:

如图可看到,点击8088端口的Application Master链接后,会跳转到8090端口,即proxy server服务,通过proxy server访问Application Master,而不是通过Resource Manager访问Application Master,这样即使Application Master链接有毒,中毒的只是proxy server而已,这样更好地保障了Resource Manager的安全。

history server

https://cloud.tencent.com/developer/article/1701489
https://www.cnblogs.com/lemonu/p/12956741.html

以上是关于hadoop集群搭建的主要内容,如果未能解决你的问题,请参考以下文章

如何搭建hadoop集群 桥接

Hadoop集群搭建(一主二从)

【大数据】使用Docker搭建Hadoop集群

大数据实战——hadoop集群安装搭建

Hadoop集群搭建(一主二从)

Hadoop集群搭建(一主二从)