Ubuntu 17.10配置Hadoop+Spark环境
一、前言
最近导师带的项目是与大数据相关,感觉这几年大数据技术还挺火的,就想着也去学一下,丰富自己的技能栈。本文主要讲的是hadoop+spark的环境搭建,然后使用自带的examples测试环境,这里不涉及原理介绍。
二、Hadoop的三种运行模式介绍
2.1、 单机模式也叫独立模式(Local或Standalone Mode)
- 默认情况下,Hadoop即处于该模式,用于开发和调式。
- 不对配置文件进行修改。
- 使用本地文件系统,而不是分布式文件系统。
- Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。
- 用于对MapReduce程序的逻辑进行调试,确保程序的正确。
2.2、 伪分布式模式(Pseudo-Distrubuted Mode)
- Hadoop的守护进程运行在本机机器上,模拟一个小规模的集群
- 在一台主机上模拟多主机。
- Hadoop启动NameNode、DataNode、JobTracker、TaskTracker这些守护进程都在同一台机器上运行,是相互独立的Java进程。
- 在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由JobTraker服务,来管理的独立进程。在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。类似于完全分布式模式,因此,这种模式常用来开发测试Hadoop程序的执行是否正确。
- 修改3个配置文件:core-site.xml(Hadoop集群的特性,作用于全部进程及客户端)、hdfs-site.xml(配置HDFS集群的工作属性)、mapred-site.xml(配置MapReduce集群的属性)
- 格式化文件系统
2.3、 全分布式集群模式(Full-Distributed Mode)
- Hadoop的守护进程运行在一个集群上
- Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。
- 在所有的主机上安装JDK和Hadoop,组成相互连通的网络。
- 在主机间设置SSH免密码登录,把各从节点生成的公钥添加到主节点的信任列表。
- 修改3个配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指定NameNode和JobTraker的位置和端口,设置文件的副本等参数
- 格式化文件系统。
三、搭建伪分布式集群的前提条件
3.1、 实验环境
- ubuntu 17.10-x64
- jdk_1.8.0_162
- Hadoop-3.0.0
- Spark-2.3.0
3.2、 安装JDK,并配置环境变量
首先去官网下载对应系统版本的jdk,然后解压到opt
目录下,命令如下:
sudo tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt
然后切换到/opt
目录下,修改jdk的文件夹命名
mv jdk-8u162-linux-x64 ./jdk
最后,配置环境变量,
vim /etc/profile
在配置文件中加入:
1 | export JAVA_HOME=/opt/jdk |
使配置文件生效,执行下面的命令:
source /etc/profile
最后查看是否安装成功
java -version
3.3、 安装Scala
- 官网下载scala(scala-2.12.4.tgz)
解压下载scala包
1
2
3sudo tar -xzvf scala-2.12.4.tgz -C /opt/
# 修改文件名:
sudo mv scala-2.12.4 ./scala添加环境变量
1
2
3
4sudo vim /etc/profile
# 在后面添加下面内容
export SCALA_HOME=/opt/scala
export PATH=$SCALA_HOME/bin:$PATH使配置生效并测试
1
2
3source /etc/profile
# 测试是否安装成功
scala -version # 输出scala版本号
3.4、 安装ssh并设置免密登录
安装ssh。如果已安装则跳过这一步。
1
sudo apt-get install openssh-server
配置ssh无密登录
1
2ssh-keygen -t rsa # 然后一直回车
cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys测试ssh无密登录
1
2ssh localhost
# 如果不提示输入密码则配置成功
[TOC]
四、搭建伪分布式集群
4.1、 hadoop下载安装
- 下载Hadoop(笔者下载的是hadoop-3.0.0.tar.gz)
解压并重命名
1
2
3
4
5# 解压
sudo tar -xzvf hadoop-3.0.0.tar.gz -C /opt/
# 重命名
cd /opt
sudo hadoop-3.0.0 hadoop修改文件权限
1
2
3cd /opt
sudo chown -R yourname:yourname hadoop
# yourname替换成你的用户名 -R表示逐级往下授权配置环境变量
1
2
3
4
5
6sudo vim /etc/profile
# 在最后添加下面代码
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_COMMON_LIB_NATIVE_DIR"使配置生效
1
source /etc/profile
测试
1
hadoop version # output the information of the version of the hadoop
4.2、 Hadoop伪分布式配置
修改配置文件
hadoop-env.sh
1
2
3
4
5
6# 切换到工作目录
cd /opt/hadoop/etc/hadoop
# 打开配置文件
vim hadoop-env.sh
# 直接加上下面代码
export JAVA_HOME=/opt/jdk修改配置文件
core-site.xml
1
2
3
4<property>
<name>fs.defaultFS</name>
<value>hdfs://219.223.243.131:9000</value>
</property>
219.223.243.131是我的节点所在主机的ip,9000为默认的端口,不用更改
修改配置文件
hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
<property>
<name>fs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
</property>修改配置文件
mapred-site.xml
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<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.admin.user.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
hadoop hadoop,
hadoop hadoop *,
/*, hadoop hadoop lib
/opt/hadoop/share/hadoop/hdfs/*,
/opt/hadoop/share/hadoop/hdfs/lib/*,
/opt/hadoop/share/hadoop/mapreduce/*,
/opt/hadoop/share/hadoop/mapreduce/lib/*,
/opt/hadoop/share/hadoop/yarn/*,
/opt/hadoop/share/hadoop/yarn/lib/*
</value>
</property>修改配置文件
yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>219.223.243.131</value>
</property>
<!-- 指定reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///data/hadoop/yarn/nm</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
</property>
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>创建相关目录
1
2
3
4
5
6
7
8sudo mkdir -p /data/hadoop/hdfs/nn
sudo mkdir -p /data/hadoop/hdfs/dn
sudo mkdir -p /data/hadoop/hdfs/snn
sudo mkdir -p /data/hadoop/yarn/nm
sudo chmod -R 777 /data对HDFS集群进行格式化,HDFS集群是用来存储数据的
1
hdfs namenode -format
4.3、 启动集群
启动HDFS集群
1
2
3
4
5
6
7# 启动主节点
hdfs --daemon start namenode
# 启动从节点
hdfs --daemon start datanode
# 验证节点是否启动,输入一下命令
jps # 看是否出现namenode和datanode启动YARN集群
1
2
3
4
5
6
yarn --daemon start resourcemanager
yarn --daemon start nodemanager启动作业历史服务器
1
2mapred --daemon start historyserver
# 同样采用`jps`命令查看是否启动成功HDFS和YARN集群都有对应的WEB监控页面。
HDFS: http://ip:9870 或者 localhost:9870
YARN: http://ip:8088
HDFS集群的简单操作命令
1
2
3hdfs dfs -ls / # 相当于shell中的 ll
hdfs dfsadmin -safemode leave # 关闭安全模式
hdfs dfs -mkdir -p /user/input # 在hdfs文件系统上级联创建文件/user/input,YARN集群examples测试
1
2
3
4
5
6
7
8
9
10
11
yarn jar 4 100 hadoop hadoop hadoop-mapreduce-examples-*.jar pi
hdfs dfs -put input heany
yarn jar hadoop hadoop hadoop-mapreduce-examples-*.jar wordcount input output
hdfs dfs -cat -00000 output/part-r
五、 安装Spark
5.1、 下载安装Spark
- 下载Spark(笔者下载的是spark-2.3.0-bin-hadoop2.7.tgz)
解压下载的Spark包
1
sudo tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -C /opt
重命名
1
2
3# 切换到工作目录
cd /opt
sudo mv spark-2.3.0-bin-hadoop2.7 spark添加环境变量
1
2
3
4sudo vim /etc/profile
# 在最后添加下面的代码
export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH修改文件的权限
1
2cd /opt
sudo chown -R yourname:yourname ./spark
5.2、 修改配置文件
1 | # 拷贝配置文件 |
5.3、运行examples验证安装
1 | 2>&1 | grep "Pi is roughly" spark run-example SparkPi |
5.4、 脚本启动Hadoop和Spark
启动spark
1
/opt/spark/sbin/start-all.sh
通过WEB页面查看
浏览器输入地址:http://localhost:8080
编写自动化脚本
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# 启动Hadoop以及Spark脚本
# 启动Hadoop以及yarn
start-dfs.sh
start-yarn.sh
# 启动历史服务器
#mr-jobhistory-daemon.sh start historyserver
mapred --daemon start historyserver
# 启动Spark
/opt/spark/sbin/start-all.sh
# 停止Hadoop以及Spark脚本
# 停止Hadoop以及yarn
stop-dfs.sh
stop-yarn.sh
# 停止历史服务器
#mr-jobhistory-daemon.sh stop historyserver
mapred --daemon stop historyserver
# 停止Spark
/opt/spark/sbin/stop-all.sh