Hadoop集群安装--Ubuntu

简介:

  我家宝最近在自学Hadoop,于是乎跟着一起玩玩,在此为她整理一篇基础搭建的博客,希望对她能有所帮助。同样,开始之前先来了解下,什么是Hadoop。

  Hadoop是一个由Apache基金会所开发的分布式系统基础架构。它是根据Google公司发表的MapReduceGoogle文件系统的论文自行实现而成。Hadoop框架透明地为应用提供可靠性和数据移动。它实现了名为MapReduce的编程范式:应用程序被分区成许多小部分,而每个部分都能在集群中的任意节点上运行或重新运行。

  Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。

  用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop的框架最核心的设计就是HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

搭建

  搭建集群的话,需要最少两台机器来搭建一个多节点的Hadoop环境,我这里使用Hadoop最新稳定的2.7.3版本和三台云主机(1主两从,Ubuntu1404 LTS)。

  1. 修改hosts文件

  保证三台机器的网络是可达的前提下,更改主机名,并修改hosts文件:

1
2
3
4
5
6
7
8
# hostnamectl  set-hostname master   // 在master节点上执行
# hostnamectl  set-hostname slave-1  // 在slave-1节点上执行
# hostnamectl  set-hostname slave-2  // 在slave-2节点上执行
分别把三台机器的hosts文件进行修改:
# vim /etc/hosts
192.168.1.2  master
192.168.1.3  slave-1
192.168.1.4  slave-2

2.在master和slave节点上安装java:

1
2
3
4
5
6
7
# add-apt-repository ppa:webupd8team/java  //添加ppa
# apt-get update
# apt-get installoracle-java8-installer 
# java -version  //检验Java版本
java version  "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

3.禁用IPv6

  现在Hadoop目前对IPv6不是很好,在一些Linux发行版上可能造成一些未知bug。在Hadoop Wiki上提供了方法来禁用,我这里修改sysctl.conf文件,添加以下几行:

1
2
3
4
5
# vim /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# sysctl -p  //使其立即生效

4.创建Hadoop User

  在master和slave节点上执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# addgroup hdgroup  //创建hadoop group
# adduser —ingroup hdgroup hduser  //创建Hadoop User并加入Hadoop group
Adding user `hduser' ...
Adding new user `hduser ' (1001) with group `hdgroup'  ...
Creating home directory ` /home/hduser ' ...
Copying files from ` /etc/skel ' ...
Enter new UNIX password:             // 输入密码之后一路回车即可
Retype new UNIX password:
passwd : password updated successfully
Changing the user information  for  hduser
Enter the new value, or press ENTER  for  the default
          Full Name []:
          Room Number []:
          Work Phone []:
          Home Phone []:
          Other []:
Is the information correct? [Y /n ]

  Hadoop要求无密码登录,所以需要生成秘钥,这里注意要用刚才创建的普通hduser用户,分别在master和slave上执行如下操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# su - hduser
ssh -keygen -N  ''
Generating public /private  rsa key pair.
Enter  file  in  which  to save the key ( /home/hduser/ . ssh /id_rsa ):
Created directory  '/home/hduser/.ssh' .
Your identification has been saved  in  /home/hduser/ . ssh /id_rsa .
Your public key has been saved  in  /home/hduser/ . ssh /id_rsa .pub.
The key fingerprint is:
5b:ae:c6:5a:ce:66:51:d3:6c:6c:14:9b:b2:8a:da:e9 hduser@master
The key's randomart image is:
+--[ RSA 2048]----+
|            ..   |
|            .o   |
|          .=o    |
|          oo*    |
|        S.o+     |
|       ..=       |
|      ..+..      |
|     o ==.       |
|    ..E=+        |
+-----------------+
ssh -copy- id  hduser@master
ssh -copy- id  hduser@slave-1
ssh -copy- id  hduser@slave-2

5.下载和安装Hadoop

 登录Hadoop的官方下载地址,选择你需要的版本,复制下载链接,这里我选用最新的2.7.3版本:

wKiom1iezuazT-lkAAL2XegG4Yk005.png-wh_50

 打开链接之后,右键复制链接地址:

wKioL1iezzOBIOACAAI4HvzbjQU970.png-wh_50

在master和slave上分别执行(你也可以在一台机器上下载完之后拷贝到另外两台上):

1
2
3
4
cd  /home/hduser
$ wget -c 
tar  -zxvf hadoop-2.7.3. tar .gz
mv  hadoop-2.7.3 hadoop

6.更改环境变量

  首先确定之前安装的java home目录,查找办法如下(在任意一台机器上执行):

1
2
hduser@master:~$  env  grep  -i java
JAVA_HOME= /usr/lib/jvm/java-8-oracle

  分别在master和slave节点上执行以下操作,编辑".bashrc"文件,添加如下几行:

1
2
3
4
5
$ vim .bashrc    // 编辑文件,添加如下几行
export  HADOOP_HOME= /home/hduser/hadoop
export  JAVA_HOME= /usr/lib/jvm/java-8-oracle
PATH=$PATH:$HADOOP_HOME /bin :$HADOOP_HOME /sbin
source   .bashrc    //source 使其立即生效

  分别在master和slave节点上执行以下操作,更改Hadoop-env的JAVA_HOME:

1
2
3
$ vim  /home/hduser/hadoop/etc/hadoop/hadoop-env .sh
#export JAVA_HOME=${JAVA_HOME}   //更改此行,或者注释掉新加以下一行
export  JAVA_HOME= /usr/lib/jvm/java-8-oracle

7.Hadoop配置

 Hadoop的配置这里主要涉及四个配置文件:etc/hadoop/core-site.xml,etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml and etc/hadoop/mapred-site.xml.

  这里摘录网络上的一段话,在继续下面的操作之前一定要阅读这段,以便更好的理解:

  • Hadoop Distributed File System: A distributed file system that provides high-throughput access to application data. A HDFS cluster primarily consists of a NameNode that manages the file system metadata and DataNodes that store the actual data. If you compare HDFS to a traditional storage structures ( e.g. FAT, NTFS), then NameNode is analogous to a Directory Node structure, and DataNode is analogous to actual file storage blocks.

  • Hadoop YARN: A framework for job scheduling and cluster resource management.

  • Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.

①在master和slave节点上更改"core-site.xml"文件,master和slave节点应该使用相同"fs.defaultFS"值,而且必须指向master节点;在“configuration”中间添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
<property>
   <name>hadoop.tmp. dir < /name >
   <value> /home/hduser/tmp < /value >
   <description>Temporary Directory.< /description >
< /property >
 
<property>
   <name>fs.defaultFS< /name >
   <value>hdfs: //master :54310< /value >
   <description>Use HDFS as  file  storage engine< /description >
< /property >

最终core-site.xml配置文件如下图所示:

wKioL1ie2-2SHfPcAAL8qN5RLB4952.png-wh_50

如果tmp目录不存在,需要手动创建一个:

1
2
mkdir  /home/hduser/tmp
chown  -R hduser:hdgroup  /home/hduser/tmp  // 非hduser用户创建虚赋权

②只在master节点上更改"mapred-site.xml"文件,由于没有这个文件,需要需要复制那个template文件生成一个:

1
2
cd  /home/hduser/hadoop/
cp  -av etc /hadoop/mapred-site .xml.template etc /hadoop/mapred-site .xml

编辑xml配置文件,在“configuration”中间添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
<property>
  <name>mapreduce.jobtracker.address< /name >
  <value>master:54311< /value >
  <description>The host and port that the MapReduce job tracker runs
   at. If “ local ”,  then  jobs are run  in -process as a single map
   and reduce task.
< /description >
< /property >
<property>
  <name>mapreduce.framework.name< /name >
  <value>yarn< /value >
  <description>The framework  for  running mapreduce jobs< /description >
< /property >

③在master和slave节点上更改"hdfs-site.xml"文件,在“configuration”中间添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<property>
  <name>dfs.replication< /name >
  <value>2< /value >
  <description>Default block replication.
   The actual number of replications can be specified when the  file  is created.
   The default is used  if  replication is not specified  in  create  time .
  < /description >
< /property >
<property>
  <name>dfs.namenode.name. dir < /name >
  <value> /data/hduser/hdfs/namenode < /value >
  <description>Determines where on the  local  filesystem the DFS name node should store the name table(fsimage). If this is a comma-delimited list of directories  then  the name table is replicated  in  all of the directories,  for  redundancy.
  < /description >
< /property >
<property>
  <name>dfs.datanode.data. dir < /name >
  <value> /data/hduser/hdfs/datanode < /value >
  <description>Determines where on the  local  filesystem an DFS data node should store its blocks. If this is a comma-delimited list of directories,  then  data will be stored  in  all named directories, typically on different devices. Directories that  do  not exist are ignored.
  < /description >

并创建刚才配置文件中指定的目录:

1
2
mkdir  -p  /home/hduser/data/hduser/hdfs/ {namenode,datanode}
chown  -R hduser:hdgroup  /home/hduser/data/   // 如果非hduser用户创建的需要赋权

1).这里dfs.replication的默认值为3,这里我设置了2个副本,代表每个存储到HDFS的文件都有额外一个副本,这里的值可以视集群规模而定。

2)dfs.namenode.name.dir和dfs.datanode.name.dir是namenode和datanode存放HDFS数据块文件的位置,如果没有需要手动创建

④在master和slave节点上更改"yarn-site.xml"文件,master和slave节点应该使用相同的值,并且指向master节点。在“configuration”中间添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<property>
  <name>yarn.nodemanager.aux-services< /name >
  <value>mapreduce_shuffle< /value >
< /property >
<property>
  <name>yarn.resourcemanager.scheduler.address< /name >
  <value>master:8030< /value >
< /property >
<property>
  <name>yarn.resourcemanager.address< /name >
  <value>master:8032< /value >
< /property >
<property>
   <name>yarn.resourcemanager.webapp.address< /name >
   <value>master:8088< /value >
