Dongxing's Wiki Dongxing's Wiki
首页
  • 剑指 Offer
  • LeetCode
  • 算法与数据结构
  • Python 语言
  • Web 开发
  • Hive
  • Elastic Search
  • 机器学习
  • NLP
  • 检索技术
  • 数据分析
  • 经验笔记
  • Linux 配置
  • 博客进化记
  • 杂谈
GitHub (opens new window)
首页
  • 剑指 Offer
  • LeetCode
  • 算法与数据结构
  • Python 语言
  • Web 开发
  • Hive
  • Elastic Search
  • 机器学习
  • NLP
  • 检索技术
  • 数据分析
  • 经验笔记
  • Linux 配置
  • 博客进化记
  • 杂谈
GitHub (opens new window)
  • 经验笔记

    • Git 常用命令速查
    • Let's Encrypt 免费泛域名通配符证书申请
    • 在Vmware虚拟机上搭建Hadoop+Spark集群
      • 安装虚拟机
      • 安装ssh server
      • 安装oracle的jdk
      • 配置hosts文件
      • 配置无密码ssh登录
      • 下载解压
      • 配置环境变量
      • 创建一些目录
      • 设置hadoop的配置文件
      • 格式化HDFS
      • 启动hadoop
      • 使用hadoop
    • iTerm2 配置 ssh 记住密码一键登录
    • 使用frp进行内网穿透
    • macOS 上的常用环境配置笔记
    • 使用 kutt.tt 自建短网址服务
    • 在Ubuntu上自建NextCloud
    • 换路由器后连接不上本地 NAS
  • 经验笔记
  • 经验笔记
anthony
2018-05-19
目录

在Vmware虚拟机上搭建Hadoop+Spark集群

本文记录在 Ubuntu Desktop 16.04 环境下,本机作为master节点,使用Vmware Workstation 14创建多个 Ubuntu Server 16.04虚拟机,作为slave节点,搭建hadoop和spark集群的过程。

# 基本环境

# 安装虚拟机

用Vmware创建多个虚拟机,这里创建3个,安装Ubuntu 16服务器版系统,没有图形界面,当作worker机器。

安装后,可使用 FileZilla 等工具,通过SFTP连接到各个虚拟机中,方便主机和虚拟机之间互相传输文件。

本文实验中,通过以下步骤Vmware网卡进行了简单设置:

VMnet1的子网ip设置为192.168.10.0
VMnet8的子网ip设置为192.168.31.0,网关ip设置为192.168.31.2
1
2

以上网卡设置可能不是必须项。

# 安装ssh server

sudo apt install openssh-server
1

# 安装oracle的jdk

到oracle官网下载jdk http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

解压jdk压缩包到要放置的目录下。

tar -zxvf jdk.tar.gz
1

在你的根目录下(root用户是在 /root/下,其他用户 cd ~ )配置环境变量

vi .bashrc
1

加入这些内容(第一项java home路径根据情况而定)

export JAVA_HOME=/home/anthony/programs/jdk1.8.0_171
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
1
2
3
4

保存,然后生效

source .bashrc
1

输入java查看是否成功找到。

可以先在有gui的master用gedit图形编辑器修改,改完后将文件复制一份到共享文件夹里,各个worker节点直接复制覆盖即可。

# 配置hosts文件

配置后,可直接用称呼(如master,worker1)来访问机器,无需记忆ip地址。

sudo vi /etc/hosts
1

在文件前面插入以下内容(ip根据实际情况定)

192.168.31.1 master
192.168.31.128 vm1
192.168.31.129 vm2
192.168.31.130
1
2
3
4

# 配置无密码ssh登录

在每台机器 /etc/ssh/sshd_config中,查找并确认开启了下面这一段

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile	%h/.ssh/authorized_keys
1
2
3

在每台机器上,运行

ssh-keygen -t rsa
1

中间的过程全回车默认即可。然后会在 ~/.ssh/下面生成id_rsa和id_rsa.pub两个文件。

