Ubuntu 17.10配置Hadoop+Spark环境

怎甘沉沦 提交于 2019-11-28 17:26:27

一、前言

  最近导师带的项目是与大数据相关,感觉这几年大数据技术还挺火的,就想着也去学一下,丰富自己的技能栈。本文主要讲的是hadoop+spark的环境搭建,然后使用自带的examples测试环境,这里不涉及原理介绍。

二、Hadoop的三种运行模式介绍

2.1、 单机模式也叫独立模式(Local或Standalone Mode)

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 

在配置文档中加入:

1234
export JAVA_HOME=/opt/jdkexport JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/libexport PATH=$PATH:$JAVA_HOME/bin

使配置文档生效,执行下面的命令:

source /etc/profile 

最后查看是否安装成功

java -version 

3.3、 安装Scala

  • 官网下载scala(scala-2.12.4.tgz)
  • 解压下载scala包

    123
    sudo tar -xzvf scala-2.12.4.tgz -C /opt/# 修改文档名:sudo mv scala-2.12.4 ./scala
  • 添加环境变量

    1234
    sudo vim /etc/profileexport SCALA_HOME=/opt/scalaexport PATH=$SCALA_HOME/bin:$PATH
  • 使配置生效并测试

    123
    source /etc/profilescala -version  # 输出scala版本号

3.4、 安装ssh并设置免密登录

  • 安装ssh。如果已安装则跳过这一步。

    1
    sudo apt-get install openssh-server
  • 配置ssh无密登录

    12
    ssh-keygen -t rsa # 然后一直回车cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
  • 测试ssh无密登录

    12
    ssh localhost# 如果不提示输入密码则配置成功

[TOC]

四、搭建伪分布式集群

4.1、 hadoop下载安装

  • 下载Hadoop(笔者下载的是hadoop-3.0.0.tar.gz)
  • 解压并重命名

    12345
    # 解压sudo tar -xzvf hadoop-3.0.0.tar.gz -C /opt/# 重命名cd /optsudo hadoop-3.0.0 hadoop
  • 修改文档权限

    123
    cd /optsudo chown -R yourname:yourname hadoop  # yourname替换成你的用户名  -R表示逐级往下授权
  • 配置环境变量

    123456
    sudo vim /etc/profile# 在最后添加下面代码export HADOOP_HOME=/opt/hadoopexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinexport HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport 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

    123456
    # 切换到工作目录cd /opt/hadoop/etc/hadoop# 打开配置文档vim hadoop-env.sh# 直接加上下面代码export JAVA_HOME=/opt/jdk
  • 修改配置文档core-site.xml

    1234
    <property>    <name>fs.defaultFS</name>    <value>hdfs://219.223.243.131:9000</value></property>

219.223.243.131是我的节点所在主机的ip,9000为默认的端口,不用更改

  • 修改配置文档hdfs-site.xml

    1234567891011121314151617181920
    <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

    12345678910111213141516171819202122232425262728293031323334
    <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>         /opt/hadoop/etc/hadoop,         /opt/hadoop/share/hadoop/common/*,         /opt/hadoop/share/hadoop/common/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

    1234567891011121314151617181920212223
    <!-- 指定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>
  • 创建相关目录

    12345678
    sudo mkdir -p /data/hadoop/hdfs/nnsudo mkdir -p /data/hadoop/hdfs/dnsudo mkdir -p /data/hadoop/hdfs/snnsudo mkdir -p /data/hadoop/yarn/nm# 然后给这些目录设置读写权限,# 如果使用当前的用户(非root用户)启动相关进程,`/data`必须具有相应的读写权限# 给`/data`目录及其子目录设置读写权限。 -R 递归设置权限sudo chmod -R 777 /data
  • 对HDFS集群进行格式化,HDFS集群是用来存储数据的

    1
    hdfs namenode -format

4.3、 启动集群

  1. 启动HDFS集群

    1234567
    # 启动主节点hdfs --daemon start namenode # 启动从节点hdfs --daemon start datanode # 验证节点是否启动,输入一下命令jps # 看是否出现namenode和datanode
  2. 启动YARN集群

    123456
    # 启动资源管理器yarn --daemon start resourcemanager# 启动节点管理器yarn --daemon start nodemanager# 验证是否启动,同样是采用`jps`命令,看是否出想相关进程
  3. 启动作业历史服务器

    12
    mapred --daemon start historyserver# 同样采用`jps`命令查看是否启动成功
  4. HDFS和YARN集群都有对应的WEB监控页面。

    HDFS: http://ip:9870 或者 localhost:9870

YARN: http://ip:8088

  1. HDFS集群的简单操作命令

    123
    hdfs dfs -ls /   # 相当于shell中的 llhdfs dfsadmin -safemode leave  # 关闭安全模式hdfs dfs -mkdir -p /user/input  # 在hdfs文档系统上级联创建文档/user/input,
  2. YARN集群examples测试

    1234567891011
    # 计算PI值的作业yarn jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 4 100# wordcount例子# 首先创建一个输入文档,并上传到hdfs文档系统上hdfs dfs -put input /user/heany# 然后执行yarn jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount input output# 用命令行查看结果hdfs dfs -cat /user/output/part-r-00000# 或者在网页上查看

五、 安装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
  • 重命名

    123
    # 切换到工作目录cd /optsudo mv spark-2.3.0-bin-hadoop2.7 spark
  • 添加环境变量

    1234
    sudo vim /etc/profile# 在最后添加下面的代码export SPARK_HOME=/opt/sparkexport PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
  • 修改文档的权限

    12
    cd /optsudo chown -R yourname:yourname ./spark

5.2、 修改配置文档

123456789
# 拷贝配置文档cd /opt/sparkcp ./conf/spark-env.sh.template ./conf/spark-env.sh# 修改配置文档vim ./conf/spark-env.sh# 在最后添加下面的代码export SPARK_DIST_CLASSPATH=$(/opt/hadoop/bin/hadoop classpath)export JAVA_HOME=/opt/jdk

5.3、运行examples验证安装

123
/opt/spark/bin/run-example SparkPi 2>&1 | grep "Pi is roughly"# output# Pi is roughly 3.143635718178591

5.4、 脚本启动Hadoop和Spark

  • 启动spark

    1
    /opt/spark/sbin/start-all.sh
  • 通过WEB页面查看

  • 编写自动化脚本

    12345678910111213141516171819202122232425
    # 启动Hadoop以及Spark脚本#!/bin/bash# 启动Hadoop以及yarnstart-dfs.shstart-yarn.sh# 启动历史服务器#mr-jobhistory-daemon.sh start historyservermapred --daemon start historyserver# 启动Spark/opt/spark/sbin/start-all.sh# 停止Hadoop以及Spark脚本#!/bin/bash# 停止Hadoop以及yarnstop-dfs.shstop-yarn.sh# 停止历史服务器#mr-jobhistory-daemon.sh stop historyservermapred --daemon stop historyserver# 停止Spark/opt/spark/sbin/stop-all.sh

原文链接 大专栏  https://www.dazhuanlan.com/2019/08/15/5d5513bc4b301/

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!