• Spark SQL慕课网日志分析(1)--系列软件(单机)安装配置使用


    来源:

      慕课网 Spark SQL慕课网日志分析_大数据实战

    目标:

      spark系列软件的伪分布式的安装、配置、编译

      spark的使用

    系统:

      mac 10.13.3 /ubuntu 16.06,两个系统都测试过

    软件:

      hadoop,hive,spark,scala,maven

      hadoop伪分布式、spark伪分布式

    详细:

      software 存放安装的软件包
      app 所有软件的安装目录
      data 课程中所有使用的测试数据目录
      source 软件源码目录,spark

    1)下载hadoop
    archive.cloudera.com/cdh5/cdh/5/

    2)Java环境配置
    vim ~/.bashrc
    source ~/.bashrc

    export JAVA_HOME=/home/sumeng/app/jdk1.8.0_161
    export PATH=$JAVA_HOME/bin:$PATH
    export HADOOP_HOME=/home/sumeng/app/hadoop-2.6.0-cdh5.7.0
    export PATH=$HADOOP_HOME/bin:$PATH

    3)机器参数
    修改机器名 sudo vim /etc/hostname
    修改IP与hostname的映射关系 sudo vim /etc/hosts
    ssh免密码登录
    ssh-keygen -t rsa,然后一路回车
    ~$ ls -la 可以查看隐藏文件
    ~$ cd .ssh 打开隐藏文件ssh
    里面有两个文件 id_rsa id_rsa.pub
    ~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

    4)Hadoop配置文件修改:~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop(伪分布式)
    1、hadoop-env.sh
    vim etc/hadoop/hadoop-env.sh,修改其中的这句话:
    export JAVA_HOME=/home/sumeng/app/jdk1.8.0_161

    2、core-site.xml
    vim etc/hadoop/core-site.xml,添加
    #在hadoop2.x中用8020,1.x中端口是9000
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://lenove:8020</value>
    </property>
    <property>
         <name>hadoop.tmp.dir</name>
         <value>/home/sumeng/app/temp</value>
      </property>

    3、hdfs-site.xml
    vim etc/hadoop/hdfs-site.xml
    #hdfs的副本数
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    5)格式化HDFS
    注意:这一步操作,只是在第一次时执行,每次如果都格式化的话,HDFS上的数据就会被清空
    ~$ bin/hdfs namenode -format

    INFO common.Storage: Storage directory /home/sumeng/app/temp/dfs/name has been successfully formatted.

    6)启动HDFS
    在~/app/hadoop-2.6.0-cdh5.7.0安装目录下,bin是客户端的脚本,etc是配置文件,sbin是服务器相关的脚本(比如启动停止)

    #启动namenode datanode
    $ sbin/start-dfs.sh

    可以访问lenove:50070

    7)停止HDFS
    $ sbin/stop-dfs.sh


    #########################################################
    HDFS shell常用命令
    hadoop fs -ls / 查看hdfs的根目录
    ##########################################################
    YARN 架构
    一个ResourceManager 多个 NodeManager。ResourceManager:负责整个集群的资源管理和调度
    修改配置文件
    1)yarn-site.xml
    <configuration>
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    </configuration>

    2)mapred-site.xml
    $ cd /home/sumeng/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop
    $ cp mapred-site.xml.template mapred-site.xml
    $ vi mapred-site.xml
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    </configuration>
    3)启停YARN
    $ sbin/start-yarn.sh
    $ sbin/stop-yarn.sh
    4)web地址:http://lenove:8088/
    ########################################################
    Mapreduce作业提交到Yarn上运行
    在目录/home/sumeng/app/hadoop-2.6.0-cdh5.7.0/share/hadoop/mapreduce下
    ha

    ########################################################
    大数据数据仓库 Hive
    简单容易上手,提供类似SQL查询语言HQL
    为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储)
    统一的元数据管理(可与Prestp/SparkSQL共享数据)

    Hive 底层执行引擎:Mapreduce、Spark
    1)下载Hive
    网址:archive.cloudera.com/cdh5/cdh/5/
    搜索:hive-1.1.0-cdh5.7.0.tar.gz
    进入software目录,输入命令:wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz
    解压到~/app/下
    2)系统环境变量vim ~/.bashrc
    export HIVE_HOME=/home/sumeng/app/hive-1.1.0-cdh5.7.0
    export PATH=$HIVE_HOME/bin:$PATH
    3)修改配置文件
    1)hive-env.sh
    在目录/home/sumeng/app/hive-1.1.0-cdh5.7.0/conf下
    cp hive-env.sh.template hive-env.sh
    vim hive-env.sh
    添加一句HADOOP_HOME=/home/sumeng/app/hadoop-2.6.0-cdh5.7.0
    2)hive-site.xml
    ~/app/hive-1.1.0-cdh5.7.0/conf$ vim hive-site.xml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://127.0.0.1:3306/sparkSQL?createDatabaseIfNotExist=true</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
    </property>
    <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
    </property>
    </configuration>
    4)安装mysql:
    https://www.jianshu.com/p/a8e4068a7a8a
    在系统偏好中启动mysql服务
    登陆命令:mysql -uroot -p
    下载mysql驱动:
    将mysql-connector-java-5.1.46-bin.jar拷贝到$HIVE_HOME/lib/下
    5)启动hive:
    先启动hadoop的dfs/yarn
    $HIVE_HOME/bin/hive
    在后台hive sql提交执行后会生成mr作业,并在yarn上运行
    create table emp(
    empno int,
    ename string,
    job string,
    mgr int,
    hiredate string,
    sal double,
    comm double,
    deptno int
    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
    create table dept(
    deptno int,
    dname string,
    location string
    )ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';

    load data local inpath '/Users/sumeng/data/emp.txt' into table emp;
    ###########################################################
    安装scala2.11.8:
    安装maven3.3.9:
    https://www.jianshu.com/p/d28276f5a991
    ###########################################################
    Spark
    MapReduce的局限性
    执行效率低下
    map 输出结果在磁盘上,reduce再读取
    mapreduce每个作业都是以进程的形式,启动销毁成本很高,jvm复用:多个作业跑在同一个进程

    1)下载
    官网上有pre-build for Hadoop2.6预编译版本,但是2.6.0,2.6.1等都是有区别的,所以选择源码下载
    右击选择复制链接,用wget方式下载
    sumeng@lenove:~/sofrware$ wget https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0.tgz
    解压 tar -zxvf spark-2.1.0.tgz -C ~/app/

    2)编译
    1)maven版本3.3.9及其以上;java7+
    2)不需要--执行export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
    3)pom.xml添加:
    查找/repositories,添加
    <repository>
    <id>cloudera</id>
    <url>http://repository.cloudera.com/artifactory/cloudera-repos/</url>
    </repository>
    4)如果编译的scala版本是2.10
    执行命令./dev/change-scala-version.sh 2.10
    5)mvn编译命令
    ./dev/make-distribution.sh --name 2.6.0-cdh5.7.0 --tgz -Pyarn -Phadoop-2.6 -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver -U -X
    6)在spark目录下会出tgz文件
    7)解压到~/app/,配置环境变量
    3)启动
    local模式,2个线程:
    spark-shell --master local[2]
    standalone模式:
    1个master+n个worker
    注意:以下操作都是在编译之后的spark-2.1.0-bin-2.6.0-cdh5.7.0目录下
    1)
    在conf/目录下
    cp spark-env.sh.template spark-env.sh
    vim spark-env.sh:
    SPARK_MASTER_HOST=lenove
    SPARK_WORKER_CORES=2 #每个worker多少个core
    SPARK_WORKER_MEMORY=2g #每个worker的内存
    SPARK_WORKER_INSTANCES=1 #worker的实例数

    这时可以在sbin/目录下执行 ./start-all.sh ./stop-all.sh 启动服务端,可以在logs/目录下查看日志,启动的core/内存信息
    在bin/目录下提交任务:spark-shell --master spark://localhost:7077
    (bin目录已经配置到环境变量中,可以直接输入命令)
    每一个spark-shell就是一个作业

    2)补充:--Mac跳过 --ubuntu14.04中报错没有设置JVAA_HOME
    在sbin的目录下的spark-config.sh 文件下未添加JAVA_HOME的索引
    在该配置文件下添加 :
    export JAVA_HOME=/usr/java/jdk1.8.0_111 即可
    ###########################################################
    Hive :
    hive on mapreduce:sql-->翻译为mapreduce作业,效率低速度慢
    改进hive on spark-->shark,缺点hql解析依赖hive,仅仅把物理执行计划从mr替换为spark作业
    Shark终结后产生两个分支:
    1)hive on spark
    是hive的一部分,hive社区,源码是在Hive中
    其目的是把Spark作为Hive的一个计算引擎,将Hive的查询作为Spark的任务提交到Spark集群上进行计算。
    2)Spark SQL
    Spark社区,源码是在Spark中
    Spark SQL概述
    支持SQL / Hive QL
    应用不仅局限于sql
    访问hive json等文件的数据
    提供了SQL的api,DataFrame和Dataset的api
    3)两者区别
    结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序
    需要理解的是,Hive和SparkSQL都不负责计算,它们只是告诉Spark,你需要这样算那样算,但是本身并不直接参与计算。
    两者sql引擎不一样,计算引擎都是spark


    第一步:配置idea的scala环境
    下载Scala插件+maven
    第二步:编写程序
    第三步: cd /Users/sumeng/IdeaProjects/ImoocSparkSQLProject 进入项目所在目录
    mvn clean package -DskipTests对项目进行编译
    输出以下结果:
    [INFO] Building jar: /Users/sumeng/IdeaProjects/ImoocSparkSQLProject/target/sql-1.0.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    第四步:执行.sh文件

    参考官方文档:http://spark.apache.org/docs/2.1.0/sql-programming-guide.html#getting-started

    ###########################################################
    注意:每个 Spark Application 都会开启一个自己的 Web UI,默认端口号为4040。 访问地址: http://:4040 。如果同一 node 上运行了多个 Spark Application 则这些应用的端口将会往上累加,eg : 4040,4041,4042 。
    在控制台查看spark job:默认端口是localhost:4040

    spark shell & spark sql---spark操作hive表
    总结为:
    hive-site.xml配置文件
    --jars传递mysql驱动包
    实际操作:
    spark-shell操作hive
    1、启动hadoop的dfs、yarn、hive ,可以通过jps验证是否开启
    2、spark shell 如果想访问hive的元数据,需要作如下拷贝
    meng$ cp hive-site.xml ~/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/conf/
    3、spark-shell --help
    启动:
    ./spark-shell --master local[2] --jars ~/software/mysql-connector-java-5.1.46-bin.jar
    执行相关命令:
    scala> spark.sql("select * from emp e join dept d on e.deptno=d.deptno").show

    期间出现报错,但不影响使用
    ERROR ObjectStore: Version information found in metastore differs 1.1.0 from expected schema version 1.2.0. Schema verififcation is disabled hive.metastore.schema.verification so setting version.
    解决error:在~/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/conf/hive-site.xml中添加下面内容
    <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
    </property>

    spark-sql 操纵hive表
    0、部分配置需要参考spark-shell
    1、以local模式启动spark作业
    ./spark-sql --master local[2] --jars ~/software/mysql-connector-java-5.1.46-bin.jar
    spark-sql控制台:默认端口是localhost:4040
    ###########################################################
    1、启动hadoop
    2、启动thriftserver服务--默认端口是10000
    ./sbin/start-thriftserver.sh --master local[2] --jars ~/software/mysql-connector-java-5.1.46-bin.jar
    3、启动beeline客户端
    ./beeline -u jdbc:hive2://localhost:10000 -n sumengdeMacBook-Pro
    4、在beeline客户端输入查询命令
    show tables;
    select * from emp e join dept d on e.deptno = d.deptno;

    5、可以在启动一个beeline
    6、每个 Spark Application 都会开启一个自己的 Web UI,默认端口号为4040。 访问地址: http://:4040 。如果同一 node 上运行了多个 Spark Application 则这些应用的端口将会往上累加,eg : 4040,4041,4042 。
    在控制台查看spark job:默认端口是localhost:4040
    7、停止thriftserver服务
    ./stop-thriftserver.sh

    rhriftserver 和普通的spark-shell spark-sql有什么区别
    1)没启动一个spark-shell或spark-sql,都会启动一个spark Application
    2)启动一个thriftserver,不管你启动多少个客户端(beeline/code),永远都是只有一个spark allication
    开发中,经常是编写的多个spark应用程序,通过jdbc连接thriftserver,解决了一个数据共享的问题,多个客户端可以共享数据
    ###########################################################
    jdbc编程方式访问thriftserver服务,进而spark sql数据
    maven添加依赖
    注意:在使用jdbc开发时,要先启动thriftserver

    ###########################################################
    第六章:DataFrame&DataSet
    简介:
    dataset是分布式数据集
    dataframe是一种dataset,以列(列名、列的类型、列值)的形式构成的分布式数据集,出现在R/Pandas
    rdd 分布式可以并行处理的数据集
    dataframe更像数据库的表
    RDD:
    java/scala ==> Jvm
    python ==> python runtime
    DataFrame:
    java/scala/python ==> Logic plan 逻辑执行计划

    DataFrame 基本API操作:
    idea编写DataFrameAPP,将json文件加载成一个dataframe,并进行sql操作
    参考DataFrameRDDAPP.scala文件
    DataFrame与RDD互操作interoperating with RDD
    操作之一:反射方式
    操作之二:缺少视频6-7

    DataFrame API操作案例实战:


    操作外部数据源
    7-2,有一张架构图,很好
    7-3,视频缺失

    7-6,操作Hive表数据--sparl-shell下
    0)前期工作
    拷贝hive-site.xml配置文件到conf目录
    --jars传递mysql驱动包(hive的元数据在mysql存放)
    1)启动一个spark-shell
    2)未启动hadoop,照样执行成功,因为只需要访问mysql上的元数据即可,不需要访问hdfs
    scala> spark.sql("show tables").show
    3)执行这句话就需要提前启动hadoop。以下两句等价。
    scala> spark.table("emp").show
    scala> spark.sql("select * from emp").show
    4)sql与dataframel API结合使用。sql的返回值是DataFrame类型。
    spark.sql("select deptno,count(1) from emp group by deptno").filter("deptno != 20").show
    5)插入数据
    spark.sql("insert into emp values (70,null,null,null,null,null,null,null)")
    6)创建新的表
    spark.sql("select deptno,count(1) as mount from emp group by deptno").write.saveAsTable("hive_table")
    7)注意:
    SparkSQL在集群中运行,将一个查询任务分解成大量的Task分配给集群中的各个节点来运行。查询数据时,shuffle的时候使用了缺省的,即200个partition,也就是200个Task
    在生产环境一定要注意设置spark.sql.shuffle.partitions,默认是200
    spark.sqlContext.setConf("spark.sql.shuffle.partitions","10")

    7-7,操作MySQL表数据--sparl-shell下
    可参考官方文档
    返回是Dataframe类型,对应TBLS表
    val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:mysql://127.0.0.1:3306/sparkSQL").option("dbtable", "sparkSQL.TBLS").option("user", "root").option("password", "root").option("driver", "com.mysql.jdbc.Driver").load()

    7-8综合使用
    关联mysql和hive表数据关联操作
    1)向mysql插入DEPT表
    create database spark;
    use spark;

    create table DEPT(
    DEPTNO int(2) primary key,
    DNAME VARCHAR(14),
    LOC VARCHAR(13)
    );

    insert into DEPT values(10,"ACCOUNTING","NEW YORK");
    insert into DEPT values(20,"RESEARCH","DALLAS");
    INSERT into DEPT values(30,"SALES","CHICAGO");
    insert into DEPT values(40,"OPERATIONS","BOSTON");
    2)hive中已经存在的emp表
    3) 联合操作
    参考idea中的代码

  • 相关阅读:
    点击复制的代码
    色彩浅谈——同色系的变化
    网页设计中色彩的运用
    网页设计中透明效果的使用技巧
    基于栅格的网站设计
    页面之门——登录页的设计分析
    错误变惊喜,10个有趣的404页面设计(转)
    jQuery load()方法用法集锦!
    RPM命令用法
    如何使iframe透明
  • 原文地址:https://www.cnblogs.com/SuMeng/p/9201391.html
Copyright © 2020-2023  润新知