Spark SQL 高级编程之 Hadoop、Hive、Spark 环境搭建

  • Post author:
  • Post category:其他




1. 如何学好大数据

  1. 官网(五颗星),多看官网
  2. 项目实战对知识点进行巩固和融会贯通
  3. 社区活动,交个朋友,认识一些人,对跳槽就业有好处
  4. 切记:多动手、多联系、贵在坚持



2. 开发环境

  1. Linux 系统根据自己爱好即可,一般建议 Ubuntu,生态全
  2. Hadoop 版本

    1. Apache 社区,看看就好
    2. CDH 版本,国内一般都是用这个版本,archive.cloudera.com/cdh5/cdh/5/
    3. 注意,生产和测试环境选择对应 CDH 版本时,一定要采用尾号一样的版本。
    4. HDP 版本,国内一般使用的较少



2.1 下载软件包

  1. http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.0.tar.gz
  2. http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.15.0.tar.gz
  3. apache-maven-3.5.4.0-bin.tar.gz
  4. jdk-8u202-linux-x64.tar.gz
  5. scala-2.12.8.tgz
  6. Python-3.7.2.tgz



2.1 Hadoop 环境配置

  1. tar -zxvf jdk-8u202-linux-x64.tar.gz -C ~/app/
  2. tar -zxvf scala-2.12.8.tgz -C ~/app/
  3. tar -zxvf hadoop-2.6.0-cdh5.15.0.tar.gz -C ~/app/
  4. vi ~/.bash_profile 添加:

    export JAVA_HOME=/home/alex/app/jdk1.8.0_202

    export PATH=



    J

    A

    V

    A

    H

    O

    M

    E

    /

    b

    i

    n

    :

    JAVA_HOME/bin:






    J


    A


    V



    A










    H


















    OME


    /


    bin




    :





    PATH

    export SCALA_HOME=/home/alex/app/scala-2.12.8

    export PATH=



    S

    C

    A

    L

    A

    H

    O

    M

    E

    /

    b

    i

    n

    :

    SCALA_HOME/bin:






    SC


    A


    L



    A










    H


















    OME


    /


    bin




    :





    PATH

    export HADOOP_HOME=/home/alex/app/hadoop-2.6.0-cdh5.15.0

    export PATH=



    H

    A

    D

    O

    O

    P

    H

    O

    M

    E

    /

    b

    i

    n

    :

    HADOOP_HOME/bin:






    H


    A


    D


    OO



    P










    H


















    OME


    /


    bin




    :





    PATH

  5. cd hadoop-2.6.0-cdh5.15.0/etc/hadoop
  6. vi hadoop-env.sh
  7. 注释 export JAVA_HOME=${JAVA_HOME},添加 export JAVA_HOME=/home/alex/app/jdk1.8.0_202
  8. vi core-site.xml
  9. 在 configuration 中添加:主机名不可以有下划线
    <property>
        <name>fs.default.name</name>
        <value>hdfs://alexai:8020</value>
    </property>
  1. vi hdfs-site.xml
  2. 在 configuration 中添加:
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/alex/app/tmp/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/alex/app/tmp/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
  1. cp mapred-site.xml.template mapred-site.xml
  2. vi mapred-site.xml
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
  1. vi yarn-site.xml
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
  1. cd /home/alex/app/hadoop-2.6.0-cdh5.15.0/bin
  2. 格式化:./hadoop namenode -format
  3. cd sbin
  4. 如果主机名是 localhost 修改主机名,http://www.cnblogs.com/woshimrf/p/centos-rename.html
  5. 设置免密登录 https://www.jianshu.com/p/99a03cd0870c

    https://segmentfault.com/a/1190000008615560

    http://www.iosugar.com/2017/02/14/CentOS-remote-login-SSH-configuration/
  6. 进入 sbin 目录,./start-dfs.sh
  7. 启动之后查看:jps
  8. 查看是否存在文件:hadoop fs -ls /,此时是空的目录,新建一个目录,hadoop fs -mkdir /test,此时再输入hadoop fs -ls /变出现内容
  9. 上传一个文件到 hadoop上,回到hadoop-2.6.0-cdh5.15.0目录中,执行:hadoop fs -put README.txt /test/,再执行hadoop fs -ls /test,会看到刚才上传上去的内容,执行hadoop fs -text /test/README.txt,查看刚才上传的文件内容
  10. 在服务器浏览器上输入:alexai:50070即可通过视图方式查看,点击 Utilities 下的Browse the file system。如果是远程连接主机,需要在本地配置 hosts,指明 alexai 对应的 IP 地址
  11. 启动 Yarn:./start-yarn.sh,浏览器中输入:alexai:8088
  12. 至此 Hadoop 环境构建完成

    注意点:
  13. 在配置 Hadoop 时,需要设置本机地址 sudo vi /etc/hosts,添加本机的 IP 地址和机器名,比如 192.168.0.120 alex_ai,IP 地址修改后也需要再次配置
  14. 如果出现Java_HOME 问题,参考https://stackoverflow.com/questions/14325594/working-with-hadoop-localhost-error-java-home-is-not-set