< /property >
<property>
   <name>yarn.resourcemanager.resource-tracker.address< /name >
   <value>master:8031< /value >
< /property >
<property>
   <name>yarn.resourcemanager.admin.address< /name >
   <value>master:8033< /value >
< /property >

⑤更新slave文件

  在master节点上修改slave文件,添加master和slave节点的主机名或者ip地址,并去掉"localhost":

1
2
3
4
$ vim  /home/hduser/hadoop/etc/hadoop/slaves
master
slave-1
slave-2

⑥格式化namenode:

  在启动cluster之前需要先格式化namenode,在master上执行:

1
$ hdfs namenode - format

看到类似提示INFO:"Storage directory /home/hduser/data/hduser/hdfs/namenode has been successfully formatted."表示格式化成功。

⑦启动服务

  可以直接使用Hadoop提供的脚本"start-all.sh"启动所有服务,也可以把dfs和yarn分别启动。可以使用绝对路径:/home/hduser/hadoop/sbin/start-all.sh,也可以直接调用start-all.sh脚本(因为前面已经改过PATH的路径):

1
$ start-all.sh

如下图所示没有看到任何错误信息,表示集群已成功启动:

wKioL1ifAi6CHKv1AALFSxwfsBE953.png-wh_50

⑧验证查看

  使用jps命令分别在master和slave上查看启动的服务

wKioL1ifAuywLnUvAACUdLK8-wk339.png-wh_50

wKioL1ifAwuBfAE7AABg8r7Ndd4766.png-wh_50

  网页验证:

浏览器打开:http://master:50070

wKioL1ifA_OxKaJlAAK5gJWhOxA586.png-wh_50

  查看yarn web console: http://master:8088/cluster/nodes

如果所有node均正常启动,这里能够全部显示:

wKioL1ifBLewUbRbAAMYZLw9g7U228.png-wh_50

  Hadoop解压的share目录里给我们提供了几个example的jar包,我们执行一个看下效果:

1
$ hadoop jar  /home/hduser/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2 .7.3.jar  pi 30 100

执行之后通过浏览器访问:http://master:8088/cluster/apps

能够看到当前执行的任务:

wKiom1ifBniTbJrxAAKjzYi8iq4349.png-wh_50

写在最后:

  1. 如果在新增了节点或者删除节点的时候出现了问题,首先删除slave的hadoop.tmp.dir,然后重新启动试试看,如果还是不行,尝试把Master的hadoop.tmp.dir删除(意味着dfs上的数据也会丢失)然后需要重新namenode –format。

  2. 如果有任何报错信息记得去查log日志,文件位置在Hadoop的安装目录logs文件夹下。




      本文转自Jx战壕  51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1896964,如需转载请自行联系原作者


相关文章
|
21天前
|
Ubuntu Linux Python
Linux(15)Ubuntu安装ninja构建工具
Linux(15)Ubuntu安装ninja构建工具
98 0
|
6天前
|
Ubuntu Python
Ubuntu 安装Python3.8
Ubuntu 安装Python3.8
31 0
|
3天前
|
分布式计算 资源调度 Hadoop
安装hadoop学习笔记
安装hadoop学习笔记
14 0
安装hadoop学习笔记
|
4天前
|
Ubuntu Unix Linux
在Ubuntu安装RPM文件
Ubuntu使用`apt`和`alien`工具安装软件。`deb`是Ubuntu的标准包格式,但通过`alien`可转换及安装`RPM`包。首先确保启用`Universe`源,然后安装`alien`。转换RPM包为DEB包,运行`sudo alien package_name.rpm`,接着用`sudo apt install package_name.deb`安装。直接安装RPM包可使用`sudo alien -i package_name.rpm`,但这种方法不推荐,可能导致依赖性冲突和系统不稳定。
25 10
|
4天前
|
Ubuntu
ubuntu软件包安装
ubuntu软件包安装
11 1
|
5天前
|
分布式计算 Ubuntu Java
PySpark安装及WordCount实现(基于Ubuntu)
现在,你已经成功安装了PySpark并实现了WordCount示例。你可以根据实际需求修改脚本以处理不同的文本数据。
10 0
|
7天前
|
Ubuntu 应用服务中间件 nginx
ubuntu编译安装nginx及安装nginx_upstream_check_module模块
以上是编译安装Nginx和安装 `nginx_upstream_check_module`模块的基本步骤。根据你的需求和环境,你可能需要进一步配置Nginx以满足特定的要求。
19 3
|
9天前
|
资源调度 JavaScript Ubuntu
Yarn介绍及快速安装Debian/Ubuntu Linux
现在,你已经成功安装了Yarn,可以在你的JavaScript项目中使用它来管理依赖。
49 3
|
9天前
|
Ubuntu
Ubuntu20.04安装SNMP服务
至此,你已经成功在Ubuntu 20.04上安装了SNMP服务。你可以使用SNMP工具来监视和管理你的系统,或者将其集成到网络管理系统中。
26 3
|
13天前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感
Ubuntu 20.04 + mysql8 安装以及配置大小写不敏感