Spark SQL 到底怎么搭建起来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark SQL 到底怎么搭建起来相关的知识,希望对你有一定的参考价值。

参考技术A 1、spark1.0的包编译时指定支持hive: ./make-distribution.sh --hadoop 2.3.0-cdh5.0.0 --with-yarn --with-hive --tgz
2、安装完spark1.0;
3、安装与hadoop对应的CDH版本的hive;
Spark SQL 支持Hive案例:
1、将hive-site.xml配置文件拷贝到$SPARK_HOME/conf下
hive-site.xml文件内容形如:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop000:3306/hive?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>

2、启动spark: spark-shell
案例来源于spark官方文档: http://spark.apache.org/docs/latest/sql-programming-guide.html
//创建hiveContext
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)

// 隐式转换
import hiveContext._

//创建hive表
hql("CREATE TABLE IF NOT EXISTS hive.kv_src (key INT, value STRING)")

//加载数据到hive表
hql("LOAD DATA LOCAL INPATH '/home/spark/app/spark-1.0.0-bin-2.3.0-cdh5.0.0/examples/src/main/resources/kv1.txt' INTO TABLE hive.kv_src")

//通过hql查询
hql("FROM hive.kv_src SELECT key, value").collect().foreach(println)

Spark SQL 高级编程之 HadoopHiveSpark 环境搭建

Spark SQL 高级编程之 Hadoop 生态简介

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: JAVAHOME/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: SCALAHOME/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: HADOOPHOME/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: HIVEHOME/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: MAVENHOME/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:/ PYTHONHOME/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: SPARKHOME/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。这个命令不要重复执行多次。

以上是关于Spark SQL 到底怎么搭建起来的主要内容,如果未能解决你的问题,请参考以下文章

Spark SQL 高级编程之 HadoopHiveSpark 环境搭建

Spark环境搭建-----------数据仓库Hive环境搭建

Spark 集群搭建

mac上搭建kafka并利用spark streaming实时消费

hadoop + spark+ hive 集群搭建(apache版本)

伪分布式Spark + Hive on Spark搭建