3. 框架介绍

  1. Hadoop:分布式系统基础架构。Hadoop 可以认为是一个生态,一个项目。 主要包含如下三个最重要的部件:

    1. HDFS:分布式文件系统;
    2. Yarn:资源调度框架;
    3. MapReduce:构建在 Yarn 之上的平行计算框架。了解即可,目前基本都是用 Spark 了。
    4. Hive:构建在 Hadoop 上的数据仓库;定义了一种类 SQL 查询语言:HQL;

      在这里插入图片描述



3.1 HDFS 优缺点

  1. 优点

    1. 高容错
    2. 适合批处理
    3. 适合大数据处理
    4. 可构建在廉价机器上
  2. 缺点

    1. 低延迟的数据访问
    2. 不适合小文件存储,named node 还是一样大



3.2 MapReduce 特点

了解即可,目前已经很少使用,被 Spark 替代了。

缺点是不擅长

实时计算



流式计算



DAG 计算

场景。

只适合离线批处理任务

场景。

使用时只需要实现 Map 和 Reduce 方法即可。



3.3 Hive



3.3.1 Hive 体系架构

在这里插入图片描述



3.3.2 Hive 测试环境

在这里插入图片描述

通常使用 MySQL 数据库;



3.3.3 生产环境

在这里插入图片描述

MySQL 需要设置主数据库和从数据库;

Hive 只需要部署在一台机器上就行了,不需要在所有机器上部署 Hive;

RM、NN、DN、NM 都需要设置主备;



3.3.4 Hive 环境安装

  1. 下载:http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.15.0.tar.gz
  2. 解压:tar -zxvf hive-1.1.0-cdh5.15.0.tar.gz -C ~/app/
  3. 配置环境变量.bash_profile

    export HIVE_HOME=“/Users/xxx/app/hive-1.1.0-cdh5.15.0”

    export PATH=



    H

    I

    V

    E

    H

    O

    M

    E

    /

    b

    i

    n

    :

    HIVE_HOME/bin:






    H


    I


    V



    E










    H


















    OME


    /


    bin




    :





    PATH

  4. 安装一个关系型数据库,因为这里将数据放到 MySQL 中,https://support.rackspace.com/how-to/installing-mysql-server-on-ubuntu/
  5. 在目录hive-1.1.0-cdh5.15.0/conf中,cp hive-env.sh.template hive-env.sh
  6. 在 hive-env.sh 中配置 HADOOP_HOME=/Users/xxx/app/hadoop-2.6.0-cdh5.15.0。如果没有配置 Hadoop,参考前面的章节。
  7. 在 conf 文件夹中新建hive-site.xml,内容如下,并修改密码等为 MySQL 字段。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

 <property>
     <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
     <description>JDBC connect string for a JDBC metastore</description>
 </property>

 <property>
     <name>javax.jdo.option.ConnectionDriverName</name>
     <value>com.mysql.jdbc.Driver</value>
     <description>Driver class name for a JDBC metastore</description>
 </property>

 <property>
     <name>javax.jdo.option.ConnectionUserName</name>
     <value>root</value>
     <description>username to use against metastore database</description>
 </property>

 <property>
     <name>javax.jdo.option.ConnectionPassword</name>
     <value><fill in with password></value>
     <description>password to use against metastore database</description>
 </property>

 <property>
     <name>hive.metastore.uris</name>
     <value>thrift://localhost:9083</value>
 </property>

</configuration>
  1. 拷贝 MySQL 驱动mysql-connector-java-5.1.47-bin.jar到lib目录中
  2. 启动 Hive,到主目录中输入:./hive



3.4 Spark 环境介绍



3.4.1 Spark 环境搭建