把每台机器上的pub公钥文件收集到同一台机器上,文件里的内容一行一行追加到/.ssh/authorized_keys文件里面,然后把这个文件复制到其他各台机器的~/.ssh/目录下.

补充一个tip,可以使用下面的命令

ssh-copy-id -i id_rsa.pub master
1

将本机的密钥,发送到远程某台机器(这里是master,需注意,一般应写成 username@ip_address的形式,这里因为各台机器的username相同,又配好了hosts,就直接写成master就行了)的authorized_keys里.

配好以后,各台机器之间可以畅通无阻地互相访问了(首次访问时yes一下信任其fingerprint)。试试

ssh master
exit
ssh vm1
exit
ssh vm2
exit
...
1
2
3
4
5
6
7

# 配置hadoop

# 下载解压

官网下载 http://hadoop.apache.org/releases.html 或者从清华tuna之类的镜像站下载国内更快一些。

解压到某个目录下

tar -zxvf hadoop-2.9.0.tar.gz
1

# 配置环境变量

vi .bashrc

# 加入下面的
export HADOOP_HOME=/home/anthony/programs/hadoop-2.9.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

# source一下
source ~/.bashrc
1
2
3
4
5
6
7
8

输入hadoop即可生效。

# 创建一些目录

每台机器的hadoop文件夹下,创建tmp文件夹,创建hdfs/name 和 hdfs/data 文件夹。

# 设置hadoop的配置文件

以下文件均指在hadoop安装文件夹的/etc/hadoop目录下(而不是系统的/etc/下)

core-site.xml 中加入(注意,相关路径和ip地址根据情况自行修改,下面不再赘述此注意事项)

<property>
 <name>hadoop.tmp.dir</name>
 <value>file:///home/anthony/programs/hadoop-2.9.0/tmp</value>
</property>
<property>
 <name>fs.defaultFS</name>
 <value>hdfs://master:9000</value><!-- set up NameNode URI on every node-->
</property>
<property>
 <name>io.file.buffer.size</name>
 <value>131702</value>
</property>
1
2
3
4
5
6
7
8
9
10
11
12

hdfs-site.xml 中加入(这里只有两个slave节点,所以replication设置为2)

<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:///home/anthony/programs/hadoop-2.9.0/hdfs/name</value>
</property>
<property>
 <name>dfs.datanode.name.dir</name>
 <value>file:///home/anthony/programs/hadoop-2.9.0/hdfs/data</value>
</property>
<property>
 <name>dfs.replication</name>
 <value>2</value>
</property>
<property>
 <name>dfs.webhdfs.enabled</name>
 <value>true</value>
</property>
<property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>master:9001</value>
</property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

复制mapred-site.xml.tempate到mapred-site.xml,编辑:

<property>
 <name>mapreduce.framework.name</name>
 <value>yarn</value><!-- or yarn-tez, not local-->
</property> 
<property>
 <name>mapreduce.jobhistory.address</name>
 <value>master:10020</value>
</property>
<property>
 <name>mapreduce.jobhistory.webapp.address</name>
 <value>master:19888</value>
</property>
<property> 
 <name>mapreduce.map.memory.mb</name>
 <value>64</value>
</property> 
<property>
 <name>mapreduce.reduce.memory.mb</name>
 <value>128</value>
</property>
<property>
 <name>mapreduce.map.java.opts</name>
 <value>-Xms128m -Xmx256m</value>
</property> 
<property>
 <name>mapreduce.reduce.java.opts</name>
 <value>-Xms128m -Xmx256m</value>
</property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

编辑 yarn-site.xml :

<property>
 <name>yarn.resourcemanager.hostname</name>
 <value>master</value>
</property> 
<property>
 <name>yarn.nodemanager.hostname</name>
 <value>localhost</value>
</property>
<property>
 <name>yarn.resourcemanager.address</name>
 <value>master:9032</value>
</property> 
<property>
 <name>yarn.resourcemanager.scheduler.address</name>
 <value>master:9030</value>
</property> 
<property>
 <name>yarn.resourcemanager.resource-tracker.address</name>
 <value>master:9031</value>
