前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop分布式集群搭建

Hadoop分布式集群搭建

作者头像
foochane
发布2019-05-23 15:40:37
6310
发布2019-05-23 15:40:37
举报
文章被收录于专栏:foochanefoochane

Hadoop分布式集群和前面的伪分布式安装方法类似,Hadoop用户创建,ssh配置,java环境安装,Hadoop安装等过程查看前一篇:Hadoop的安装和使用

下面在两台物理机上搭建集群环境,一台机器作为Master节点,一台机器作为Slave节点,3台和3台以上机器构成的集群搭建,方法也类似。

1 网络配置

1.1 修改主机名

为了方便区分Master节点和Slave节点,先把两台机器的主机名修改为Master和Slave1。

代码语言:javascript
复制
$ sudo vim /etc/hostname

直接修改,重启即可。

1.2 在hosts文件中添加IP与主机名的映射关系

代码语言:javascript
复制
$ sudo vim /etc/hosts

Master 和Slave1两台机器都要修改

代码语言:javascript
复制
192.168.0.115  Master
192.168.0.114  Slave1

【注意】在hosts文件中 127.0.0.1 对应的主机名只能是一个 localhost**,多余的将其删除,否则会报错**

测试是否修改成功,在两台机器上测试,是否能够相互ping通。

代码语言:javascript
复制
$ ping Master -c 3   # 只ping 3次
$ ping Slave1 -c 3

2 设置SSH无密码登录节点

要让Master能够通过SSH无密码登录各个Slave节点。

因为修改过主机名,所以之前生成的公钥,需要删掉,重新生成。

在Master上执行如下命令:

代码语言:javascript
复制
cd ~/.ssh              # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*           # 删除之前生成的公匙(如果已经存在)
ssh-keygen -t rsa       # 执行该命令后,遇到提示信息,一直按回车就可以
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

接着将Master中的id_rsa.pub文件复制到Slave1中

代码语言:javascript
复制
$ scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

在Slave1中执行如下命令:

代码语言:javascript
复制
$ mkdir ~/.ssh       # 如果不存在该文件夹需先创建
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub    # 用完以后就可以删掉

在Master中验证是否可以无密码登录Slave1:$ ssh Slave1,如果成功,则配置完成。

3 配置PATH变量

~/.bashrc文件中添加如下内容,并$ source ~/.bashrc使其生效

代码语言:javascript
复制
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

4 配置集群

修改/usr/local/hadoop/etc/hadoop/下的文件

4.1 修改slaves文件

slaves文件的内容修改为:Slave1

4.2 修改core-site.xml文件

内容修改为:

代码语言:javascript
复制
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>
4.3 修改hdfs-site.xml文件

Hadoop的分布式文件系统HDFS一般采用冗余存储,一份文件通常保存3份副本,但是这里只设置了一个Slave节点,所以dfs.replication的值还是设置为1。

具体内容如下:

代码语言:javascript
复制
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>
4.4 修改mapred-site.xml文件

/usr/local/hadoop/etc/hadoop目录下的mapred-site.xml.template文件,复制重命名为mapred-site.xml,修改内容如下:

代码语言:javascript
复制
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>Master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>Master:19888</value>
        </property>
</configuration>
4.5 修改yarn-site.xml文件

内容如下:

代码语言:javascript
复制
<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

以上配置完成后,Master节点就配置完成了。

如果之前运行过伪分布式模式,现在先删除运行后的临时文件。然后把Master下的hadoop文件夹打包压缩,复制到Slave1。

代码语言:javascript
复制
$ cd /usr/local
$ sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
$ sudo rm -r ./hadoop/logs/*   # 删除日志文件
$ tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
$ cd ~
$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop
4.6 配置Slave1节点
代码语言:javascript
复制
$ sudo rm -r /usr/local/hadoop    # 删掉旧的(如果存在)
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R hadoop /usr/local/hadoop

如果还要其他节点,执行相同的操作即可。

5 启动Hadoop集群

在Master上执行。

首次运行需要,格式化名称节点./bin/hdfs namenode -format

然后就可以启动hadoop了

代码语言:javascript
复制
$ ./sbin/start-dfs.sh
$ ./sbin/start-yarn.sh
$ ./sbin/mr-jobhistory-daemon.sh start historyserver

使用jps查看启动的各个节点,缺少任何进程,都表示出错。

代码语言:javascript
复制
$ jps
3585 JobHistoryServer
2938 NameNode
3148 SecondaryNameNode
3308 ResourceManager
3629 Jps

打开浏览器输入:http://master:50070/ 就可以查看名称节点和数据节点的状态。

6 执行分布式实例

创建HDFS上的用户目录

代码语言:javascript
复制
$ hdfs dfs -mkdir -p /user/hadoop

在HDFS中创建input目录,并把/usr/local/hadoop/etc/hadoop目录中的配置文件作为输入文件复制到input目录中

代码语言:javascript
复制
$ hdfs dfs -mkdir input
$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

运行MapReduce作业

代码语言:javascript
复制
$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input outpu t 'dfs[a-z.]+'

运行成功如下:

代码语言:javascript
复制
$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input outpu t 'dfs[a-z.]+'
19/01/12 04:58:49 INFO client.RMProxy: Connecting to ResourceManager at Master/192.168.0.115:8032
19/01/12 04:58:51 INFO input.FileInputFormat: Total input paths to process : 9
19/01/12 04:58:51 INFO mapreduce.JobSubmitter: number of splits:9
19/01/12 04:58:51 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1547285975031_0001
19/01/12 04:58:53 INFO impl.YarnClientImpl: Submitted application application_1547285975031_0001
19/01/12 04:58:53 INFO mapreduce.Job: The url to track the job: http://Master:8088/proxy/application_1547285975031_0001/
19/01/12 04:58:53 INFO mapreduce.Job: Running job: job_1547285975031_0001
19/01/12 04:59:21 INFO mapreduce.Job: Job job_1547285975031_0001 running in uber mode : false
19/01/12 04:59:21 INFO mapreduce.Job:  map 0% reduce 0%
19/01/12 05:02:09 INFO mapreduce.Job:  map 33% reduce 0%
19/01/12 05:02:10 INFO mapreduce.Job:  map 67% reduce 0%
19/01/12 05:02:24 INFO mapreduce.Job:  map 78% reduce 0%
19/01/12 05:02:25 INFO mapreduce.Job:  map 100% reduce 0%
19/01/12 05:02:27 INFO mapreduce.Job:  map 100% reduce 100%
19/01/12 05:02:27 INFO mapreduce.Job: Job job_1547285975031_0001 completed successfully

查看输出结果

代码语言:javascript
复制
$ hdfs dfs -cat output/*
1       dfsadmin
1       dfs.replication
1       dfs.namenode.secondary.http
1       dfs.namenode.name.dir
1       dfs.datanode.data.dir

关闭集群

代码语言:javascript
复制
$ stop-yarn.sh
$ stop-dfs.sh
$ mr-jobhistory-daemon.sh stop historyserver
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 网络配置
    • 1.1 修改主机名
      • 1.2 在hosts文件中添加IP与主机名的映射关系
        • 2 设置SSH无密码登录节点
          • 3 配置PATH变量
            • 4 配置集群
              • 4.1 修改slaves文件
              • 4.2 修改core-site.xml文件
              • 4.3 修改hdfs-site.xml文件
              • 4.4 修改mapred-site.xml文件
              • 4.5 修改yarn-site.xml文件
              • 4.6 配置Slave1节点
            • 5 启动Hadoop集群
              • 6 执行分布式实例
              相关产品与服务
              大数据
              全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档