3.4.1.1 配置 Maven 环境
  1. 搭建Maven: tar -zxvf apache-maven-3.5.4-bin.tar.gz -C ~/app/
  2. vi .bash_profile,输入:

    export MAVEN_HOME=/home/alex/app/apache-maven-3.5.4

    export PATH=



    M

    A

    V

    E

    N

    H

    O

    M

    E

    /

    b

    i

    n

    :

    MAVEN_HOME/bin:






    M


    A


    V


    E



    N










    H


















    OME


    /


    bin




    :





    PATH

  3. source .bash_profile
  4. 由于墙的原因,可能需要配置 Maven 的仓库:https://blog.csdn.net/kisslotus/article/details/51000892


3.4.1.2 编译 Python Linux 版本
  1. tar -zxvf Python-3.6.8.tgz -C ~/app/
  2. sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
  3. 在 app 目录下面,mkdir python3
  4. 在Python-3.6.8目录中执行 ./configure –prefix=/home/alex/app/python3
  5. make && make install
  6. vi .bash_profile

    export PYTHON_HOME=/home/alex/app/python3

    export PATH=



    P

    Y

    T

    H

    O

    N

    H

    O

    M

    E

    /

    b

    i

    n

    :

    /

    PYTHON_HOME/bin:/






    P


    Y


    T


    H


    O



    N










    H


















    OME


    /


    bin




    :








    /





    PATH



3.4.1.3 使用 Spark 源码安装
  1. 使用源码好处很多,不建议使用预编译版本安装。下载 Spark 源码:https://archive.apache.org/dist/spark/spark-2.3.2/spark-2.3.2.tgz
  2. tar -zxvf spark-2.3.2.tgz -C ~/app/
  3. 安装 Tutorial:https://spark.apache.org/docs/latest/building-spark.html
  4. export MAVEN_OPTS=“-Xmx2g -XX:ReservedCodeCacheSize=512m”
  5. 在 Spark 主目录中修改 pom.xml文件,添加:
	<repository>
		<id>cloudera</id>
		<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>false</enabled>
		</snapshots>
	</repository>

下载的内容来自:https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hadoop/hadoop-client/2.6.0-cdh5.15.0/

6. 在 Spark 主目录执行:./dev/make-distribution.sh –name 2.6.0-cdh5.15.0 –tgz -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver -Dhadoop.version=2.6.0-cdh5.15.0

7. 编译也许会非常慢,主要是由于墙的原因,需要下载大量包,即便有梯子从cloudera上下载包也非常慢。如果出现 Connection Refused 之类的错误,都是梯子不给力导致的,可以想办法自己下载 Jar 包。

8. 配置环境变量:

export SPARK_HOME=/home/alex/app/spark-2.3.2-bin-2.6.0-cdh5.15.0

export PATH=



S

P

A

R

K

H

O

M

E

/

b

i

n

:

SPARK_HOME/bin:






SP


A


R



K










H


















OME


/


bin




:





PATH

9. 方式一:以 local 模式启动:spark-shell -master local[n], 以n个线程方式启动,也可以写*,表示启动的线程数量等于处理器数量。启动后,默认可以在 4040 端口查看到。

10. 方式二:以 standalone 模式启动,这种方式是主从模式,一个作为主节点,再设置多个从节点,即 1 master + n workers。

1) 在 conf 目录中,cp spark-env.sh.template spark-env.sh; vi spark-env.sh

SPARK_MASTER_HOST=alex-ai-centos.yichulian.net

SPARK_WORKER_CORES=2

SPARK_WORKER_MEMORY=2g

SPARK_WORKER_INSTANCES=1,本版本中不需要配置这个参数,低版本需要配置这个参数

2) 在 sbin 目录中,./start-all.sh。启动之后,可以在 logs 目录中看到日志信息。停止使用 stop-all.sh

3) 在 logs 目录中,打开主节点日志文件,可以看到 MasterUI,http://alex-ai-centos.yichulian.net:8080

4)配置 slaves:

5)在 conf 目录中,cp slaves.template slaves

6)假设现在有10个从节点机器 machine1 – machine 10,主节点机器 machine0,在 vi slaves文件中,添加:

machine1

machine2



machine10

7)之后启动 start-all.sh 时,会在 machine0上启动 master 进程,在 slaves 文件中配置的 machine1-machine10机器上启动 worker 进程

8)启动命令:spark-shell -master spark://alex-ai-centos.yichulian.net:7077。这个命令不要重复执行多次。



版权声明:本文为myonelotus原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。