</property>
<property>
 <name>yarn.resourcemanager.admin.address</name>
 <value>master:9033</value>
</property> 
<property>
 <name>yarn.resourcemanager.webapp.address</name>
 <value>master:9099</value>
</property>
<property>
 <name>yarn.nodemanager.localizer.address</name>
 <value>${yarn.nodemanager.hostname}:10222</value> 
</property>
<property>
 <name>yarn.nodemanager.resource.memory-mb</name>
 <value>1024</value>
</property>
<property>
 <name>yarn.scheduler.maximum-allocation-mb</name>
 <value>512</value>
</property> 
<property>
 <name>yarn.scheduler.minimum-allocation-mb</name>
 <value>256</value>
</property> 
<property>
 <name>yarn.app.mapreduce.am.resource.mb</name>
 <value>384</value>
</property>
<property>
 <name>yarn.nodemanager.vmem-check-enabled</name>
 <value>false</value>
</property> 
<property>
 <name>yarn.nodemanager.vmem-pmem-ratio</name>
 <value>8</value>
</property>
<property>
 <name>yarn.nodemanager.resource.cpu-vcores</name>
 <value>1</value>
</property>
<property>
 <name>yarn.nodemanager.aux-services</name>
 <value>mapreduce_shuffle</value>
</property>
<property>
 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

编辑 hadoop-env.sh :

# 找到JAVA_HOME这一行-注意,此处必须设置为路径】
export JAVA_HOME=/home/anthony/programs/jdk1.8.0_171
1
2

编辑 yarn-env.sh:

# 找到JAVA_HOME这一行【注意,此处保留默认,不设置为路径似乎也可以】
export JAVA_HOME=/home/anthony/programs/jdk1.8.0_171
# 找到 JAVA_HEAP_MAX 这一行
JAVA_HEAP_MAX=-Xmx3072m 
1
2
3
4

修改 masters(没有则创建)文件,加入内容 master 修改 slaves文件,改成

vm1
vm2
1
2

在某一节点上将上述内容修改完成后,可将这些文件传到其他各台机器上,使用相同配置。

# 提示:复制某文件夹1中的全部文件,到另一文件夹2中
# 如果2不存在,可以直接写
cp -r f1 f2
# 如果2已经存在,则上述写法会导致将f1整个文件夹作为子文件夹复制到f2中,因此要写成
cp -r f1/. f2
1
2
3
4
5

# 格式化HDFS

第一次使用前需要先格式化HDFS,在master机器上,找到hadoop目录,bin,运行命令

./hdfs namenode -format
1

# 启动hadoop

切到hadoop下的sbin中

# 一起启动
./start-all.sh
# 分开启动
./start-dfs.sh
./start-yarn.sh
1
2
3
4
5

同样,对应的还有关闭功能。

# 使用hadoop

访问master的地址master:9099,9099端口,来监控集群节点和资源。

访问master master:50070,可以进行文件管理。

在worker节点上,运行命令jps,可以看到有DataNode和NodeManager进程。 在master节点上,可以看到有ResourceManager,NameNode和SecondaryNameNode进程。

下面尝试一些简单操作,并运行wordcount示例程序:

# 查看hdfs报告
hdfs dfsadmin -report

# 文件夹操作
hdfs dfs -mkdir /input
hdfs dfs -chmod 777 /input

# 上传文本
hdfs dfs -put ./shakespeare.txt /input/

# 运行wordcount
# 要求 /output 目录不能存在,否则可能会报错
hadoop jar /home/anthony/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples2.9.0.jar wordcount /input/shakespeare.txt /output

# 输出结果放在/output 下
hdfs dfs -ls /output
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上次更新: 2021/08/29, 2:08:00
Let's Encrypt 免费泛域名通配符证书申请
iTerm2 配置 ssh 记住密码一键登录

← Let's Encrypt 免费泛域名通配符证书申请 iTerm2 配置 ssh 记住密码一键登录→

Theme by Vdoing | Copyright © 2017-2023 anthony 京ICP备17072417-3
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式